From 592a8e6fa016bb1215b0b4cde2ecf7a2c6546013 Mon Sep 17 00:00:00 2001
From: Nasser <42423897+Abdulnaser97@users.noreply.github.com>
Date: Thu, 30 Oct 2025 15:49:22 -0400
Subject: [PATCH 1/3] CodeCanvas: Save
---
electron-builder.CodeCanvas | 7090 +++++++++++++++++++++++++++++++++++
1 file changed, 7090 insertions(+)
create mode 100644 electron-builder.CodeCanvas
diff --git a/electron-builder.CodeCanvas b/electron-builder.CodeCanvas
new file mode 100644
index 00000000000..90acaf5af33
--- /dev/null
+++ b/electron-builder.CodeCanvas
@@ -0,0 +1,7090 @@
+{
+ "drawioXML": "\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n",
+ "fileName": "electron-builder.CodeCanvas",
+ "fileURL": "github",
+ "diagramTemplateVersion": 0.2,
+ "filePath": "electron-builder.CodeCanvas",
+ "repoData": {
+ "packages": {
+ "path": "packages",
+ "fileName": "packages",
+ "cellName": "packages",
+ "cellId": "d5418ff7-b1a6-479c-a52b-e5f2e91b13fa",
+ "visible": true,
+ "children": [
+ "packages/electron-builder",
+ "packages/app-builder-lib",
+ "packages/electron-updater",
+ "packages/electron-publish",
+ "packages/dmg-builder",
+ "packages/builder-util"
+ ]
+ },
+ "packages/app-builder-lib": {
+ "path": "packages/app-builder-lib",
+ "fileName": "app-builder-lib",
+ "cellName": "app-builder-lib",
+ "cellId": "2891eb25-9935-441b-9f57-b482162903d6",
+ "visible": true,
+ "parentCellId": "d5418ff7-b1a6-479c-a52b-e5f2e91b13fa",
+ "children": [
+ "packages/app-builder-lib/src"
+ ]
+ },
+ "packages/app-builder-lib/src": {
+ "path": "packages/app-builder-lib/src",
+ "fileName": "src",
+ "cellName": "src",
+ "cellId": "982b473a-6412-45cf-90f3-295e887d683e",
+ "visible": true,
+ "parentCellId": "2891eb25-9935-441b-9f57-b482162903d6",
+ "children": [
+ "packages/app-builder-lib/src/packager.ts",
+ "packages/app-builder-lib/src/platformPackager.ts",
+ "packages/app-builder-lib/src/targets",
+ "packages/app-builder-lib/src/publish",
+ "packages/app-builder-lib/src/index.ts",
+ "packages/app-builder-lib/src/winPackager.ts",
+ "packages/app-builder-lib/src/codeSign",
+ "packages/app-builder-lib/src/macPackager.ts",
+ "packages/app-builder-lib/src/linuxPackager.ts",
+ "packages/app-builder-lib/src/util",
+ "packages/app-builder-lib/src/vm",
+ "packages/app-builder-lib/src/configuration.ts"
+ ]
+ },
+ "packages/app-builder-lib/src/codeSign": {
+ "path": "packages/app-builder-lib/src/codeSign",
+ "fileName": "codeSign",
+ "cellName": "codeSign",
+ "cellId": "ed5543b9-a205-40b0-8857-c0f6bf3a7c49",
+ "visible": true,
+ "parentCellId": "982b473a-6412-45cf-90f3-295e887d683e",
+ "children": [
+ "packages/app-builder-lib/src/codeSign/windowsCodeSign.ts",
+ "packages/app-builder-lib/src/codeSign/windowsSignToolManager.ts",
+ "packages/app-builder-lib/src/codeSign/macCodeSign.ts"
+ ]
+ },
+ "packages/app-builder-lib/src/codeSign/macCodeSign.ts": {
+ "path": "packages/app-builder-lib/src/codeSign/macCodeSign.ts",
+ "fileName": "macCodeSign.ts",
+ "cellName": "macCodeSign.ts",
+ "cellId": "f076f1cf-81bf-4684-9870-98ebaeb8e876",
+ "visible": true,
+ "parentCellId": "ed5543b9-a205-40b0-8857-c0f6bf3a7c49",
+ "children": [
+ "packages/app-builder-lib/src/codeSign/macCodeSign.ts-simstep-23327905-d34a-4a79-9d63-8922931f6c79",
+ "packages/app-builder-lib/src/codeSign/macCodeSign.ts-simstep-35fc7def-dda5-4e5e-8103-4c2927dd8573"
+ ]
+ },
+ "packages/app-builder-lib/src/codeSign/windowsCodeSign.ts": {
+ "path": "packages/app-builder-lib/src/codeSign/windowsCodeSign.ts",
+ "fileName": "windowsCodeSign.ts",
+ "cellName": "windowsCodeSign.ts",
+ "cellId": "b597f07c-989b-4cd3-a032-b7a5c39ec61c",
+ "visible": true,
+ "parentCellId": "ed5543b9-a205-40b0-8857-c0f6bf3a7c49"
+ },
+ "packages/app-builder-lib/src/codeSign/windowsSignToolManager.ts": {
+ "path": "packages/app-builder-lib/src/codeSign/windowsSignToolManager.ts",
+ "fileName": "windowsSignToolManager.ts",
+ "cellName": "windowsSignToolManager.ts",
+ "cellId": "8a0576a3-34ee-433b-adfd-ace42b748af9",
+ "visible": true,
+ "parentCellId": "ed5543b9-a205-40b0-8857-c0f6bf3a7c49",
+ "children": [
+ "packages/app-builder-lib/src/codeSign/windowsSignToolManager.ts-simstep-b6edc4d8-77cf-4961-a541-1fcdd7d0347a",
+ "packages/app-builder-lib/src/codeSign/windowsSignToolManager.ts-simstep-18bd8074-291c-4596-8cf2-3bf6c02c9e9f"
+ ]
+ },
+ "packages/app-builder-lib/src/configuration.ts": {
+ "path": "packages/app-builder-lib/src/configuration.ts",
+ "fileName": "configuration.ts",
+ "cellName": "configuration.ts",
+ "cellId": "ca25ebdf-8524-4d0f-8503-6a5f90e69b86",
+ "visible": true,
+ "parentCellId": "982b473a-6412-45cf-90f3-295e887d683e",
+ "children": [
+ "packages/app-builder-lib/src/configuration.ts-simstep-17c81f38-7358-4164-bb3a-6bc15aea391f"
+ ]
+ },
+ "packages/app-builder-lib/src/index.ts": {
+ "path": "packages/app-builder-lib/src/index.ts",
+ "fileName": "index.ts",
+ "cellName": "index.ts",
+ "cellId": "1e80829f-3c8a-4ef7-a966-0adf84de2fee",
+ "visible": true,
+ "parentCellId": "982b473a-6412-45cf-90f3-295e887d683e",
+ "children": [
+ "packages/app-builder-lib/src/index.ts-simstep-f35d4a9e-ffec-4d0b-b35f-90850fbb9130",
+ "packages/app-builder-lib/src/index.ts-simstep-5c7b9901-1af2-4f22-8d08-5cf415c1174b"
+ ]
+ },
+ "packages/app-builder-lib/src/linuxPackager.ts": {
+ "path": "packages/app-builder-lib/src/linuxPackager.ts",
+ "fileName": "linuxPackager.ts",
+ "cellName": "linuxPackager.ts",
+ "cellId": "1d4c0740-477c-43b5-9ba1-a657e615182e",
+ "visible": true,
+ "parentCellId": "982b473a-6412-45cf-90f3-295e887d683e",
+ "children": [
+ "packages/app-builder-lib/src/linuxPackager.ts-simstep-8d9c5dd8-e803-4f89-a44c-99db706e647b"
+ ]
+ },
+ "packages/app-builder-lib/src/macPackager.ts": {
+ "path": "packages/app-builder-lib/src/macPackager.ts",
+ "fileName": "macPackager.ts",
+ "cellName": "macPackager.ts",
+ "cellId": "340d83a2-b574-4e1d-a7a9-c0738bd3d5c1",
+ "visible": true,
+ "parentCellId": "982b473a-6412-45cf-90f3-295e887d683e",
+ "children": [
+ "packages/app-builder-lib/src/macPackager.ts-simstep-50d2bb50-cee4-401b-b8a7-7fbd146bb349",
+ "packages/app-builder-lib/src/macPackager.ts-simstep-97bbd682-da9b-492d-b030-4285b15bd321",
+ "packages/app-builder-lib/src/macPackager.ts-simstep-a119fc5e-3525-4cdd-ba24-3a0b7ac93322",
+ "packages/app-builder-lib/src/macPackager.ts-simstep-123a2d8e-40f0-4224-9b92-03e9f597b151"
+ ]
+ },
+ "packages/app-builder-lib/src/packager.ts": {
+ "path": "packages/app-builder-lib/src/packager.ts",
+ "fileName": "packager.ts",
+ "cellName": "packager.ts",
+ "cellId": "a11025ce-9b7e-432d-b898-ecd76cbd1f32",
+ "visible": true,
+ "parentCellId": "982b473a-6412-45cf-90f3-295e887d683e",
+ "children": [
+ "packages/app-builder-lib/src/packager.ts-simstep-74e73870-fc93-4b72-a2fb-047f42786fb8",
+ "packages/app-builder-lib/src/packager.ts-simstep-346d86d2-2683-4a96-b7e9-15d4ddf82a70",
+ "packages/app-builder-lib/src/packager.ts-simstep-519355a1-7c7a-46ed-b106-f54dd725749f",
+ "packages/app-builder-lib/src/packager.ts-simstep-724e64ce-c2d5-4ead-b9dd-ce0e8aa55636",
+ "packages/app-builder-lib/src/packager.ts-simstep-01f7f263-4b72-4d87-83ab-a7a08cbf2040",
+ "packages/app-builder-lib/src/packager.ts-simstep-de69b967-e195-4697-8ba6-cc2939062c1b",
+ "packages/app-builder-lib/src/packager.ts-simstep-71b031b2-a8cb-4b43-b306-5d49ea0d2c70",
+ "packages/app-builder-lib/src/packager.ts-simstep-d425d6c7-ee61-4fba-9346-c190ce7e4f4d"
+ ]
+ },
+ "packages/app-builder-lib/src/platformPackager.ts": {
+ "path": "packages/app-builder-lib/src/platformPackager.ts",
+ "fileName": "platformPackager.ts",
+ "cellName": "platformPackager.ts",
+ "cellId": "e5f7319d-ce48-4427-a671-7d3569ae78a3",
+ "visible": true,
+ "parentCellId": "982b473a-6412-45cf-90f3-295e887d683e",
+ "children": [
+ "packages/app-builder-lib/src/platformPackager.ts-simstep-6f93e673-993e-4d8c-86fd-3d1a86dc70e9",
+ "packages/app-builder-lib/src/platformPackager.ts-simstep-c03732e0-42f1-4b10-a9fe-03b2c4627b11"
+ ]
+ },
+ "packages/app-builder-lib/src/publish": {
+ "path": "packages/app-builder-lib/src/publish",
+ "fileName": "publish",
+ "cellName": "publish",
+ "cellId": "972e5a36-b69f-4b63-98d7-6fd32be116ef",
+ "visible": true,
+ "parentCellId": "982b473a-6412-45cf-90f3-295e887d683e",
+ "children": [
+ "packages/app-builder-lib/src/publish/PublishManager.ts",
+ "packages/app-builder-lib/src/publish/updateInfoBuilder.ts"
+ ]
+ },
+ "packages/app-builder-lib/src/publish/PublishManager.ts": {
+ "path": "packages/app-builder-lib/src/publish/PublishManager.ts",
+ "fileName": "PublishManager.ts",
+ "cellName": "PublishManager.ts",
+ "cellId": "db1190c9-5034-43dc-810f-42f00aefb5d9",
+ "visible": true,
+ "parentCellId": "972e5a36-b69f-4b63-98d7-6fd32be116ef",
+ "children": [
+ "packages/app-builder-lib/src/publish/PublishManager.ts-simstep-44835141-b351-4eb4-a88f-06557b593f98",
+ "packages/app-builder-lib/src/publish/PublishManager.ts-simstep-56c1408f-4203-4d94-a7eb-0753aabca35f",
+ "packages/app-builder-lib/src/publish/PublishManager.ts-simstep-419f3e16-41c0-45a1-aa50-0767e8f54fea",
+ "packages/app-builder-lib/src/publish/PublishManager.ts-simstep-4ddcfbb7-69d1-45b5-8011-d82c032acae3"
+ ]
+ },
+ "packages/app-builder-lib/src/publish/updateInfoBuilder.ts": {
+ "path": "packages/app-builder-lib/src/publish/updateInfoBuilder.ts",
+ "fileName": "updateInfoBuilder.ts",
+ "cellName": "updateInfoBuilder.ts",
+ "cellId": "319ffa48-579d-4eaf-a2fd-ab726f6256f8",
+ "visible": true,
+ "parentCellId": "972e5a36-b69f-4b63-98d7-6fd32be116ef",
+ "children": [
+ "packages/app-builder-lib/src/publish/updateInfoBuilder.ts-simstep-5363a185-f79a-4ffb-aa2d-0310373ec057"
+ ]
+ },
+ "packages/app-builder-lib/src/targets": {
+ "path": "packages/app-builder-lib/src/targets",
+ "fileName": "targets",
+ "cellName": "targets",
+ "cellId": "6285f9fe-25dd-4f8d-8034-98284badf9e5",
+ "visible": true,
+ "parentCellId": "982b473a-6412-45cf-90f3-295e887d683e",
+ "children": [
+ "packages/app-builder-lib/src/targets/nsis",
+ "packages/app-builder-lib/src/targets/AppImageTarget.ts",
+ "packages/app-builder-lib/src/targets/differentialUpdateInfoBuilder.ts",
+ "packages/app-builder-lib/src/targets/MsiTarget.ts"
+ ]
+ },
+ "packages/app-builder-lib/src/targets/AppImageTarget.ts": {
+ "path": "packages/app-builder-lib/src/targets/AppImageTarget.ts",
+ "fileName": "AppImageTarget.ts",
+ "cellName": "AppImageTarget.ts",
+ "cellId": "3a3082f3-48cc-4c7d-9603-bb161d1d0989",
+ "visible": true,
+ "parentCellId": "6285f9fe-25dd-4f8d-8034-98284badf9e5",
+ "children": [
+ "packages/app-builder-lib/src/targets/AppImageTarget.ts-simstep-9736c6d2-d7dc-42b1-9755-113d4a532b88",
+ "packages/app-builder-lib/src/targets/AppImageTarget.ts-simstep-24830eda-2b3b-438e-bdfb-323fcfe8fb35",
+ "packages/app-builder-lib/src/targets/AppImageTarget.ts-simstep-5aeb5fa0-51e1-4bf8-bd3c-d84653ad3d95"
+ ]
+ },
+ "packages/app-builder-lib/src/targets/MsiTarget.ts": {
+ "path": "packages/app-builder-lib/src/targets/MsiTarget.ts",
+ "fileName": "MsiTarget.ts",
+ "cellName": "MsiTarget.ts",
+ "cellId": "81b90a80-c03f-4aa8-ba03-317fa22fac46",
+ "visible": true,
+ "parentCellId": "6285f9fe-25dd-4f8d-8034-98284badf9e5",
+ "children": [
+ "packages/app-builder-lib/src/targets/MsiTarget.ts-simstep-69918668-639b-4f01-aadf-00c01814fee8"
+ ]
+ },
+ "packages/app-builder-lib/src/targets/differentialUpdateInfoBuilder.ts": {
+ "path": "packages/app-builder-lib/src/targets/differentialUpdateInfoBuilder.ts",
+ "fileName": "differentialUpdateInfoBuilder.ts",
+ "cellName": "differentialUpdateInfoBuilder.ts",
+ "cellId": "0850be83-b674-4749-a67c-98b7736d578c",
+ "visible": true,
+ "parentCellId": "6285f9fe-25dd-4f8d-8034-98284badf9e5",
+ "children": [
+ "packages/app-builder-lib/src/targets/differentialUpdateInfoBuilder.ts-simstep-9522c0b4-daee-4514-bde9-cd4721af3e38",
+ "packages/app-builder-lib/src/targets/differentialUpdateInfoBuilder.ts-simstep-4ea7d980-dc32-4761-960e-8280a7b4b574"
+ ]
+ },
+ "packages/app-builder-lib/src/targets/nsis": {
+ "path": "packages/app-builder-lib/src/targets/nsis",
+ "fileName": "nsis",
+ "cellName": "nsis",
+ "cellId": "a54cccdf-6869-486d-b756-ccda8fa8354a",
+ "visible": true,
+ "parentCellId": "6285f9fe-25dd-4f8d-8034-98284badf9e5",
+ "children": [
+ "packages/app-builder-lib/src/targets/nsis/NsisTarget.ts"
+ ]
+ },
+ "packages/app-builder-lib/src/targets/nsis/NsisTarget.ts": {
+ "path": "packages/app-builder-lib/src/targets/nsis/NsisTarget.ts",
+ "fileName": "NsisTarget.ts",
+ "cellName": "NsisTarget.ts",
+ "cellId": "2c78fa58-8fb6-4f94-a2a4-a2263e70cfcf",
+ "visible": true,
+ "parentCellId": "a54cccdf-6869-486d-b756-ccda8fa8354a",
+ "children": [
+ "packages/app-builder-lib/src/targets/nsis/NsisTarget.ts-simstep-616cbbb4-dc8b-4538-a6c9-45caa1aeac6f",
+ "packages/app-builder-lib/src/targets/nsis/NsisTarget.ts-simstep-1b826f7f-e8d7-4b05-9322-ff4709046fe0",
+ "packages/app-builder-lib/src/targets/nsis/NsisTarget.ts-simstep-0440be1c-5d63-4394-ab24-ea4b28cc65e7",
+ "packages/app-builder-lib/src/targets/nsis/NsisTarget.ts-simstep-7af80a58-e2ff-4994-8086-74c150d8e01b",
+ "packages/app-builder-lib/src/targets/nsis/NsisTarget.ts-simstep-cbef6d99-0092-44e9-8f7d-a906ed08ee43",
+ "packages/app-builder-lib/src/targets/nsis/NsisTarget.ts-simstep-3f1e5eeb-3ad0-4f9e-9eb1-68d60efe6153"
+ ]
+ },
+ "packages/app-builder-lib/src/util": {
+ "path": "packages/app-builder-lib/src/util",
+ "fileName": "util",
+ "cellName": "util",
+ "cellId": "0eb64763-d37f-47ee-940f-f78b3d443f15",
+ "visible": true,
+ "parentCellId": "982b473a-6412-45cf-90f3-295e887d683e",
+ "children": [
+ "packages/app-builder-lib/src/util/config",
+ "packages/app-builder-lib/src/util/yarn.ts"
+ ]
+ },
+ "packages/app-builder-lib/src/util/config": {
+ "path": "packages/app-builder-lib/src/util/config",
+ "fileName": "config",
+ "cellName": "config",
+ "cellId": "315d2b1f-34de-415f-99ed-3d126b0d7d93",
+ "visible": true,
+ "parentCellId": "0eb64763-d37f-47ee-940f-f78b3d443f15",
+ "children": [
+ "packages/app-builder-lib/src/util/config/config.ts"
+ ]
+ },
+ "packages/app-builder-lib/src/util/config/config.ts": {
+ "path": "packages/app-builder-lib/src/util/config/config.ts",
+ "fileName": "config.ts",
+ "cellName": "config.ts",
+ "cellId": "c216db25-e131-436a-bd4a-3ef896778e38",
+ "visible": true,
+ "parentCellId": "315d2b1f-34de-415f-99ed-3d126b0d7d93",
+ "children": [
+ "packages/app-builder-lib/src/util/config/config.ts-simstep-ad4169c7-aac6-473f-84be-98864bc0cf60",
+ "packages/app-builder-lib/src/util/config/config.ts-simstep-123cce99-c309-431e-85b0-ce23fc556959"
+ ]
+ },
+ "packages/app-builder-lib/src/util/yarn.ts": {
+ "path": "packages/app-builder-lib/src/util/yarn.ts",
+ "fileName": "yarn.ts",
+ "cellName": "yarn.ts",
+ "cellId": "ca036926-48ee-4551-bbad-0ea2eb67dae1",
+ "visible": true,
+ "parentCellId": "0eb64763-d37f-47ee-940f-f78b3d443f15",
+ "children": [
+ "packages/app-builder-lib/src/util/yarn.ts-simstep-11fcae61-be38-4abd-989d-e789257d2e03"
+ ]
+ },
+ "packages/app-builder-lib/src/vm": {
+ "path": "packages/app-builder-lib/src/vm",
+ "fileName": "vm",
+ "cellName": "vm",
+ "cellId": "d5ee7a07-bdbd-4a26-a5e4-405ed32c144d",
+ "visible": true,
+ "parentCellId": "982b473a-6412-45cf-90f3-295e887d683e",
+ "children": [
+ "packages/app-builder-lib/src/vm/vm.ts",
+ "packages/app-builder-lib/src/vm/WineVm.ts"
+ ]
+ },
+ "packages/app-builder-lib/src/vm/WineVm.ts": {
+ "path": "packages/app-builder-lib/src/vm/WineVm.ts",
+ "fileName": "WineVm.ts",
+ "cellName": "WineVm.ts",
+ "cellId": "e1ed70af-7f97-405f-8ecd-cf6af46891fc",
+ "visible": true,
+ "parentCellId": "d5ee7a07-bdbd-4a26-a5e4-405ed32c144d",
+ "children": [
+ "packages/app-builder-lib/src/vm/WineVm.ts-simstep-af3018f7-2d3f-4e11-a3cd-49e2804312c6"
+ ]
+ },
+ "packages/app-builder-lib/src/vm/vm.ts": {
+ "path": "packages/app-builder-lib/src/vm/vm.ts",
+ "fileName": "vm.ts",
+ "cellName": "vm.ts",
+ "cellId": "dc6c11b5-5e97-4d58-8c38-baa4e65f884a",
+ "visible": true,
+ "parentCellId": "d5ee7a07-bdbd-4a26-a5e4-405ed32c144d"
+ },
+ "packages/app-builder-lib/src/winPackager.ts": {
+ "path": "packages/app-builder-lib/src/winPackager.ts",
+ "fileName": "winPackager.ts",
+ "cellName": "winPackager.ts",
+ "cellId": "04404c1a-e259-4e18-948a-2852349ec863",
+ "visible": true,
+ "parentCellId": "982b473a-6412-45cf-90f3-295e887d683e",
+ "children": [
+ "packages/app-builder-lib/src/winPackager.ts-simstep-4288fc8b-b291-4fa5-9bc2-1dee9507e0be",
+ "packages/app-builder-lib/src/winPackager.ts-simstep-2d08d950-792c-4739-bc87-37a2a96b867f",
+ "packages/app-builder-lib/src/winPackager.ts-simstep-b146ef73-cea7-4625-9ae9-535b6ae48653",
+ "packages/app-builder-lib/src/winPackager.ts-simstep-c20bbd4c-5d31-417a-86e0-762238818638",
+ "packages/app-builder-lib/src/winPackager.ts-simstep-e231944b-0774-43f9-9d86-562f7ee9cde9"
+ ]
+ },
+ "packages/builder-util": {
+ "path": "packages/builder-util",
+ "fileName": "builder-util",
+ "cellName": "builder-util",
+ "cellId": "4c579761-1617-46fe-8a72-49578728b548",
+ "visible": true,
+ "parentCellId": "d5418ff7-b1a6-479c-a52b-e5f2e91b13fa",
+ "children": [
+ "packages/builder-util/src"
+ ]
+ },
+ "packages/builder-util/src": {
+ "path": "packages/builder-util/src",
+ "fileName": "src",
+ "cellName": "src",
+ "cellId": "f6003686-8db7-4713-8cb3-84b29dc88da5",
+ "visible": true,
+ "parentCellId": "4c579761-1617-46fe-8a72-49578728b548",
+ "children": [
+ "packages/builder-util/src/util.ts"
+ ]
+ },
+ "packages/builder-util/src/util.ts": {
+ "path": "packages/builder-util/src/util.ts",
+ "fileName": "util.ts",
+ "cellName": "util.ts",
+ "cellId": "b177908f-31cd-4327-9c7b-c28ab7c7446d",
+ "visible": true,
+ "parentCellId": "f6003686-8db7-4713-8cb3-84b29dc88da5"
+ },
+ "packages/dmg-builder": {
+ "path": "packages/dmg-builder",
+ "fileName": "dmg-builder",
+ "cellName": "dmg-builder",
+ "cellId": "7018df2a-066a-40e7-b304-c22f7f521877",
+ "visible": true,
+ "parentCellId": "d5418ff7-b1a6-479c-a52b-e5f2e91b13fa",
+ "children": [
+ "packages/dmg-builder/src"
+ ]
+ },
+ "packages/dmg-builder/src": {
+ "path": "packages/dmg-builder/src",
+ "fileName": "src",
+ "cellName": "src",
+ "cellId": "3b580427-bf76-40c8-a710-9ad421d02136",
+ "visible": true,
+ "parentCellId": "7018df2a-066a-40e7-b304-c22f7f521877",
+ "children": [
+ "packages/dmg-builder/src/dmg.ts"
+ ]
+ },
+ "packages/dmg-builder/src/dmg.ts": {
+ "path": "packages/dmg-builder/src/dmg.ts",
+ "fileName": "dmg.ts",
+ "cellName": "dmg.ts",
+ "cellId": "0b853e26-5b3b-421d-bf67-853e533e354b",
+ "visible": true,
+ "parentCellId": "3b580427-bf76-40c8-a710-9ad421d02136",
+ "children": [
+ "packages/dmg-builder/src/dmg.ts-simstep-ccde8a63-4634-46d5-b27a-7386cd56aed1",
+ "packages/dmg-builder/src/dmg.ts-simstep-2ebbc873-fff7-458e-8a1f-31664437c8bb",
+ "packages/dmg-builder/src/dmg.ts-simstep-c4168afd-776c-4d32-938b-21977d48a8ec"
+ ]
+ },
+ "packages/electron-builder": {
+ "path": "packages/electron-builder",
+ "fileName": "electron-builder",
+ "cellName": "electron-builder",
+ "cellId": "84084089-74d2-4645-af77-b9b140599300",
+ "visible": true,
+ "parentCellId": "d5418ff7-b1a6-479c-a52b-e5f2e91b13fa",
+ "children": [
+ "packages/electron-builder/src"
+ ]
+ },
+ "packages/electron-builder/src": {
+ "path": "packages/electron-builder/src",
+ "fileName": "src",
+ "cellName": "src",
+ "cellId": "e2e3b351-35eb-4f1b-b92d-671e45ebb9d2",
+ "visible": true,
+ "parentCellId": "84084089-74d2-4645-af77-b9b140599300",
+ "children": [
+ "packages/electron-builder/src/index.ts",
+ "packages/electron-builder/src/builder.ts"
+ ]
+ },
+ "packages/electron-builder/src/builder.ts": {
+ "path": "packages/electron-builder/src/builder.ts",
+ "fileName": "builder.ts",
+ "cellName": "builder.ts",
+ "cellId": "4794a3d2-0469-4617-8dfa-e4e29f10efa5",
+ "visible": true,
+ "parentCellId": "e2e3b351-35eb-4f1b-b92d-671e45ebb9d2"
+ },
+ "packages/electron-builder/src/index.ts": {
+ "path": "packages/electron-builder/src/index.ts",
+ "fileName": "index.ts",
+ "cellName": "index.ts",
+ "cellId": "c69f1f1e-2d8b-45e0-af82-44c7b443f5b4",
+ "visible": true,
+ "parentCellId": "e2e3b351-35eb-4f1b-b92d-671e45ebb9d2",
+ "children": [
+ "packages/electron-builder/src/index.ts-simstep-37c61fda-3ac3-48c6-ac1b-2d3d16a1ba50"
+ ]
+ },
+ "packages/electron-publish": {
+ "path": "packages/electron-publish",
+ "fileName": "electron-publish",
+ "cellName": "electron-publish",
+ "cellId": "f34fce8c-b0c7-4006-9404-2e1bdcd755c1",
+ "visible": true,
+ "parentCellId": "d5418ff7-b1a6-479c-a52b-e5f2e91b13fa",
+ "children": [
+ "packages/electron-publish/src"
+ ]
+ },
+ "packages/electron-publish/src": {
+ "path": "packages/electron-publish/src",
+ "fileName": "src",
+ "cellName": "src",
+ "cellId": "3b244d04-ba40-4ad0-9a7c-33eccbbe17cd",
+ "visible": true,
+ "parentCellId": "f34fce8c-b0c7-4006-9404-2e1bdcd755c1",
+ "children": [
+ "packages/electron-publish/src/gitHubPublisher.ts"
+ ]
+ },
+ "packages/electron-publish/src/gitHubPublisher.ts": {
+ "path": "packages/electron-publish/src/gitHubPublisher.ts",
+ "fileName": "gitHubPublisher.ts",
+ "cellName": "gitHubPublisher.ts",
+ "cellId": "6f9d1a1d-f477-41b4-97c2-696bf1f2df0f",
+ "visible": true,
+ "parentCellId": "3b244d04-ba40-4ad0-9a7c-33eccbbe17cd",
+ "children": [
+ "packages/electron-publish/src/gitHubPublisher.ts-simstep-a6549131-20b8-4199-aaba-db87a8583448"
+ ]
+ },
+ "packages/electron-updater": {
+ "path": "packages/electron-updater",
+ "fileName": "electron-updater",
+ "cellName": "electron-updater",
+ "cellId": "0c82a2c5-631f-4077-ae7a-21089348d97a",
+ "visible": true,
+ "parentCellId": "d5418ff7-b1a6-479c-a52b-e5f2e91b13fa",
+ "children": [
+ "packages/electron-updater/src"
+ ]
+ },
+ "packages/electron-updater/src": {
+ "path": "packages/electron-updater/src",
+ "fileName": "src",
+ "cellName": "src",
+ "cellId": "68aede06-2d8b-46a7-8cbe-78f2aed3541e",
+ "visible": true,
+ "parentCellId": "0c82a2c5-631f-4077-ae7a-21089348d97a",
+ "children": [
+ "packages/electron-updater/src/main.ts",
+ "packages/electron-updater/src/AppUpdater.ts",
+ "packages/electron-updater/src/providers",
+ "packages/electron-updater/src/BaseUpdater.ts",
+ "packages/electron-updater/src/differentialDownloader"
+ ]
+ },
+ "packages/electron-updater/src/AppUpdater.ts": {
+ "path": "packages/electron-updater/src/AppUpdater.ts",
+ "fileName": "AppUpdater.ts",
+ "cellName": "AppUpdater.ts",
+ "cellId": "ab16d105-df22-4acb-9ff7-d8abdcfb8d67",
+ "visible": true,
+ "parentCellId": "68aede06-2d8b-46a7-8cbe-78f2aed3541e",
+ "children": [
+ "packages/electron-updater/src/AppUpdater.ts-simstep-3bfbefce-7c30-49ec-8639-e675734f7eac",
+ "packages/electron-updater/src/AppUpdater.ts-simstep-8e15b5d0-9308-4f92-be9a-4589f787888b",
+ "packages/electron-updater/src/AppUpdater.ts-simstep-c6f3a286-6ef4-425f-b2c3-80f17caa8c3f",
+ "packages/electron-updater/src/AppUpdater.ts-simstep-b55b8474-d5dc-42ab-a0bc-74c99549ec1e",
+ "packages/electron-updater/src/AppUpdater.ts-simstep-5787a85b-1a5d-42f4-b854-fa7587b8fe52",
+ "packages/electron-updater/src/AppUpdater.ts-simstep-d311b182-c04d-47c3-95af-507dc23a943d"
+ ]
+ },
+ "packages/electron-updater/src/BaseUpdater.ts": {
+ "path": "packages/electron-updater/src/BaseUpdater.ts",
+ "fileName": "BaseUpdater.ts",
+ "cellName": "BaseUpdater.ts",
+ "cellId": "2789fe8a-9b4c-4d4d-9474-7c74e9b3af29",
+ "visible": true,
+ "parentCellId": "68aede06-2d8b-46a7-8cbe-78f2aed3541e",
+ "children": [
+ "packages/electron-updater/src/BaseUpdater.ts-simstep-4dee9b52-2d29-4068-88a1-68df85d796be",
+ "packages/electron-updater/src/BaseUpdater.ts-simstep-847a4db6-b5da-41a5-a612-95c61446ff2b"
+ ]
+ },
+ "packages/electron-updater/src/differentialDownloader": {
+ "path": "packages/electron-updater/src/differentialDownloader",
+ "fileName": "differentialDownloader",
+ "cellName": "differentialDownloader",
+ "cellId": "961a4a5f-dbd2-4376-8149-5ed6d9501595",
+ "visible": true,
+ "parentCellId": "68aede06-2d8b-46a7-8cbe-78f2aed3541e",
+ "children": [
+ "packages/electron-updater/src/differentialDownloader/DifferentialDownloader.ts",
+ "packages/electron-updater/src/differentialDownloader/downloadPlanBuilder.ts",
+ "packages/electron-updater/src/differentialDownloader/multipleRangeDownloader.ts"
+ ]
+ },
+ "packages/electron-updater/src/differentialDownloader/DifferentialDownloader.ts": {
+ "path": "packages/electron-updater/src/differentialDownloader/DifferentialDownloader.ts",
+ "fileName": "DifferentialDownloader.ts",
+ "cellName": "DifferentialDownloader.ts",
+ "cellId": "b569585b-3d08-4b24-8dab-5693c7467270",
+ "visible": true,
+ "parentCellId": "961a4a5f-dbd2-4376-8149-5ed6d9501595"
+ },
+ "packages/electron-updater/src/differentialDownloader/downloadPlanBuilder.ts": {
+ "path": "packages/electron-updater/src/differentialDownloader/downloadPlanBuilder.ts",
+ "fileName": "downloadPlanBuilder.ts",
+ "cellName": "downloadPlanBuilder.ts",
+ "cellId": "e5d82326-fe46-455c-911e-d9df10103132",
+ "visible": true,
+ "parentCellId": "961a4a5f-dbd2-4376-8149-5ed6d9501595",
+ "children": [
+ "packages/electron-updater/src/differentialDownloader/downloadPlanBuilder.ts-simstep-b485c578-5b03-457f-a0a8-81b36897cbec"
+ ]
+ },
+ "packages/electron-updater/src/differentialDownloader/multipleRangeDownloader.ts": {
+ "path": "packages/electron-updater/src/differentialDownloader/multipleRangeDownloader.ts",
+ "fileName": "multipleRangeDownloader.ts",
+ "cellName": "multipleRangeDownloader.ts",
+ "cellId": "543156d6-0a81-4ba0-a747-724fd337239b",
+ "visible": true,
+ "parentCellId": "961a4a5f-dbd2-4376-8149-5ed6d9501595",
+ "children": [
+ "packages/electron-updater/src/differentialDownloader/multipleRangeDownloader.ts-simstep-4ea4d3ec-b303-433d-a39f-e8d124940302"
+ ]
+ },
+ "packages/electron-updater/src/main.ts": {
+ "path": "packages/electron-updater/src/main.ts",
+ "fileName": "main.ts",
+ "cellName": "main.ts",
+ "cellId": "2270c0f9-b1e3-4aeb-b8fd-8144ef5254ae",
+ "visible": true,
+ "parentCellId": "68aede06-2d8b-46a7-8cbe-78f2aed3541e",
+ "children": [
+ "packages/electron-updater/src/main.ts-simstep-74d951fa-b26b-4419-9820-2610d732a2cb"
+ ]
+ },
+ "packages/electron-updater/src/providers": {
+ "path": "packages/electron-updater/src/providers",
+ "fileName": "providers",
+ "cellName": "providers",
+ "cellId": "2201bf8e-5b0b-4ef4-bf2d-7f24f9671757",
+ "visible": true,
+ "parentCellId": "68aede06-2d8b-46a7-8cbe-78f2aed3541e",
+ "children": [
+ "packages/electron-updater/src/providers/GenericProvider.ts"
+ ]
+ },
+ "packages/electron-updater/src/providers/GenericProvider.ts": {
+ "path": "packages/electron-updater/src/providers/GenericProvider.ts",
+ "fileName": "GenericProvider.ts",
+ "cellName": "GenericProvider.ts",
+ "cellId": "aa871f28-88c7-4981-90b5-fa12a3734be1",
+ "visible": true,
+ "parentCellId": "2201bf8e-5b0b-4ef4-bf2d-7f24f9671757",
+ "children": [
+ "packages/electron-updater/src/providers/GenericProvider.ts-simstep-4f03a31a-697e-4611-b943-e0e59053a7eb"
+ ]
+ },
+ "pages": {
+ "path": "pages",
+ "fileName": "pages",
+ "cellName": "pages",
+ "cellId": "ac2ca802-6c8a-4cff-815c-2901b6bcd7c9",
+ "visible": true,
+ "children": [
+ "pages/multi-platform-build.md"
+ ]
+ },
+ "pages/multi-platform-build.md": {
+ "path": "pages/multi-platform-build.md",
+ "fileName": "multi-platform-build.md",
+ "cellName": "multi-platform-build.md",
+ "cellId": "53d6212c-8fb2-410a-b890-ba030586a0fe",
+ "visible": true,
+ "parentCellId": "ac2ca802-6c8a-4cff-815c-2901b6bcd7c9",
+ "children": [
+ "pages/multi-platform-build.md-simstep-217d27ce-874f-4f3f-bf25-18890c8d9517"
+ ]
+ },
+ "test": {
+ "path": "test",
+ "fileName": "test",
+ "cellName": "test",
+ "cellId": "da0ff881-3cac-42f6-8426-951d2d89040a",
+ "visible": true,
+ "children": [
+ "test/fixtures"
+ ]
+ },
+ "test/fixtures": {
+ "path": "test/fixtures",
+ "fileName": "fixtures",
+ "cellName": "fixtures",
+ "cellId": "d53b9401-2021-4574-85da-d7e82a75c18e",
+ "visible": true,
+ "parentCellId": "da0ff881-3cac-42f6-8426-951d2d89040a",
+ "children": [
+ "test/fixtures/test-app"
+ ]
+ },
+ "test/fixtures/test-app": {
+ "path": "test/fixtures/test-app",
+ "fileName": "test-app",
+ "cellName": "test-app",
+ "cellId": "04753233-82d5-44e6-b3dd-e436ed2c723d",
+ "visible": true,
+ "parentCellId": "d53b9401-2021-4574-85da-d7e82a75c18e",
+ "children": [
+ "test/fixtures/test-app/app"
+ ]
+ },
+ "test/fixtures/test-app/app": {
+ "path": "test/fixtures/test-app/app",
+ "fileName": "app",
+ "cellName": "app",
+ "cellId": "4a23c4b0-a29d-426d-8995-31646cdfbfa8",
+ "visible": true,
+ "parentCellId": "04753233-82d5-44e6-b3dd-e436ed2c723d",
+ "children": [
+ "test/fixtures/test-app/app/index.js"
+ ]
+ },
+ "test/fixtures/test-app/app/index.js": {
+ "path": "test/fixtures/test-app/app/index.js",
+ "fileName": "index.js",
+ "cellName": "index.js",
+ "cellId": "f528ac8c-81e8-4565-a2d3-c8a8bcf5a29d",
+ "visible": true,
+ "parentCellId": "4a23c4b0-a29d-426d-8995-31646cdfbfa8"
+ },
+ "d5418ff7-b1a6-479c-a52b-e5f2e91b13fa": {
+ "path": "d5418ff7-b1a6-479c-a52b-e5f2e91b13fa",
+ "cellName": "packages",
+ "cellId": "d5418ff7-b1a6-479c-a52b-e5f2e91b13fa",
+ "visible": true
+ },
+ "84084089-74d2-4645-af77-b9b140599300": {
+ "path": "84084089-74d2-4645-af77-b9b140599300",
+ "cellName": "electron-builder",
+ "cellId": "84084089-74d2-4645-af77-b9b140599300",
+ "visible": true,
+ "parentCellId": "d5418ff7-b1a6-479c-a52b-e5f2e91b13fa"
+ },
+ "2891eb25-9935-441b-9f57-b482162903d6": {
+ "path": "2891eb25-9935-441b-9f57-b482162903d6",
+ "cellName": "app-builder-lib",
+ "cellId": "2891eb25-9935-441b-9f57-b482162903d6",
+ "visible": true,
+ "parentCellId": "d5418ff7-b1a6-479c-a52b-e5f2e91b13fa"
+ },
+ "e2e3b351-35eb-4f1b-b92d-671e45ebb9d2": {
+ "path": "e2e3b351-35eb-4f1b-b92d-671e45ebb9d2",
+ "cellName": "src",
+ "cellId": "e2e3b351-35eb-4f1b-b92d-671e45ebb9d2",
+ "visible": true,
+ "parentCellId": "84084089-74d2-4645-af77-b9b140599300"
+ },
+ "982b473a-6412-45cf-90f3-295e887d683e": {
+ "path": "982b473a-6412-45cf-90f3-295e887d683e",
+ "cellName": "src",
+ "cellId": "982b473a-6412-45cf-90f3-295e887d683e",
+ "visible": true,
+ "parentCellId": "2891eb25-9935-441b-9f57-b482162903d6"
+ },
+ "c69f1f1e-2d8b-45e0-af82-44c7b443f5b4": {
+ "path": "c69f1f1e-2d8b-45e0-af82-44c7b443f5b4",
+ "cellName": "index.ts",
+ "cellId": "c69f1f1e-2d8b-45e0-af82-44c7b443f5b4",
+ "visible": true,
+ "parentCellId": "e2e3b351-35eb-4f1b-b92d-671e45ebb9d2"
+ },
+ "a11025ce-9b7e-432d-b898-ecd76cbd1f32": {
+ "path": "a11025ce-9b7e-432d-b898-ecd76cbd1f32",
+ "cellName": "packager.ts",
+ "cellId": "a11025ce-9b7e-432d-b898-ecd76cbd1f32",
+ "visible": true,
+ "parentCellId": "982b473a-6412-45cf-90f3-295e887d683e"
+ },
+ "e5f7319d-ce48-4427-a671-7d3569ae78a3": {
+ "path": "e5f7319d-ce48-4427-a671-7d3569ae78a3",
+ "cellName": "platformPackager.ts",
+ "cellId": "e5f7319d-ce48-4427-a671-7d3569ae78a3",
+ "visible": true,
+ "parentCellId": "982b473a-6412-45cf-90f3-295e887d683e"
+ },
+ "6285f9fe-25dd-4f8d-8034-98284badf9e5": {
+ "path": "6285f9fe-25dd-4f8d-8034-98284badf9e5",
+ "cellName": "targets",
+ "cellId": "6285f9fe-25dd-4f8d-8034-98284badf9e5",
+ "visible": true,
+ "parentCellId": "982b473a-6412-45cf-90f3-295e887d683e"
+ },
+ "972e5a36-b69f-4b63-98d7-6fd32be116ef": {
+ "path": "972e5a36-b69f-4b63-98d7-6fd32be116ef",
+ "cellName": "publish",
+ "cellId": "972e5a36-b69f-4b63-98d7-6fd32be116ef",
+ "visible": true,
+ "parentCellId": "982b473a-6412-45cf-90f3-295e887d683e"
+ },
+ "a54cccdf-6869-486d-b756-ccda8fa8354a": {
+ "path": "a54cccdf-6869-486d-b756-ccda8fa8354a",
+ "cellName": "nsis",
+ "cellId": "a54cccdf-6869-486d-b756-ccda8fa8354a",
+ "visible": true,
+ "parentCellId": "6285f9fe-25dd-4f8d-8034-98284badf9e5"
+ },
+ "db1190c9-5034-43dc-810f-42f00aefb5d9": {
+ "path": "db1190c9-5034-43dc-810f-42f00aefb5d9",
+ "cellName": "PublishManager.ts",
+ "cellId": "db1190c9-5034-43dc-810f-42f00aefb5d9",
+ "visible": true,
+ "parentCellId": "972e5a36-b69f-4b63-98d7-6fd32be116ef"
+ },
+ "319ffa48-579d-4eaf-a2fd-ab726f6256f8": {
+ "path": "319ffa48-579d-4eaf-a2fd-ab726f6256f8",
+ "cellName": "updateInfoBuilder.ts",
+ "cellId": "319ffa48-579d-4eaf-a2fd-ab726f6256f8",
+ "visible": true,
+ "parentCellId": "972e5a36-b69f-4b63-98d7-6fd32be116ef"
+ },
+ "2c78fa58-8fb6-4f94-a2a4-a2263e70cfcf": {
+ "path": "2c78fa58-8fb6-4f94-a2a4-a2263e70cfcf",
+ "cellName": "NsisTarget.ts",
+ "cellId": "2c78fa58-8fb6-4f94-a2a4-a2263e70cfcf",
+ "visible": true,
+ "parentCellId": "a54cccdf-6869-486d-b756-ccda8fa8354a"
+ },
+ "2557e9f0-0617-4e2b-84a0-bc0182ab76b9": {
+ "path": "2557e9f0-0617-4e2b-84a0-bc0182ab76b9",
+ "cellName": "Build Initiation - index.ts:L86-97",
+ "cellId": "2557e9f0-0617-4e2b-84a0-bc0182ab76b9",
+ "visible": true,
+ "parentCellId": "c69f1f1e-2d8b-45e0-af82-44c7b443f5b4"
+ },
+ "packages/electron-builder/src/index.ts-simstep-37c61fda-3ac3-48c6-ac1b-2d3d16a1ba50": {
+ "path": "packages/electron-builder/src/index.ts-simstep-37c61fda-3ac3-48c6-ac1b-2d3d16a1ba50",
+ "fileName": "index.ts",
+ "wiki": "The build process is initiated by calling the top-level `build` function. This function initializes the main `Packager` instance, which orchestrates the entire build, and a `PublishManager` to handle artifact uploads and release management.",
+ "cellName": "Build Initiation - index.ts:L86-97",
+ "cellId": "2557e9f0-0617-4e2b-84a0-bc0182ab76b9",
+ "visible": true,
+ "startLine": 86,
+ "endLine": 97,
+ "parentCellId": "c69f1f1e-2d8b-45e0-af82-44c7b443f5b4",
+ "parentPath": "packages/electron-builder/src/index.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Build and package Electron apps into distributable formats for macOS, Windows, and Linux.",
+ "simStepId": "37c61fda-3ac3-48c6-ac1b-2d3d16a1ba50"
+ }
+ ]
+ },
+ "705abe8c-1ac1-4649-bb74-24a448b4dfba": {
+ "path": "705abe8c-1ac1-4649-bb74-24a448b4dfba",
+ "cellName": "Main Build Orchestration - packager.ts:L476-509",
+ "cellId": "705abe8c-1ac1-4649-bb74-24a448b4dfba",
+ "visible": true,
+ "parentCellId": "a11025ce-9b7e-432d-b898-ecd76cbd1f32"
+ },
+ "packages/app-builder-lib/src/packager.ts-simstep-74e73870-fc93-4b72-a2fb-047f42786fb8": {
+ "path": "packages/app-builder-lib/src/packager.ts-simstep-74e73870-fc93-4b72-a2fb-047f42786fb8",
+ "fileName": "packager.ts",
+ "wiki": "The `Packager.build` method orchestrates the entire process. It identifies the target platforms and architectures, creates platform-specific packagers (e.g., `WinPackager`), and then calls `createTargets` to instantiate the builders for each specified format (e.g., NSIS, DMG).",
+ "cellName": "Main Build Orchestration - packager.ts:L476-509",
+ "cellId": "705abe8c-1ac1-4649-bb74-24a448b4dfba",
+ "visible": true,
+ "startLine": 476,
+ "endLine": 509,
+ "parentCellId": "a11025ce-9b7e-432d-b898-ecd76cbd1f32",
+ "parentPath": "packages/app-builder-lib/src/packager.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Build and package Electron apps into distributable formats for macOS, Windows, and Linux.",
+ "simStepId": "74e73870-fc93-4b72-a2fb-047f42786fb8"
+ }
+ ]
+ },
+ "54abc9cf-725a-4fa4-8542-7bd2d55bfd23": {
+ "path": "54abc9cf-725a-4fa4-8542-7bd2d55bfd23",
+ "cellName": "Application Staging - platformPackager.ts:L252-272",
+ "cellId": "54abc9cf-725a-4fa4-8542-7bd2d55bfd23",
+ "visible": true,
+ "parentCellId": "e5f7319d-ce48-4427-a671-7d3569ae78a3"
+ },
+ "packages/app-builder-lib/src/platformPackager.ts-simstep-6f93e673-993e-4d8c-86fd-3d1a86dc70e9": {
+ "path": "packages/app-builder-lib/src/platformPackager.ts-simstep-6f93e673-993e-4d8c-86fd-3d1a86dc70e9",
+ "fileName": "platformPackager.ts",
+ "wiki": "The `PlatformPackager.doPack` method prepares the application for packaging. This involves downloading and unpacking the correct Electron version, copying the application's source files, installing production dependencies, and bundling the app's source code into an `app.asar` archive.",
+ "cellName": "Application Staging - platformPackager.ts:L252-272",
+ "cellId": "54abc9cf-725a-4fa4-8542-7bd2d55bfd23",
+ "visible": true,
+ "startLine": 252,
+ "endLine": 272,
+ "parentCellId": "e5f7319d-ce48-4427-a671-7d3569ae78a3",
+ "parentPath": "packages/app-builder-lib/src/platformPackager.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Build and package Electron apps into distributable formats for macOS, Windows, and Linux.",
+ "simStepId": "6f93e673-993e-4d8c-86fd-3d1a86dc70e9"
+ }
+ ]
+ },
+ "992f3600-6b95-433c-b47f-8d8b849b3e16": {
+ "path": "992f3600-6b95-433c-b47f-8d8b849b3e16",
+ "cellName": "Creating Distributable Package (NSIS Example) - NsisTarget.ts:L358-393",
+ "cellId": "992f3600-6b95-433c-b47f-8d8b849b3e16",
+ "visible": true,
+ "parentCellId": "2c78fa58-8fb6-4f94-a2a4-a2263e70cfcf"
+ },
+ "packages/app-builder-lib/src/targets/nsis/NsisTarget.ts-simstep-616cbbb4-dc8b-4538-a6c9-45caa1aeac6f": {
+ "path": "packages/app-builder-lib/src/targets/nsis/NsisTarget.ts-simstep-616cbbb4-dc8b-4538-a6c9-45caa1aeac6f",
+ "fileName": "NsisTarget.ts",
+ "wiki": "A specific target builder, such as `NsisTarget`, takes the staged application directory and creates the final distributable. For NSIS, this involves generating a `.nsi` script with all the necessary configurations (icons, licenses, shortcuts), compiling it with `makensis.exe`, signing the output installer, and optionally creating differential update info.",
+ "cellName": "Creating Distributable Package (NSIS Example) - NsisTarget.ts:L358-393",
+ "cellId": "992f3600-6b95-433c-b47f-8d8b849b3e16",
+ "visible": true,
+ "startLine": 358,
+ "endLine": 393,
+ "parentCellId": "2c78fa58-8fb6-4f94-a2a4-a2263e70cfcf",
+ "parentPath": "packages/app-builder-lib/src/targets/nsis/NsisTarget.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Build and package Electron apps into distributable formats for macOS, Windows, and Linux.",
+ "simStepId": "616cbbb4-dc8b-4538-a6c9-45caa1aeac6f"
+ }
+ ]
+ },
+ "2fbac7c8-0210-4aef-b507-907d1cd6e882": {
+ "path": "2fbac7c8-0210-4aef-b507-907d1cd6e882",
+ "cellName": "Handling Artifacts and Publishing - PublishManager.ts:L135-144",
+ "cellId": "2fbac7c8-0210-4aef-b507-907d1cd6e882",
+ "visible": true,
+ "parentCellId": "db1190c9-5034-43dc-810f-42f00aefb5d9"
+ },
+ "packages/app-builder-lib/src/publish/PublishManager.ts-simstep-44835141-b351-4eb4-a88f-06557b593f98": {
+ "path": "packages/app-builder-lib/src/publish/PublishManager.ts-simstep-44835141-b351-4eb4-a88f-06557b593f98",
+ "fileName": "PublishManager.ts",
+ "wiki": "The `PublishManager` listens for `artifactCreated` events. Upon receiving one, it checks the build configuration for publishing details. If configured, it schedules the artifact for upload to the specified provider (e.g., GitHub, S3). It also initiates the process of creating auto-update metadata files.",
+ "cellName": "Handling Artifacts and Publishing - PublishManager.ts:L135-144",
+ "cellId": "2fbac7c8-0210-4aef-b507-907d1cd6e882",
+ "visible": true,
+ "startLine": 135,
+ "endLine": 144,
+ "parentCellId": "db1190c9-5034-43dc-810f-42f00aefb5d9",
+ "parentPath": "packages/app-builder-lib/src/publish/PublishManager.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Build and package Electron apps into distributable formats for macOS, Windows, and Linux.",
+ "simStepId": "44835141-b351-4eb4-a88f-06557b593f98"
+ }
+ ]
+ },
+ "96eb9f2f-8b1b-4c41-99fa-867c620cd1a3": {
+ "path": "96eb9f2f-8b1b-4c41-99fa-867c620cd1a3",
+ "cellName": "Generating Auto-Update Metadata - updateInfoBuilder.ts:L91-129",
+ "cellId": "96eb9f2f-8b1b-4c41-99fa-867c620cd1a3",
+ "visible": true,
+ "parentCellId": "319ffa48-579d-4eaf-a2fd-ab726f6256f8"
+ },
+ "packages/app-builder-lib/src/publish/updateInfoBuilder.ts-simstep-5363a185-f79a-4ffb-aa2d-0310373ec057": {
+ "path": "packages/app-builder-lib/src/publish/updateInfoBuilder.ts-simstep-5363a185-f79a-4ffb-aa2d-0310373ec057",
+ "fileName": "updateInfoBuilder.ts",
+ "wiki": "The `createUpdateInfoTasks` function generates the data for auto-update files (e.g., `latest.yml`). It resolves the final publishing configuration, calculates file hashes (SHA-512), and assembles an `UpdateInfo` object that `electron-updater` can consume to check for new versions.",
+ "cellName": "Generating Auto-Update Metadata - updateInfoBuilder.ts:L91-129",
+ "cellId": "96eb9f2f-8b1b-4c41-99fa-867c620cd1a3",
+ "visible": true,
+ "startLine": 91,
+ "endLine": 129,
+ "parentCellId": "319ffa48-579d-4eaf-a2fd-ab726f6256f8",
+ "parentPath": "packages/app-builder-lib/src/publish/updateInfoBuilder.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Build and package Electron apps into distributable formats for macOS, Windows, and Linux.",
+ "simStepId": "5363a185-f79a-4ffb-aa2d-0310373ec057"
+ }
+ ]
+ },
+ "0e901318-3bc4-41a6-bfed-96b043833417": {
+ "path": "0e901318-3bc4-41a6-bfed-96b043833417",
+ "cellName": "Finalizing Build - PublishManager.ts:L248-255",
+ "cellId": "0e901318-3bc4-41a6-bfed-96b043833417",
+ "visible": true,
+ "parentCellId": "db1190c9-5034-43dc-810f-42f00aefb5d9"
+ },
+ "packages/app-builder-lib/src/publish/PublishManager.ts-simstep-56c1408f-4203-4d94-a7eb-0753aabca35f": {
+ "path": "packages/app-builder-lib/src/publish/PublishManager.ts-simstep-56c1408f-4203-4d94-a7eb-0753aabca35f",
+ "fileName": "PublishManager.ts",
+ "wiki": "The `PublishManager`'s `awaitTasks` method is called to conclude the process. It writes the generated update metadata files to the output directory and waits for all pending artifact upload tasks to complete successfully.",
+ "cellName": "Finalizing Build - PublishManager.ts:L248-255",
+ "cellId": "0e901318-3bc4-41a6-bfed-96b043833417",
+ "visible": true,
+ "startLine": 248,
+ "endLine": 255,
+ "parentCellId": "db1190c9-5034-43dc-810f-42f00aefb5d9",
+ "parentPath": "packages/app-builder-lib/src/publish/PublishManager.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Build and package Electron apps into distributable formats for macOS, Windows, and Linux.",
+ "simStepId": "56c1408f-4203-4d94-a7eb-0753aabca35f"
+ }
+ ]
+ },
+ "85d2b0a5-983c-406e-8c8a-d4a661aab363": {
+ "path": "85d2b0a5-983c-406e-8c8a-d4a661aab363",
+ "cellName": "Invoking Packager",
+ "cellId": "85d2b0a5-983c-406e-8c8a-d4a661aab363",
+ "visible": true,
+ "parentCellId": "d5418ff7-b1a6-479c-a52b-e5f2e91b13fa"
+ },
+ "generated-edge-simstep-702d6e11-c8aa-4e1e-af83-f2b235f3c4f8-85d2b0a5-983c-406e-8c8a-d4a661aab363": {
+ "path": "generated-edge-simstep-702d6e11-c8aa-4e1e-af83-f2b235f3c4f8-85d2b0a5-983c-406e-8c8a-d4a661aab363",
+ "fileName": "index.ts",
+ "cellName": "Invoking Packager",
+ "cellId": "85d2b0a5-983c-406e-8c8a-d4a661aab363",
+ "visible": true,
+ "startLine": 92,
+ "endLine": 92,
+ "parentPath": "packages/electron-builder/src/index.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Build and package Electron apps into distributable formats for macOS, Windows, and Linux.",
+ "simStepId": "702d6e11-c8aa-4e1e-af83-f2b235f3c4f8"
+ }
+ ]
+ },
+ "999dcb27-f18c-45e1-9222-cf828446818c": {
+ "path": "999dcb27-f18c-45e1-9222-cf828446818c",
+ "cellName": "Dispatching to\nPlatform Packager",
+ "cellId": "999dcb27-f18c-45e1-9222-cf828446818c",
+ "visible": true,
+ "parentCellId": "982b473a-6412-45cf-90f3-295e887d683e"
+ },
+ "generated-edge-simstep-a63d8e43-c4d4-424c-bb20-dde919b22a5c-999dcb27-f18c-45e1-9222-cf828446818c": {
+ "path": "generated-edge-simstep-a63d8e43-c4d4-424c-bb20-dde919b22a5c-999dcb27-f18c-45e1-9222-cf828446818c",
+ "fileName": "packager.ts",
+ "cellName": "Dispatching to Platform Packager",
+ "cellId": "999dcb27-f18c-45e1-9222-cf828446818c",
+ "visible": true,
+ "startLine": 503,
+ "endLine": 503,
+ "parentPath": "packages/app-builder-lib/src/packager.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Build and package Electron apps into distributable formats for macOS, Windows, and Linux.",
+ "simStepId": "a63d8e43-c4d4-424c-bb20-dde919b22a5c"
+ }
+ ]
+ },
+ "8d5a2659-6d65-4733-9e82-486a55b88da4": {
+ "path": "8d5a2659-6d65-4733-9e82-486a55b88da4",
+ "cellName": "Passing Staged\nApp to\nTarget Builders",
+ "cellId": "8d5a2659-6d65-4733-9e82-486a55b88da4",
+ "visible": true,
+ "parentCellId": "982b473a-6412-45cf-90f3-295e887d683e"
+ },
+ "generated-edge-simstep-14d6b2f2-9e48-462a-a88c-de3a0bbc3341-8d5a2659-6d65-4733-9e82-486a55b88da4": {
+ "path": "generated-edge-simstep-14d6b2f2-9e48-462a-a88c-de3a0bbc3341-8d5a2659-6d65-4733-9e82-486a55b88da4",
+ "fileName": "platformPackager.ts",
+ "cellName": "Passing Staged App to Target Builders",
+ "cellId": "8d5a2659-6d65-4733-9e82-486a55b88da4",
+ "visible": true,
+ "startLine": 342,
+ "endLine": 342,
+ "parentPath": "packages/app-builder-lib/src/platformPackager.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Build and package Electron apps into distributable formats for macOS, Windows, and Linux.",
+ "simStepId": "14d6b2f2-9e48-462a-a88c-de3a0bbc3341"
+ }
+ ]
+ },
+ "13048108-491b-4a4e-818e-3de71a5823b5": {
+ "path": "13048108-491b-4a4e-818e-3de71a5823b5",
+ "cellName": "Artifact Created\nEvent",
+ "cellId": "13048108-491b-4a4e-818e-3de71a5823b5",
+ "visible": true,
+ "parentCellId": "982b473a-6412-45cf-90f3-295e887d683e"
+ },
+ "generated-edge-simstep-b376a2a9-8f4f-4578-a752-59ad5fc8a6a7-13048108-491b-4a4e-818e-3de71a5823b5": {
+ "path": "generated-edge-simstep-b376a2a9-8f4f-4578-a752-59ad5fc8a6a7-13048108-491b-4a4e-818e-3de71a5823b5",
+ "fileName": "NsisTarget.ts",
+ "cellName": "Artifact Created Event",
+ "cellId": "13048108-491b-4a4e-818e-3de71a5823b5",
+ "visible": true,
+ "startLine": 377,
+ "endLine": 389,
+ "parentPath": "packages/app-builder-lib/src/targets/nsis/NsisTarget.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Build and package Electron apps into distributable formats for macOS, Windows, and Linux.",
+ "simStepId": "b376a2a9-8f4f-4578-a752-59ad5fc8a6a7"
+ }
+ ]
+ },
+ "c694f719-f97f-48f2-afb5-06c77fbe1961": {
+ "path": "c694f719-f97f-48f2-afb5-06c77fbe1961",
+ "cellName": "Requesting Update\nInfo Generation",
+ "cellId": "c694f719-f97f-48f2-afb5-06c77fbe1961",
+ "visible": true,
+ "parentCellId": "972e5a36-b69f-4b63-98d7-6fd32be116ef"
+ },
+ "generated-edge-simstep-40fa827b-4dcb-4b93-88d7-3050399d9434-c694f719-f97f-48f2-afb5-06c77fbe1961": {
+ "path": "generated-edge-simstep-40fa827b-4dcb-4b93-88d7-3050399d9434-c694f719-f97f-48f2-afb5-06c77fbe1961",
+ "fileName": "PublishManager.ts",
+ "cellName": "Requesting Update Info Generation",
+ "cellId": "c694f719-f97f-48f2-afb5-06c77fbe1961",
+ "visible": true,
+ "startLine": 219,
+ "endLine": 219,
+ "parentPath": "packages/app-builder-lib/src/publish/PublishManager.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Build and package Electron apps into distributable formats for macOS, Windows, and Linux.",
+ "simStepId": "40fa827b-4dcb-4b93-88d7-3050399d9434"
+ }
+ ]
+ },
+ "bc893a4e-3dff-49db-a75d-53e8dbe96686": {
+ "path": "bc893a4e-3dff-49db-a75d-53e8dbe96686",
+ "cellName": "Transmitting Update\nTasks",
+ "cellId": "bc893a4e-3dff-49db-a75d-53e8dbe96686",
+ "visible": true,
+ "parentCellId": "972e5a36-b69f-4b63-98d7-6fd32be116ef"
+ },
+ "generated-edge-simstep-01ec3ea7-6fee-4c31-9bfc-e6b32c3f414b-bc893a4e-3dff-49db-a75d-53e8dbe96686": {
+ "path": "generated-edge-simstep-01ec3ea7-6fee-4c31-9bfc-e6b32c3f414b-bc893a4e-3dff-49db-a75d-53e8dbe96686",
+ "fileName": "updateInfoBuilder.ts",
+ "cellName": "Transmitting Update Tasks",
+ "cellId": "bc893a4e-3dff-49db-a75d-53e8dbe96686",
+ "visible": true,
+ "startLine": 166,
+ "endLine": 166,
+ "parentPath": "packages/app-builder-lib/src/publish/updateInfoBuilder.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Build and package Electron apps into distributable formats for macOS, Windows, and Linux.",
+ "simStepId": "01ec3ea7-6fee-4c31-9bfc-e6b32c3f414b"
+ }
+ ]
+ },
+ "da0ff881-3cac-42f6-8426-951d2d89040a": {
+ "path": "da0ff881-3cac-42f6-8426-951d2d89040a",
+ "cellName": "test",
+ "cellId": "da0ff881-3cac-42f6-8426-951d2d89040a",
+ "visible": true
+ },
+ "0c82a2c5-631f-4077-ae7a-21089348d97a": {
+ "path": "0c82a2c5-631f-4077-ae7a-21089348d97a",
+ "cellName": "electron-updater",
+ "cellId": "0c82a2c5-631f-4077-ae7a-21089348d97a",
+ "visible": true,
+ "parentCellId": "d5418ff7-b1a6-479c-a52b-e5f2e91b13fa"
+ },
+ "d53b9401-2021-4574-85da-d7e82a75c18e": {
+ "path": "d53b9401-2021-4574-85da-d7e82a75c18e",
+ "cellName": "fixtures",
+ "cellId": "d53b9401-2021-4574-85da-d7e82a75c18e",
+ "visible": true,
+ "parentCellId": "da0ff881-3cac-42f6-8426-951d2d89040a"
+ },
+ "68aede06-2d8b-46a7-8cbe-78f2aed3541e": {
+ "path": "68aede06-2d8b-46a7-8cbe-78f2aed3541e",
+ "cellName": "src",
+ "cellId": "68aede06-2d8b-46a7-8cbe-78f2aed3541e",
+ "visible": true,
+ "parentCellId": "0c82a2c5-631f-4077-ae7a-21089348d97a"
+ },
+ "04753233-82d5-44e6-b3dd-e436ed2c723d": {
+ "path": "04753233-82d5-44e6-b3dd-e436ed2c723d",
+ "cellName": "test-app",
+ "cellId": "04753233-82d5-44e6-b3dd-e436ed2c723d",
+ "visible": true,
+ "parentCellId": "d53b9401-2021-4574-85da-d7e82a75c18e"
+ },
+ "2270c0f9-b1e3-4aeb-b8fd-8144ef5254ae": {
+ "path": "2270c0f9-b1e3-4aeb-b8fd-8144ef5254ae",
+ "cellName": "main.ts",
+ "cellId": "2270c0f9-b1e3-4aeb-b8fd-8144ef5254ae",
+ "visible": true,
+ "parentCellId": "68aede06-2d8b-46a7-8cbe-78f2aed3541e"
+ },
+ "ab16d105-df22-4acb-9ff7-d8abdcfb8d67": {
+ "path": "ab16d105-df22-4acb-9ff7-d8abdcfb8d67",
+ "cellName": "AppUpdater.ts",
+ "cellId": "ab16d105-df22-4acb-9ff7-d8abdcfb8d67",
+ "visible": true,
+ "parentCellId": "68aede06-2d8b-46a7-8cbe-78f2aed3541e"
+ },
+ "2201bf8e-5b0b-4ef4-bf2d-7f24f9671757": {
+ "path": "2201bf8e-5b0b-4ef4-bf2d-7f24f9671757",
+ "cellName": "providers",
+ "cellId": "2201bf8e-5b0b-4ef4-bf2d-7f24f9671757",
+ "visible": true,
+ "parentCellId": "68aede06-2d8b-46a7-8cbe-78f2aed3541e"
+ },
+ "2789fe8a-9b4c-4d4d-9474-7c74e9b3af29": {
+ "path": "2789fe8a-9b4c-4d4d-9474-7c74e9b3af29",
+ "cellName": "BaseUpdater.ts",
+ "cellId": "2789fe8a-9b4c-4d4d-9474-7c74e9b3af29",
+ "visible": true,
+ "parentCellId": "68aede06-2d8b-46a7-8cbe-78f2aed3541e"
+ },
+ "4a23c4b0-a29d-426d-8995-31646cdfbfa8": {
+ "path": "4a23c4b0-a29d-426d-8995-31646cdfbfa8",
+ "cellName": "app",
+ "cellId": "4a23c4b0-a29d-426d-8995-31646cdfbfa8",
+ "visible": true,
+ "parentCellId": "04753233-82d5-44e6-b3dd-e436ed2c723d"
+ },
+ "aa871f28-88c7-4981-90b5-fa12a3734be1": {
+ "path": "aa871f28-88c7-4981-90b5-fa12a3734be1",
+ "cellName": "GenericProvider.ts",
+ "cellId": "aa871f28-88c7-4981-90b5-fa12a3734be1",
+ "visible": true,
+ "parentCellId": "2201bf8e-5b0b-4ef4-bf2d-7f24f9671757"
+ },
+ "f528ac8c-81e8-4565-a2d3-c8a8bcf5a29d": {
+ "path": "f528ac8c-81e8-4565-a2d3-c8a8bcf5a29d",
+ "cellName": "index.js",
+ "cellId": "f528ac8c-81e8-4565-a2d3-c8a8bcf5a29d",
+ "visible": true,
+ "parentCellId": "4a23c4b0-a29d-426d-8995-31646cdfbfa8"
+ },
+ "1e9daf90-8f5b-44ec-a967-99c383ad32b9": {
+ "path": "1e9daf90-8f5b-44ec-a967-99c383ad32b9",
+ "cellName": "AutoUpdater Initialization - main.ts:L23-28",
+ "cellId": "1e9daf90-8f5b-44ec-a967-99c383ad32b9",
+ "visible": true,
+ "parentCellId": "2270c0f9-b1e3-4aeb-b8fd-8144ef5254ae"
+ },
+ "packages/electron-updater/src/main.ts-simstep-74d951fa-b26b-4419-9820-2610d732a2cb": {
+ "path": "packages/electron-updater/src/main.ts-simstep-74d951fa-b26b-4419-9820-2610d732a2cb",
+ "fileName": "main.ts",
+ "wiki": "When the application starts, it imports `electron-updater`. This automatically creates a platform-specific `AppUpdater` instance (e.g., `NsisUpdater` for Windows, `MacUpdater` for macOS) and assigns it to the `autoUpdater` export. This instance is pre-configured to handle updates for the specific platform.",
+ "cellName": "AutoUpdater Initialization - main.ts:L23-28",
+ "cellId": "1e9daf90-8f5b-44ec-a967-99c383ad32b9",
+ "visible": true,
+ "startLine": 23,
+ "endLine": 28,
+ "parentCellId": "2270c0f9-b1e3-4aeb-b8fd-8144ef5254ae",
+ "parentPath": "packages/electron-updater/src/main.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Provide out-of-the-box auto-update capabilities for applications.",
+ "simStepId": "74d951fa-b26b-4419-9820-2610d732a2cb"
+ }
+ ]
+ },
+ "bedcfb08-7d16-4775-a826-1f285fc5db15": {
+ "path": "bedcfb08-7d16-4775-a826-1f285fc5db15",
+ "cellName": "Process Update Check Request - AppUpdater.ts:L325-347",
+ "cellId": "bedcfb08-7d16-4775-a826-1f285fc5db15",
+ "visible": true,
+ "parentCellId": "ab16d105-df22-4acb-9ff7-d8abdcfb8d67"
+ },
+ "packages/electron-updater/src/AppUpdater.ts-simstep-3bfbefce-7c30-49ec-8639-e675734f7eac": {
+ "path": "packages/electron-updater/src/AppUpdater.ts-simstep-3bfbefce-7c30-49ec-8639-e675734f7eac",
+ "fileName": "AppUpdater.ts",
+ "wiki": "The `AppUpdater.checkForUpdates()` method is invoked. It ensures that only one update check is running at a time by using a promise lock (`checkForUpdatesPromise`). It emits a `checking-for-update` event and then calls the internal `doCheckForUpdates()` method to perform the actual check.",
+ "cellName": "Process Update Check Request - AppUpdater.ts:L325-347",
+ "cellId": "bedcfb08-7d16-4775-a826-1f285fc5db15",
+ "visible": true,
+ "startLine": 325,
+ "endLine": 347,
+ "parentCellId": "ab16d105-df22-4acb-9ff7-d8abdcfb8d67",
+ "parentPath": "packages/electron-updater/src/AppUpdater.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Provide out-of-the-box auto-update capabilities for applications.",
+ "simStepId": "3bfbefce-7c30-49ec-8639-e675734f7eac"
+ }
+ ]
+ },
+ "be339346-d3f5-4ff2-b5dd-dad0552de606": {
+ "path": "be339346-d3f5-4ff2-b5dd-dad0552de606",
+ "cellName": "Fetch and Parse Update Information - GenericProvider.ts:L25-46",
+ "cellId": "be339346-d3f5-4ff2-b5dd-dad0552de606",
+ "visible": true,
+ "parentCellId": "aa871f28-88c7-4981-90b5-fa12a3734be1"
+ },
+ "packages/electron-updater/src/providers/GenericProvider.ts-simstep-4f03a31a-697e-4611-b943-e0e59053a7eb": {
+ "path": "packages/electron-updater/src/providers/GenericProvider.ts-simstep-4f03a31a-697e-4611-b943-e0e59053a7eb",
+ "fileName": "GenericProvider.ts",
+ "wiki": "The provider receives the metadata file from the server, parses it (e.g., from YAML format), and constructs an `UpdateInfo` object containing details about the new version, release notes, and file information.",
+ "cellName": "Fetch and Parse Update Information - GenericProvider.ts:L25-46",
+ "cellId": "be339346-d3f5-4ff2-b5dd-dad0552de606",
+ "visible": true,
+ "startLine": 25,
+ "endLine": 46,
+ "parentCellId": "aa871f28-88c7-4981-90b5-fa12a3734be1",
+ "parentPath": "packages/electron-updater/src/providers/GenericProvider.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Provide out-of-the-box auto-update capabilities for applications.",
+ "simStepId": "4f03a31a-697e-4611-b943-e0e59053a7eb"
+ }
+ ]
+ },
+ "1ff908e3-215d-4c43-a3c1-c9860ae3e253": {
+ "path": "1ff908e3-215d-4c43-a3c1-c9860ae3e253",
+ "cellName": "Evaluate Update Availability and Start Download - AppUpdater.ts:L554-557",
+ "cellId": "1ff908e3-215d-4c43-a3c1-c9860ae3e253",
+ "visible": true,
+ "parentCellId": "ab16d105-df22-4acb-9ff7-d8abdcfb8d67"
+ },
+ "packages/electron-updater/src/AppUpdater.ts-simstep-8e15b5d0-9308-4f92-be9a-4589f787888b": {
+ "path": "packages/electron-updater/src/AppUpdater.ts-simstep-8e15b5d0-9308-4f92-be9a-4589f787888b",
+ "fileName": "AppUpdater.ts",
+ "wiki": "`AppUpdater` compares the version from `UpdateInfo` with the current application version. If a newer version is found, it emits an `update-available` event. If `autoDownload` is enabled (which it is by default), it immediately calls `executeDownload` to start downloading the update installer.",
+ "cellName": "Evaluate Update Availability and Start Download - AppUpdater.ts:L554-557",
+ "cellId": "1ff908e3-215d-4c43-a3c1-c9860ae3e253",
+ "visible": true,
+ "startLine": 554,
+ "endLine": 557,
+ "parentCellId": "ab16d105-df22-4acb-9ff7-d8abdcfb8d67",
+ "parentPath": "packages/electron-updater/src/AppUpdater.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Provide out-of-the-box auto-update capabilities for applications.",
+ "simStepId": "8e15b5d0-9308-4f92-be9a-4589f787888b"
+ }
+ ]
+ },
+ "41f8a620-78b8-496e-99c5-ff04e474a517": {
+ "path": "41f8a620-78b8-496e-99c5-ff04e474a517",
+ "cellName": "Finalize Download - AppUpdater.ts:L574",
+ "cellId": "41f8a620-78b8-496e-99c5-ff04e474a517",
+ "visible": true,
+ "parentCellId": "ab16d105-df22-4acb-9ff7-d8abdcfb8d67"
+ },
+ "packages/electron-updater/src/AppUpdater.ts-simstep-c6f3a286-6ef4-425f-b2c3-80f17caa8c3f": {
+ "path": "packages/electron-updater/src/AppUpdater.ts-simstep-c6f3a286-6ef4-425f-b2c3-80f17caa8c3f",
+ "fileName": "AppUpdater.ts",
+ "wiki": "Once the download is complete, the file is saved to a temporary cache directory. The `AppUpdater` then emits an `update-downloaded` event to notify the application that the update is ready for installation.",
+ "cellName": "Finalize Download - AppUpdater.ts:L574",
+ "cellId": "41f8a620-78b8-496e-99c5-ff04e474a517",
+ "visible": true,
+ "startLine": 574,
+ "endLine": 574,
+ "parentCellId": "ab16d105-df22-4acb-9ff7-d8abdcfb8d67",
+ "parentPath": "packages/electron-updater/src/AppUpdater.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Provide out-of-the-box auto-update capabilities for applications.",
+ "simStepId": "c6f3a286-6ef4-425f-b2c3-80f17caa8c3f"
+ }
+ ]
+ },
+ "9e535902-5e87-4b32-ab48-32386af3ff89": {
+ "path": "9e535902-5e87-4b32-ab48-32386af3ff89",
+ "cellName": "Execute Quit and Install - BaseUpdater.ts:L14-26",
+ "cellId": "9e535902-5e87-4b32-ab48-32386af3ff89",
+ "visible": true,
+ "parentCellId": "2789fe8a-9b4c-4d4d-9474-7c74e9b3af29"
+ },
+ "packages/electron-updater/src/BaseUpdater.ts-simstep-4dee9b52-2d29-4068-88a1-68df85d796be": {
+ "path": "packages/electron-updater/src/BaseUpdater.ts-simstep-4dee9b52-2d29-4068-88a1-68df85d796be",
+ "fileName": "BaseUpdater.ts",
+ "wiki": "The `quitAndInstall` method in `BaseUpdater` is called. It sets a flag (`quitAndInstallCalled`) to prevent duplicate calls and invokes the platform-specific `doInstall` method to run the downloaded installer.",
+ "cellName": "Execute Quit and Install - BaseUpdater.ts:L14-26",
+ "cellId": "9e535902-5e87-4b32-ab48-32386af3ff89",
+ "visible": true,
+ "startLine": 14,
+ "endLine": 26,
+ "parentCellId": "2789fe8a-9b4c-4d4d-9474-7c74e9b3af29",
+ "parentPath": "packages/electron-updater/src/BaseUpdater.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Provide out-of-the-box auto-update capabilities for applications.",
+ "simStepId": "4dee9b52-2d29-4068-88a1-68df85d796be"
+ }
+ ]
+ },
+ "9f0eb48a-f102-4db5-ae48-a891dcf4ee36": {
+ "path": "9f0eb48a-f102-4db5-ae48-a891dcf4ee36",
+ "cellName": "Quit Application - BaseUpdater.ts:L18-22",
+ "cellId": "9f0eb48a-f102-4db5-ae48-a891dcf4ee36",
+ "visible": true,
+ "parentCellId": "2789fe8a-9b4c-4d4d-9474-7c74e9b3af29"
+ },
+ "packages/electron-updater/src/BaseUpdater.ts-simstep-847a4db6-b5da-41a5-a612-95c61446ff2b": {
+ "path": "packages/electron-updater/src/BaseUpdater.ts-simstep-847a4db6-b5da-41a5-a612-95c61446ff2b",
+ "fileName": "BaseUpdater.ts",
+ "wiki": "After successfully launching the installer process, `quitAndInstall` emits a `before-quit-for-update` event and then immediately calls `app.quit()` to terminate the running application. This releases file locks and allows the installer to overwrite the application files.",
+ "cellName": "Quit Application - BaseUpdater.ts:L18-22",
+ "cellId": "9f0eb48a-f102-4db5-ae48-a891dcf4ee36",
+ "visible": true,
+ "startLine": 18,
+ "endLine": 22,
+ "parentCellId": "2789fe8a-9b4c-4d4d-9474-7c74e9b3af29",
+ "parentPath": "packages/electron-updater/src/BaseUpdater.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Provide out-of-the-box auto-update capabilities for applications.",
+ "simStepId": "847a4db6-b5da-41a5-a612-95c61446ff2b"
+ }
+ ]
+ },
+ "8f49e2dc-7c02-49ca-a46f-4a6aec595b5d": {
+ "path": "8f49e2dc-7c02-49ca-a46f-4a6aec595b5d",
+ "cellName": "API Call:\nInitiate Update\nCheck",
+ "cellId": "8f49e2dc-7c02-49ca-a46f-4a6aec595b5d",
+ "visible": true,
+ "parentCellId": "68aede06-2d8b-46a7-8cbe-78f2aed3541e"
+ },
+ "generated-edge-simstep-1e5474c6-6a14-4255-a3e8-70f28a8d19be-8f49e2dc-7c02-49ca-a46f-4a6aec595b5d": {
+ "path": "generated-edge-simstep-1e5474c6-6a14-4255-a3e8-70f28a8d19be-8f49e2dc-7c02-49ca-a46f-4a6aec595b5d",
+ "fileName": "main.ts",
+ "cellName": "API Call: Initiate Update Check",
+ "cellId": "8f49e2dc-7c02-49ca-a46f-4a6aec595b5d",
+ "visible": true,
+ "startLine": 69,
+ "endLine": 69,
+ "parentPath": "packages/electron-updater/src/main.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Provide out-of-the-box auto-update capabilities for applications.",
+ "simStepId": "1e5474c6-6a14-4255-a3e8-70f28a8d19be"
+ }
+ ]
+ },
+ "b982a95b-1e48-4fe5-b8b9-f12e797771ab": {
+ "path": "b982a95b-1e48-4fe5-b8b9-f12e797771ab",
+ "cellName": "Request Update\nMetadata from\nServer",
+ "cellId": "b982a95b-1e48-4fe5-b8b9-f12e797771ab",
+ "visible": true,
+ "parentCellId": "68aede06-2d8b-46a7-8cbe-78f2aed3541e"
+ },
+ "generated-edge-simstep-f4a0a232-dc79-4e63-849a-a148000736f8-b982a95b-1e48-4fe5-b8b9-f12e797771ab": {
+ "path": "generated-edge-simstep-f4a0a232-dc79-4e63-849a-a148000736f8-b982a95b-1e48-4fe5-b8b9-f12e797771ab",
+ "fileName": "AppUpdater.ts",
+ "cellName": "Request Update Metadata from Server",
+ "cellId": "b982a95b-1e48-4fe5-b8b9-f12e797771ab",
+ "visible": true,
+ "startLine": 29,
+ "endLine": 29,
+ "parentPath": "packages/electron-updater/src/AppUpdater.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Provide out-of-the-box auto-update capabilities for applications.",
+ "simStepId": "f4a0a232-dc79-4e63-849a-a148000736f8"
+ }
+ ]
+ },
+ "8745e811-9a81-40a8-b1e1-256959f3c8d3": {
+ "path": "8745e811-9a81-40a8-b1e1-256959f3c8d3",
+ "cellName": "Transmit Parsed\nUpdateInfo",
+ "cellId": "8745e811-9a81-40a8-b1e1-256959f3c8d3",
+ "visible": true,
+ "parentCellId": "68aede06-2d8b-46a7-8cbe-78f2aed3541e"
+ },
+ "generated-edge-simstep-8d9cec1b-f071-4a21-8252-e1c5fff37cdd-8745e811-9a81-40a8-b1e1-256959f3c8d3": {
+ "path": "generated-edge-simstep-8d9cec1b-f071-4a21-8252-e1c5fff37cdd-8745e811-9a81-40a8-b1e1-256959f3c8d3",
+ "fileName": "GenericProvider.ts",
+ "cellName": "Transmit Parsed UpdateInfo",
+ "cellId": "8745e811-9a81-40a8-b1e1-256959f3c8d3",
+ "visible": true,
+ "startLine": 29,
+ "endLine": 29,
+ "parentPath": "packages/electron-updater/src/providers/GenericProvider.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Provide out-of-the-box auto-update capabilities for applications.",
+ "simStepId": "8d9cec1b-f071-4a21-8252-e1c5fff37cdd"
+ }
+ ]
+ },
+ "b96d2ef2-d920-481e-b4e6-de4eafffd4a3": {
+ "path": "b96d2ef2-d920-481e-b4e6-de4eafffd4a3",
+ "cellName": "Download Update\nPackage",
+ "cellId": "b96d2ef2-d920-481e-b4e6-de4eafffd4a3",
+ "visible": true,
+ "parentCellId": "ab16d105-df22-4acb-9ff7-d8abdcfb8d67"
+ },
+ "generated-edge-simstep-5d104e19-4eab-4e46-a6ca-aebe26e32b81-b96d2ef2-d920-481e-b4e6-de4eafffd4a3": {
+ "path": "generated-edge-simstep-5d104e19-4eab-4e46-a6ca-aebe26e32b81-b96d2ef2-d920-481e-b4e6-de4eafffd4a3",
+ "fileName": "AppUpdater.ts",
+ "cellName": "Download Update Package",
+ "cellId": "b96d2ef2-d920-481e-b4e6-de4eafffd4a3",
+ "visible": true,
+ "startLine": 29,
+ "endLine": 43,
+ "parentPath": "packages/electron-updater/src/AppUpdater.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Provide out-of-the-box auto-update capabilities for applications.",
+ "simStepId": "5d104e19-4eab-4e46-a6ca-aebe26e32b81"
+ }
+ ]
+ },
+ "614a57c4-c79d-4c9b-be78-201da18766cd": {
+ "path": "614a57c4-c79d-4c9b-be78-201da18766cd",
+ "cellName": "API Call:\nQuit and\nInstall Update",
+ "cellId": "614a57c4-c79d-4c9b-be78-201da18766cd",
+ "visible": true,
+ "parentCellId": "68aede06-2d8b-46a7-8cbe-78f2aed3541e"
+ },
+ "generated-edge-simstep-e8350c5a-c7ff-49cf-ab97-7dfec2af63ef-614a57c4-c79d-4c9b-be78-201da18766cd": {
+ "path": "generated-edge-simstep-e8350c5a-c7ff-49cf-ab97-7dfec2af63ef-614a57c4-c79d-4c9b-be78-201da18766cd",
+ "fileName": "AppUpdater.ts",
+ "cellName": "API Call: Quit and Install Update",
+ "cellId": "614a57c4-c79d-4c9b-be78-201da18766cd",
+ "visible": true,
+ "startLine": 608,
+ "endLine": 623,
+ "parentPath": "packages/electron-updater/src/AppUpdater.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Provide out-of-the-box auto-update capabilities for applications.",
+ "simStepId": "e8350c5a-c7ff-49cf-ab97-7dfec2af63ef"
+ }
+ ]
+ },
+ "bf619bd7-f6c0-4d44-8f95-908c4bf499d5": {
+ "path": "bf619bd7-f6c0-4d44-8f95-908c4bf499d5",
+ "cellName": "Launch Installer\nProcess",
+ "cellId": "bf619bd7-f6c0-4d44-8f95-908c4bf499d5",
+ "visible": true,
+ "parentCellId": "2789fe8a-9b4c-4d4d-9474-7c74e9b3af29"
+ },
+ "generated-edge-simstep-3bf78573-19d3-458e-a3a1-ab1beb3cb2a4-bf619bd7-f6c0-4d44-8f95-908c4bf499d5": {
+ "path": "generated-edge-simstep-3bf78573-19d3-458e-a3a1-ab1beb3cb2a4-bf619bd7-f6c0-4d44-8f95-908c4bf499d5",
+ "fileName": "BaseUpdater.ts",
+ "cellName": "Launch Installer Process",
+ "cellId": "bf619bd7-f6c0-4d44-8f95-908c4bf499d5",
+ "visible": true,
+ "startLine": 67,
+ "endLine": 71,
+ "parentPath": "packages/electron-updater/src/BaseUpdater.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Provide out-of-the-box auto-update capabilities for applications.",
+ "simStepId": "3bf78573-19d3-458e-a3a1-ab1beb3cb2a4"
+ }
+ ]
+ },
+ "f34fce8c-b0c7-4006-9404-2e1bdcd755c1": {
+ "path": "f34fce8c-b0c7-4006-9404-2e1bdcd755c1",
+ "cellName": "electron-publish",
+ "cellId": "f34fce8c-b0c7-4006-9404-2e1bdcd755c1",
+ "visible": true,
+ "parentCellId": "d5418ff7-b1a6-479c-a52b-e5f2e91b13fa"
+ },
+ "3b244d04-ba40-4ad0-9a7c-33eccbbe17cd": {
+ "path": "3b244d04-ba40-4ad0-9a7c-33eccbbe17cd",
+ "cellName": "src",
+ "cellId": "3b244d04-ba40-4ad0-9a7c-33eccbbe17cd",
+ "visible": true,
+ "parentCellId": "f34fce8c-b0c7-4006-9404-2e1bdcd755c1"
+ },
+ "1e80829f-3c8a-4ef7-a966-0adf84de2fee": {
+ "path": "1e80829f-3c8a-4ef7-a966-0adf84de2fee",
+ "cellName": "index.ts",
+ "cellId": "1e80829f-3c8a-4ef7-a966-0adf84de2fee",
+ "visible": true,
+ "parentCellId": "982b473a-6412-45cf-90f3-295e887d683e"
+ },
+ "6f9d1a1d-f477-41b4-97c2-696bf1f2df0f": {
+ "path": "6f9d1a1d-f477-41b4-97c2-696bf1f2df0f",
+ "cellName": "gitHubPublisher.ts",
+ "cellId": "6f9d1a1d-f477-41b4-97c2-696bf1f2df0f",
+ "visible": true,
+ "parentCellId": "3b244d04-ba40-4ad0-9a7c-33eccbbe17cd"
+ },
+ "1adfa7ab-c1c6-4a12-ad2b-231bdeb9132b": {
+ "path": "1adfa7ab-c1c6-4a12-ad2b-231bdeb9132b",
+ "cellName": "Initiate Build and Publishing Process - index.ts:L80-84",
+ "cellId": "1adfa7ab-c1c6-4a12-ad2b-231bdeb9132b",
+ "visible": true,
+ "parentCellId": "1e80829f-3c8a-4ef7-a966-0adf84de2fee"
+ },
+ "packages/app-builder-lib/src/index.ts-simstep-f35d4a9e-ffec-4d0b-b35f-90850fbb9130": {
+ "path": "packages/app-builder-lib/src/index.ts-simstep-f35d4a9e-ffec-4d0b-b35f-90850fbb9130",
+ "fileName": "index.ts",
+ "wiki": "The overall process starts when the `build` function is called. It creates a `Packager` instance to handle the creation of application artifacts and then instantiates a `PublishManager` to manage the publishing of those artifacts to configured providers. The `PublishManager` also registers listeners for events emitted by the packager, such as when an artifact is created.",
+ "cellName": "Initiate Build and Publishing Process - index.ts:L80-84",
+ "cellId": "1adfa7ab-c1c6-4a12-ad2b-231bdeb9132b",
+ "visible": true,
+ "startLine": 80,
+ "endLine": 84,
+ "parentCellId": "1e80829f-3c8a-4ef7-a966-0adf84de2fee",
+ "parentPath": "packages/app-builder-lib/src/index.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Automate publishing of application installers and updates to various release channels.",
+ "simStepId": "f35d4a9e-ffec-4d0b-b35f-90850fbb9130"
+ }
+ ]
+ },
+ "187c76f4-215b-4c46-a48d-66a046a23316": {
+ "path": "187c76f4-215b-4c46-a48d-66a046a23316",
+ "cellName": "Schedule Artifact Upload - PublishManager.ts:L138-146",
+ "cellId": "187c76f4-215b-4c46-a48d-66a046a23316",
+ "visible": true,
+ "parentCellId": "db1190c9-5034-43dc-810f-42f00aefb5d9"
+ },
+ "packages/app-builder-lib/src/publish/PublishManager.ts-simstep-419f3e16-41c0-45a1-aa50-0767e8f54fea": {
+ "path": "packages/app-builder-lib/src/publish/PublishManager.ts-simstep-419f3e16-41c0-45a1-aa50-0767e8f54fea",
+ "fileName": "PublishManager.ts",
+ "wiki": "The `PublishManager`'s listener for the `artifactCreated` event is triggered. It processes the event data, retrieves the relevant publishing configuration, and then calls its own `scheduleUpload` method to add the artifact to an asynchronous upload queue.",
+ "cellName": "Schedule Artifact Upload - PublishManager.ts:L138-146",
+ "cellId": "187c76f4-215b-4c46-a48d-66a046a23316",
+ "visible": true,
+ "startLine": 138,
+ "endLine": 146,
+ "parentCellId": "db1190c9-5034-43dc-810f-42f00aefb5d9",
+ "parentPath": "packages/app-builder-lib/src/publish/PublishManager.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Automate publishing of application installers and updates to various release channels.",
+ "simStepId": "419f3e16-41c0-45a1-aa50-0767e8f54fea"
+ }
+ ]
+ },
+ "f9d28546-2567-4a0b-86ea-2dd7f40c5b39": {
+ "path": "f9d28546-2567-4a0b-86ea-2dd7f40c5b39",
+ "cellName": "Create Provider-Specific Publisher - PublishManager.ts:L314-322",
+ "cellId": "f9d28546-2567-4a0b-86ea-2dd7f40c5b39",
+ "visible": true,
+ "parentCellId": "db1190c9-5034-43dc-810f-42f00aefb5d9"
+ },
+ "packages/app-builder-lib/src/publish/PublishManager.ts-simstep-4ddcfbb7-69d1-45b5-8011-d82c032acae3": {
+ "path": "packages/app-builder-lib/src/publish/PublishManager.ts-simstep-4ddcfbb7-69d1-45b5-8011-d82c032acae3",
+ "fileName": "PublishManager.ts",
+ "wiki": "The `scheduleUpload` method determines the publishing provider (e.g., 'github') from the configuration. It then uses a factory function, `createPublisher`, to instantiate a provider-specific publisher class, such as `GitHubPublisher`, which contains the logic to communicate with that provider's API.",
+ "cellName": "Create Provider-Specific Publisher - PublishManager.ts:L314-322",
+ "cellId": "f9d28546-2567-4a0b-86ea-2dd7f40c5b39",
+ "visible": true,
+ "startLine": 314,
+ "endLine": 322,
+ "parentCellId": "db1190c9-5034-43dc-810f-42f00aefb5d9",
+ "parentPath": "packages/app-builder-lib/src/publish/PublishManager.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Automate publishing of application installers and updates to various release channels.",
+ "simStepId": "4ddcfbb7-69d1-45b5-8011-d82c032acae3"
+ }
+ ]
+ },
+ "5aa288ec-1d85-4b29-bdf6-4b84a550b798": {
+ "path": "5aa288ec-1d85-4b29-bdf6-4b84a550b798",
+ "cellName": "Upload Artifact to GitHub Release - gitHubPublisher.ts:L28-29",
+ "cellId": "5aa288ec-1d85-4b29-bdf6-4b84a550b798",
+ "visible": true,
+ "parentCellId": "6f9d1a1d-f477-41b4-97c2-696bf1f2df0f"
+ },
+ "packages/electron-publish/src/gitHubPublisher.ts-simstep-a6549131-20b8-4199-aaba-db87a8583448": {
+ "path": "packages/electron-publish/src/gitHubPublisher.ts-simstep-a6549131-20b8-4199-aaba-db87a8583448",
+ "fileName": "gitHubPublisher.ts",
+ "wiki": "The `GitHubPublisher`'s `upload` method is executed. It first ensures a GitHub Release exists for the current version tag (creating a new draft or pre-release if necessary). Then, it uses the GitHub API to upload the specified artifact file to that release as an asset.",
+ "cellName": "Upload Artifact to GitHub Release - gitHubPublisher.ts:L28-29",
+ "cellId": "5aa288ec-1d85-4b29-bdf6-4b84a550b798",
+ "visible": true,
+ "startLine": 28,
+ "endLine": 29,
+ "parentCellId": "6f9d1a1d-f477-41b4-97c2-696bf1f2df0f",
+ "parentPath": "packages/electron-publish/src/gitHubPublisher.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Automate publishing of application installers and updates to various release channels.",
+ "simStepId": "a6549131-20b8-4199-aaba-db87a8583448"
+ }
+ ]
+ },
+ "60f61b0c-a485-4cfa-99e8-cd72712caf67": {
+ "path": "60f61b0c-a485-4cfa-99e8-cd72712caf67",
+ "cellName": "Publishing Complete - index.ts:L125-136",
+ "cellId": "60f61b0c-a485-4cfa-99e8-cd72712caf67",
+ "visible": true,
+ "parentCellId": "1e80829f-3c8a-4ef7-a966-0adf84de2fee"
+ },
+ "packages/app-builder-lib/src/index.ts-simstep-5c7b9901-1af2-4f22-8d08-5cf415c1174b": {
+ "path": "packages/app-builder-lib/src/index.ts-simstep-5c7b9901-1af2-4f22-8d08-5cf415c1174b",
+ "fileName": "index.ts",
+ "wiki": "Once `publishManager.awaitTasks()` resolves, it signifies that all artifacts have been successfully uploaded to their respective providers. The `build` function performs final cleanup and returns a promise that resolves with an array of file paths to the locally generated artifacts.",
+ "cellName": "Publishing Complete - index.ts:L125-136",
+ "cellId": "60f61b0c-a485-4cfa-99e8-cd72712caf67",
+ "visible": true,
+ "startLine": 125,
+ "endLine": 136,
+ "parentCellId": "1e80829f-3c8a-4ef7-a966-0adf84de2fee",
+ "parentPath": "packages/app-builder-lib/src/index.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Automate publishing of application installers and updates to various release channels.",
+ "simStepId": "5c7b9901-1af2-4f22-8d08-5cf415c1174b"
+ }
+ ]
+ },
+ "69b16248-e13f-4d05-b7bf-7cd94ff00fbf": {
+ "path": "69b16248-e13f-4d05-b7bf-7cd94ff00fbf",
+ "cellName": "Artifact Creation\nEvent",
+ "cellId": "69b16248-e13f-4d05-b7bf-7cd94ff00fbf",
+ "visible": true,
+ "parentCellId": "982b473a-6412-45cf-90f3-295e887d683e"
+ },
+ "generated-edge-simstep-f1baa282-c373-4951-b822-b12cc4592654-69b16248-e13f-4d05-b7bf-7cd94ff00fbf": {
+ "path": "generated-edge-simstep-f1baa282-c373-4951-b822-b12cc4592654-69b16248-e13f-4d05-b7bf-7cd94ff00fbf",
+ "fileName": "index.ts",
+ "cellName": "Artifact Creation Event",
+ "cellId": "69b16248-e13f-4d05-b7bf-7cd94ff00fbf",
+ "visible": true,
+ "startLine": 138,
+ "endLine": 146,
+ "parentPath": "packages/app-builder-lib/src/index.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Automate publishing of application installers and updates to various release channels.",
+ "simStepId": "f1baa282-c373-4951-b822-b12cc4592654"
+ }
+ ]
+ },
+ "0e8da646-3b25-4881-a8f2-b419d23286c4": {
+ "path": "0e8da646-3b25-4881-a8f2-b419d23286c4",
+ "cellName": "Passing Upload\nDetails to\nScheduler",
+ "cellId": "0e8da646-3b25-4881-a8f2-b419d23286c4",
+ "visible": true,
+ "parentCellId": "db1190c9-5034-43dc-810f-42f00aefb5d9"
+ },
+ "generated-edge-simstep-c2603129-b4ab-4ce8-9198-8e72e3e6fa3a-0e8da646-3b25-4881-a8f2-b419d23286c4": {
+ "path": "generated-edge-simstep-c2603129-b4ab-4ce8-9198-8e72e3e6fa3a-0e8da646-3b25-4881-a8f2-b419d23286c4",
+ "fileName": "PublishManager.ts",
+ "cellName": "Passing Upload Details to Scheduler",
+ "cellId": "0e8da646-3b25-4881-a8f2-b419d23286c4",
+ "visible": true,
+ "startLine": 154,
+ "endLine": 154,
+ "parentPath": "packages/app-builder-lib/src/publish/PublishManager.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Automate publishing of application installers and updates to various release channels.",
+ "simStepId": "c2603129-b4ab-4ce8-9198-8e72e3e6fa3a"
+ }
+ ]
+ },
+ "397cfc71-aa3e-4b21-a55e-e1ff6f0ff54c": {
+ "path": "397cfc71-aa3e-4b21-a55e-e1ff6f0ff54c",
+ "cellName": "Submitting Upload\nTask to\nPublisher",
+ "cellId": "397cfc71-aa3e-4b21-a55e-e1ff6f0ff54c",
+ "visible": true,
+ "parentCellId": "d5418ff7-b1a6-479c-a52b-e5f2e91b13fa"
+ },
+ "generated-edge-simstep-5035ffb6-ea57-4421-891f-e67b6b62c678-397cfc71-aa3e-4b21-a55e-e1ff6f0ff54c": {
+ "path": "generated-edge-simstep-5035ffb6-ea57-4421-891f-e67b6b62c678-397cfc71-aa3e-4b21-a55e-e1ff6f0ff54c",
+ "fileName": "PublishManager.ts",
+ "cellName": "Submitting Upload Task to Publisher",
+ "cellId": "397cfc71-aa3e-4b21-a55e-e1ff6f0ff54c",
+ "visible": true,
+ "startLine": 154,
+ "endLine": 160,
+ "parentPath": "packages/app-builder-lib/src/publish/PublishManager.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Automate publishing of application installers and updates to various release channels.",
+ "simStepId": "5035ffb6-ea57-4421-891f-e67b6b62c678"
+ }
+ ]
+ },
+ "435362ea-1737-4682-ab3a-73135c41418c": {
+ "path": "435362ea-1737-4682-ab3a-73135c41418c",
+ "cellName": "Awaiting All\nPending Uploads",
+ "cellId": "435362ea-1737-4682-ab3a-73135c41418c",
+ "visible": true,
+ "parentCellId": "d5418ff7-b1a6-479c-a52b-e5f2e91b13fa"
+ },
+ "generated-edge-simstep-e133fa6a-f9d9-4ec0-9669-f3fb5acdf20a-435362ea-1737-4682-ab3a-73135c41418c": {
+ "path": "generated-edge-simstep-e133fa6a-f9d9-4ec0-9669-f3fb5acdf20a-435362ea-1737-4682-ab3a-73135c41418c",
+ "fileName": "gitHubPublisher.ts",
+ "cellName": "Awaiting All Pending Uploads",
+ "cellId": "435362ea-1737-4682-ab3a-73135c41418c",
+ "visible": true,
+ "startLine": 132,
+ "endLine": 132,
+ "parentPath": "packages/electron-publish/src/gitHubPublisher.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Automate publishing of application installers and updates to various release channels.",
+ "simStepId": "e133fa6a-f9d9-4ec0-9669-f3fb5acdf20a"
+ }
+ ]
+ },
+ "04404c1a-e259-4e18-948a-2852349ec863": {
+ "path": "04404c1a-e259-4e18-948a-2852349ec863",
+ "cellName": "winPackager.ts",
+ "cellId": "04404c1a-e259-4e18-948a-2852349ec863",
+ "visible": true,
+ "parentCellId": "982b473a-6412-45cf-90f3-295e887d683e"
+ },
+ "ed5543b9-a205-40b0-8857-c0f6bf3a7c49": {
+ "path": "ed5543b9-a205-40b0-8857-c0f6bf3a7c49",
+ "cellName": "codeSign",
+ "cellId": "ed5543b9-a205-40b0-8857-c0f6bf3a7c49",
+ "visible": true,
+ "parentCellId": "982b473a-6412-45cf-90f3-295e887d683e"
+ },
+ "340d83a2-b574-4e1d-a7a9-c0738bd3d5c1": {
+ "path": "340d83a2-b574-4e1d-a7a9-c0738bd3d5c1",
+ "cellName": "macPackager.ts",
+ "cellId": "340d83a2-b574-4e1d-a7a9-c0738bd3d5c1",
+ "visible": true,
+ "parentCellId": "982b473a-6412-45cf-90f3-295e887d683e"
+ },
+ "b597f07c-989b-4cd3-a032-b7a5c39ec61c": {
+ "path": "b597f07c-989b-4cd3-a032-b7a5c39ec61c",
+ "cellName": "windowsCodeSign.ts",
+ "cellId": "b597f07c-989b-4cd3-a032-b7a5c39ec61c",
+ "visible": true,
+ "parentCellId": "ed5543b9-a205-40b0-8857-c0f6bf3a7c49"
+ },
+ "8a0576a3-34ee-433b-adfd-ace42b748af9": {
+ "path": "8a0576a3-34ee-433b-adfd-ace42b748af9",
+ "cellName": "windowsSignToolManager.ts",
+ "cellId": "8a0576a3-34ee-433b-adfd-ace42b748af9",
+ "visible": true,
+ "parentCellId": "ed5543b9-a205-40b0-8857-c0f6bf3a7c49"
+ },
+ "f076f1cf-81bf-4684-9870-98ebaeb8e876": {
+ "path": "f076f1cf-81bf-4684-9870-98ebaeb8e876",
+ "cellName": "macCodeSign.ts",
+ "cellId": "f076f1cf-81bf-4684-9870-98ebaeb8e876",
+ "visible": true,
+ "parentCellId": "ed5543b9-a205-40b0-8857-c0f6bf3a7c49"
+ },
+ "3b08ebb3-0526-4973-84fe-4ce072a15b9d": {
+ "path": "3b08ebb3-0526-4973-84fe-4ce072a15b9d",
+ "cellName": "Windows Flow: Initiate Application Signing - winPackager.ts:L244-263",
+ "cellId": "3b08ebb3-0526-4973-84fe-4ce072a15b9d",
+ "visible": true,
+ "parentCellId": "04404c1a-e259-4e18-948a-2852349ec863"
+ },
+ "packages/app-builder-lib/src/winPackager.ts-simstep-4288fc8b-b291-4fa5-9bc2-1dee9507e0be": {
+ "path": "packages/app-builder-lib/src/winPackager.ts-simstep-4288fc8b-b291-4fa5-9bc2-1dee9507e0be",
+ "fileName": "winPackager.ts",
+ "wiki": "The Windows packaging process triggers the `signApp` method to sign all relevant executables within the packaged application directory. This method iterates through files like .exe and .dll and determines if they need signing.",
+ "cellName": "Windows Flow: Initiate Application Signing - winPackager.ts:L244-263",
+ "cellId": "3b08ebb3-0526-4973-84fe-4ce072a15b9d",
+ "visible": true,
+ "startLine": 244,
+ "endLine": 263,
+ "parentCellId": "04404c1a-e259-4e18-948a-2852349ec863",
+ "parentPath": "packages/app-builder-lib/src/winPackager.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Automate code signing for macOS and Windows applications.",
+ "simStepId": "4288fc8b-b291-4fa5-9bc2-1dee9507e0be"
+ }
+ ]
+ },
+ "1b4b5157-2e39-4f8a-9cbd-ed1dc0214043": {
+ "path": "1b4b5157-2e39-4f8a-9cbd-ed1dc0214043",
+ "cellName": "Windows Flow: Prepare Signing Options - winPackager.ts:L125-132",
+ "cellId": "1b4b5157-2e39-4f8a-9cbd-ed1dc0214043",
+ "visible": true,
+ "parentCellId": "04404c1a-e259-4e18-948a-2852349ec863"
+ },
+ "packages/app-builder-lib/src/winPackager.ts-simstep-2d08d950-792c-4739-bc87-37a2a96b867f": {
+ "path": "packages/app-builder-lib/src/winPackager.ts-simstep-2d08d950-792c-4739-bc87-37a2a96b867f",
+ "fileName": "winPackager.ts",
+ "wiki": "For each file, the `sign` method in `WinPackager` constructs a `WindowsSignOptions` object. This object bundles the file path and all relevant signing configurations from the user's `electron-builder.json` or `package.json`.",
+ "cellName": "Windows Flow: Prepare Signing Options - winPackager.ts:L125-132",
+ "cellId": "1b4b5157-2e39-4f8a-9cbd-ed1dc0214043",
+ "visible": true,
+ "startLine": 125,
+ "endLine": 132,
+ "parentCellId": "04404c1a-e259-4e18-948a-2852349ec863",
+ "parentPath": "packages/app-builder-lib/src/winPackager.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Automate code signing for macOS and Windows applications.",
+ "simStepId": "2d08d950-792c-4739-bc87-37a2a96b867f"
+ }
+ ]
+ },
+ "74b87e43-0809-4711-963c-6cbd695cb4e7": {
+ "path": "74b87e43-0809-4711-963c-6cbd695cb4e7",
+ "cellName": "Windows Flow: Select Signing Manager (signtool vs Azure) - winPackager.ts:L34-40",
+ "cellId": "74b87e43-0809-4711-963c-6cbd695cb4e7",
+ "visible": true,
+ "parentCellId": "04404c1a-e259-4e18-948a-2852349ec863"
+ },
+ "packages/app-builder-lib/src/winPackager.ts-simstep-b146ef73-cea7-4625-9ae9-535b6ae48653": {
+ "path": "packages/app-builder-lib/src/winPackager.ts-simstep-b146ef73-cea7-4625-9ae9-535b6ae48653",
+ "fileName": "winPackager.ts",
+ "wiki": "The `signWindows` function retrieves the appropriate signing manager from the packager. The packager's `signingManager` property lazily initializes either a `WindowsSignToolManager` (for traditional certificates) or a `WindowsSignAzureManager` based on the user's configuration (`signtoolOptions` vs `azureSignOptions`).",
+ "cellName": "Windows Flow: Select Signing Manager (signtool vs Azure) - winPackager.ts:L34-40",
+ "cellId": "74b87e43-0809-4711-963c-6cbd695cb4e7",
+ "visible": true,
+ "startLine": 34,
+ "endLine": 40,
+ "parentCellId": "04404c1a-e259-4e18-948a-2852349ec863",
+ "parentPath": "packages/app-builder-lib/src/winPackager.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Automate code signing for macOS and Windows applications.",
+ "simStepId": "b146ef73-cea7-4625-9ae9-535b6ae48653"
+ }
+ ]
+ },
+ "2ff70e5a-9fe9-4d5e-b386-5a13af933d5a": {
+ "path": "2ff70e5a-9fe9-4d5e-b386-5a13af933d5a",
+ "cellName": "Windows Flow: Prepare Signing Command - windowsSignToolManager.ts:L180-227",
+ "cellId": "2ff70e5a-9fe9-4d5e-b386-5a13af933d5a",
+ "visible": true,
+ "parentCellId": "8a0576a3-34ee-433b-adfd-ace42b748af9"
+ },
+ "packages/app-builder-lib/src/codeSign/windowsSignToolManager.ts-simstep-b6edc4d8-77cf-4961-a541-1fcdd7d0347a": {
+ "path": "packages/app-builder-lib/src/codeSign/windowsSignToolManager.ts-simstep-b6edc4d8-77cf-4961-a541-1fcdd7d0347a",
+ "fileName": "windowsSignToolManager.ts",
+ "wiki": "The `WindowsSignToolManager`'s `signFile` method is called. It resolves certificate information via the `cscInfo` property and checks for custom signing hooks. If no custom hook is found, it calls the `doSign` method to execute the standard signing process.",
+ "cellName": "Windows Flow: Prepare Signing Command - windowsSignToolManager.ts:L180-227",
+ "cellId": "2ff70e5a-9fe9-4d5e-b386-5a13af933d5a",
+ "visible": true,
+ "startLine": 180,
+ "endLine": 227,
+ "parentCellId": "8a0576a3-34ee-433b-adfd-ace42b748af9",
+ "parentPath": "packages/app-builder-lib/src/codeSign/windowsSignToolManager.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Automate code signing for macOS and Windows applications.",
+ "simStepId": "b6edc4d8-77cf-4961-a541-1fcdd7d0347a"
+ }
+ ]
+ },
+ "0ccca601-22f1-4b53-9e3e-531e5754fc2b": {
+ "path": "0ccca601-22f1-4b53-9e3e-531e5754fc2b",
+ "cellName": "Windows Flow: Execute Signing Tool - windowsSignToolManager.ts:L428-466",
+ "cellId": "0ccca601-22f1-4b53-9e3e-531e5754fc2b",
+ "visible": true,
+ "parentCellId": "8a0576a3-34ee-433b-adfd-ace42b748af9"
+ },
+ "packages/app-builder-lib/src/codeSign/windowsSignToolManager.ts-simstep-18bd8074-291c-4596-8cf2-3bf6c02c9e9f": {
+ "path": "packages/app-builder-lib/src/codeSign/windowsSignToolManager.ts-simstep-18bd8074-291c-4596-8cf2-3bf6c02c9e9f",
+ "fileName": "windowsSignToolManager.ts",
+ "wiki": "The `doSign` method constructs the final command-line arguments for the signing utility (`signtool.exe` on Windows or `osslsigncode` on other platforms). It includes hash algorithms, timestamp server URLs, and certificate details before executing the command to cryptographically sign the executable file.",
+ "cellName": "Windows Flow: Execute Signing Tool - windowsSignToolManager.ts:L428-466",
+ "cellId": "0ccca601-22f1-4b53-9e3e-531e5754fc2b",
+ "visible": true,
+ "startLine": 428,
+ "endLine": 466,
+ "parentCellId": "8a0576a3-34ee-433b-adfd-ace42b748af9",
+ "parentPath": "packages/app-builder-lib/src/codeSign/windowsSignToolManager.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Automate code signing for macOS and Windows applications.",
+ "simStepId": "18bd8074-291c-4596-8cf2-3bf6c02c9e9f"
+ }
+ ]
+ },
+ "22874821-7199-449c-b0a7-3556d0b42732": {
+ "path": "22874821-7199-449c-b0a7-3556d0b42732",
+ "cellName": "macOS Flow: Initiate Application Signing - macPackager.ts:L241-274",
+ "cellId": "22874821-7199-449c-b0a7-3556d0b42732",
+ "visible": true,
+ "parentCellId": "340d83a2-b574-4e1d-a7a9-c0738bd3d5c1"
+ },
+ "packages/app-builder-lib/src/macPackager.ts-simstep-50d2bb50-cee4-401b-b8a7-7fbd146bb349": {
+ "path": "packages/app-builder-lib/src/macPackager.ts-simstep-50d2bb50-cee4-401b-b8a7-7fbd146bb349",
+ "fileName": "macPackager.ts",
+ "wiki": "The macOS packaging process calls the `sign` method on the `MacPackager` instance. This method is the main entry point for the entire code signing flow for the `.app` bundle, starting by checking if signing is permitted and gathering necessary credentials.",
+ "cellName": "macOS Flow: Initiate Application Signing - macPackager.ts:L241-274",
+ "cellId": "22874821-7199-449c-b0a7-3556d0b42732",
+ "visible": true,
+ "startLine": 241,
+ "endLine": 274,
+ "parentCellId": "340d83a2-b574-4e1d-a7a9-c0738bd3d5c1",
+ "parentPath": "packages/app-builder-lib/src/macPackager.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Automate code signing for macOS and Windows applications.",
+ "simStepId": "50d2bb50-cee4-401b-b8a7-7fbd146bb349"
+ }
+ ]
+ },
+ "c7b24ba6-d237-4472-a014-65d332ded496": {
+ "path": "c7b24ba6-d237-4472-a014-65d332ded496",
+ "cellName": "macOS Flow: Find Certificate in Keychain - macCodeSign.ts:L133-159",
+ "cellId": "c7b24ba6-d237-4472-a014-65d332ded496",
+ "visible": true,
+ "parentCellId": "f076f1cf-81bf-4684-9870-98ebaeb8e876"
+ },
+ "packages/app-builder-lib/src/codeSign/macCodeSign.ts-simstep-23327905-d34a-4a79-9d63-8922931f6c79": {
+ "path": "packages/app-builder-lib/src/codeSign/macCodeSign.ts-simstep-23327905-d34a-4a79-9d63-8922931f6c79",
+ "fileName": "macCodeSign.ts",
+ "wiki": "The `findIdentity` utility searches the specified keychain for a valid code signing certificate. It looks for specific certificate types (e.g., \"Developer ID Application\") that match the provided name or qualifier.",
+ "cellName": "macOS Flow: Find Certificate in Keychain - macCodeSign.ts:L133-159",
+ "cellId": "c7b24ba6-d237-4472-a014-65d332ded496",
+ "visible": true,
+ "startLine": 133,
+ "endLine": 159,
+ "parentCellId": "f076f1cf-81bf-4684-9870-98ebaeb8e876",
+ "parentPath": "packages/app-builder-lib/src/codeSign/macCodeSign.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Automate code signing for macOS and Windows applications.",
+ "simStepId": "23327905-d34a-4a79-9d63-8922931f6c79"
+ }
+ ]
+ },
+ "28c71da0-5e31-4d8d-b009-41257cc99b0a": {
+ "path": "28c71da0-5e31-4d8d-b009-41257cc99b0a",
+ "cellName": "macOS Flow: Prepare Signing Options - macPackager.ts:L327-380",
+ "cellId": "28c71da0-5e31-4d8d-b009-41257cc99b0a",
+ "visible": true,
+ "parentCellId": "340d83a2-b574-4e1d-a7a9-c0738bd3d5c1"
+ },
+ "packages/app-builder-lib/src/macPackager.ts-simstep-97bbd682-da9b-492d-b030-4285b15bd321": {
+ "path": "packages/app-builder-lib/src/macPackager.ts-simstep-97bbd682-da9b-492d-b030-4285b15bd321",
+ "fileName": "macPackager.ts",
+ "wiki": "Back in `MacPackager.sign`, a `SignOptions` object is constructed. This object consolidates all parameters for the `@electron/osx-sign` library, including the app path, platform, entitlements files, provisioning profiles, and the identity to use.",
+ "cellName": "macOS Flow: Prepare Signing Options - macPackager.ts:L327-380",
+ "cellId": "28c71da0-5e31-4d8d-b009-41257cc99b0a",
+ "visible": true,
+ "startLine": 327,
+ "endLine": 380,
+ "parentCellId": "340d83a2-b574-4e1d-a7a9-c0738bd3d5c1",
+ "parentPath": "packages/app-builder-lib/src/macPackager.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Automate code signing for macOS and Windows applications.",
+ "simStepId": "97bbd682-da9b-492d-b030-4285b15bd321"
+ }
+ ]
+ },
+ "8b8e45bd-f24c-42b3-8e47-416b96196902": {
+ "path": "8b8e45bd-f24c-42b3-8e47-416b96196902",
+ "cellName": "macOS Flow: Dispatch to Signing Function - macPackager.ts:L453-479",
+ "cellId": "8b8e45bd-f24c-42b3-8e47-416b96196902",
+ "visible": true,
+ "parentCellId": "340d83a2-b574-4e1d-a7a9-c0738bd3d5c1"
+ },
+ "packages/app-builder-lib/src/macPackager.ts-simstep-a119fc5e-3525-4cdd-ba24-3a0b7ac93322": {
+ "path": "packages/app-builder-lib/src/macPackager.ts-simstep-a119fc5e-3525-4cdd-ba24-3a0b7ac93322",
+ "fileName": "macPackager.ts",
+ "wiki": "The `doSign` method acts as a dispatcher. It checks if a custom signing function is defined in the configuration. If not, it proceeds to call the default `sign` wrapper function, passing along the prepared `SignOptions`.",
+ "cellName": "macOS Flow: Dispatch to Signing Function - macPackager.ts:L453-479",
+ "cellId": "8b8e45bd-f24c-42b3-8e47-416b96196902",
+ "visible": true,
+ "startLine": 453,
+ "endLine": 479,
+ "parentCellId": "340d83a2-b574-4e1d-a7a9-c0738bd3d5c1",
+ "parentPath": "packages/app-builder-lib/src/macPackager.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Automate code signing for macOS and Windows applications.",
+ "simStepId": "a119fc5e-3525-4cdd-ba24-3a0b7ac93322"
+ }
+ ]
+ },
+ "06fcb9fa-ee67-41e3-9a95-709b4f65b20c": {
+ "path": "06fcb9fa-ee67-41e3-9a95-709b4f65b20c",
+ "cellName": "macOS Flow: Execute `codesign` via Library - macCodeSign.ts:L212-221",
+ "cellId": "06fcb9fa-ee67-41e3-9a95-709b4f65b20c",
+ "visible": true,
+ "parentCellId": "f076f1cf-81bf-4684-9870-98ebaeb8e876"
+ },
+ "packages/app-builder-lib/src/codeSign/macCodeSign.ts-simstep-35fc7def-dda5-4e5e-8103-4c2927dd8573": {
+ "path": "packages/app-builder-lib/src/codeSign/macCodeSign.ts-simstep-35fc7def-dda5-4e5e-8103-4c2927dd8573",
+ "fileName": "macCodeSign.ts",
+ "wiki": "The `sign` function in `macCodeSign.ts` calls `signAsync` from the `@electron/osx-sign` library. This library is responsible for recursively signing all components of the application bundle by invoking Apple's native `codesign` command-line tool. The operation is wrapped in a retry mechanism to handle transient network errors with timestamp servers.",
+ "cellName": "macOS Flow: Execute `codesign` via Library - macCodeSign.ts:L212-221",
+ "cellId": "06fcb9fa-ee67-41e3-9a95-709b4f65b20c",
+ "visible": true,
+ "startLine": 212,
+ "endLine": 221,
+ "parentCellId": "f076f1cf-81bf-4684-9870-98ebaeb8e876",
+ "parentPath": "packages/app-builder-lib/src/codeSign/macCodeSign.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Automate code signing for macOS and Windows applications.",
+ "simStepId": "35fc7def-dda5-4e5e-8103-4c2927dd8573"
+ }
+ ]
+ },
+ "1dcf9897-7ff7-4f6b-9b73-e209504e2abb": {
+ "path": "1dcf9897-7ff7-4f6b-9b73-e209504e2abb",
+ "cellName": "Windows Flow:\nPass File\nto Signing\nMethod",
+ "cellId": "1dcf9897-7ff7-4f6b-9b73-e209504e2abb",
+ "visible": true,
+ "parentCellId": "04404c1a-e259-4e18-948a-2852349ec863"
+ },
+ "generated-edge-simstep-8a86f3d3-61b9-42b9-b537-52580a09626c-1dcf9897-7ff7-4f6b-9b73-e209504e2abb": {
+ "path": "generated-edge-simstep-8a86f3d3-61b9-42b9-b537-52580a09626c-1dcf9897-7ff7-4f6b-9b73-e209504e2abb",
+ "fileName": "winPackager.ts",
+ "cellName": "Windows Flow: Pass File to Signing Method",
+ "cellId": "1dcf9897-7ff7-4f6b-9b73-e209504e2abb",
+ "visible": true,
+ "startLine": 262,
+ "endLine": 262,
+ "parentPath": "packages/app-builder-lib/src/winPackager.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Automate code signing for macOS and Windows applications.",
+ "simStepId": "8a86f3d3-61b9-42b9-b537-52580a09626c"
+ }
+ ]
+ },
+ "6dccc7db-69c6-45da-af72-194e9a0ce5a5": {
+ "path": "6dccc7db-69c6-45da-af72-194e9a0ce5a5",
+ "cellName": "Windows Flow:\nDispatch to\nCentral Signing\nFunction",
+ "cellId": "6dccc7db-69c6-45da-af72-194e9a0ce5a5",
+ "visible": true,
+ "parentCellId": "04404c1a-e259-4e18-948a-2852349ec863"
+ },
+ "generated-edge-simstep-2527dfd9-d18d-48e9-9c70-331e8622cf1c-6dccc7db-69c6-45da-af72-194e9a0ce5a5": {
+ "path": "generated-edge-simstep-2527dfd9-d18d-48e9-9c70-331e8622cf1c-6dccc7db-69c6-45da-af72-194e9a0ce5a5",
+ "fileName": "winPackager.ts",
+ "cellName": "Windows Flow: Dispatch to Central Signing Function",
+ "cellId": "6dccc7db-69c6-45da-af72-194e9a0ce5a5",
+ "visible": true,
+ "startLine": 130,
+ "endLine": 130,
+ "parentPath": "packages/app-builder-lib/src/winPackager.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Automate code signing for macOS and Windows applications.",
+ "simStepId": "2527dfd9-d18d-48e9-9c70-331e8622cf1c"
+ }
+ ]
+ },
+ "20ca941e-4d3e-4d86-8e75-7b8324dc8bde": {
+ "path": "20ca941e-4d3e-4d86-8e75-7b8324dc8bde",
+ "cellName": "Windows Flow:\nPass Options\nto Manager",
+ "cellId": "20ca941e-4d3e-4d86-8e75-7b8324dc8bde",
+ "visible": true,
+ "parentCellId": "982b473a-6412-45cf-90f3-295e887d683e"
+ },
+ "generated-edge-simstep-f36b28a3-53c0-4e40-b751-a80bf3a331e2-20ca941e-4d3e-4d86-8e75-7b8324dc8bde": {
+ "path": "generated-edge-simstep-f36b28a3-53c0-4e40-b751-a80bf3a331e2-20ca941e-4d3e-4d86-8e75-7b8324dc8bde",
+ "fileName": "winPackager.ts",
+ "cellName": "Windows Flow: Pass Options to Manager",
+ "cellId": "20ca941e-4d3e-4d86-8e75-7b8324dc8bde",
+ "visible": true,
+ "startLine": 17,
+ "endLine": 17,
+ "parentPath": "packages/app-builder-lib/src/winPackager.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Automate code signing for macOS and Windows applications.",
+ "simStepId": "f36b28a3-53c0-4e40-b751-a80bf3a331e2"
+ }
+ ]
+ },
+ "79435eaa-f540-4ac4-ac0c-d9443c652a7d": {
+ "path": "79435eaa-f540-4ac4-ac0c-d9443c652a7d",
+ "cellName": "Windows Flow:\nPass Config\nto Executor",
+ "cellId": "79435eaa-f540-4ac4-ac0c-d9443c652a7d",
+ "visible": true,
+ "parentCellId": "8a0576a3-34ee-433b-adfd-ace42b748af9"
+ },
+ "generated-edge-simstep-99a550ab-cc26-4fb5-b5aa-535a2b7158e3-79435eaa-f540-4ac4-ac0c-d9443c652a7d": {
+ "path": "generated-edge-simstep-99a550ab-cc26-4fb5-b5aa-535a2b7158e3-79435eaa-f540-4ac4-ac0c-d9443c652a7d",
+ "fileName": "windowsSignToolManager.ts",
+ "cellName": "Windows Flow: Pass Config to Executor",
+ "cellId": "79435eaa-f540-4ac4-ac0c-d9443c652a7d",
+ "visible": true,
+ "startLine": 227,
+ "endLine": 227,
+ "parentPath": "packages/app-builder-lib/src/codeSign/windowsSignToolManager.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Automate code signing for macOS and Windows applications.",
+ "simStepId": "99a550ab-cc26-4fb5-b5aa-535a2b7158e3"
+ }
+ ]
+ },
+ "54514d16-ec1d-40b8-a2b8-683260f781fe": {
+ "path": "54514d16-ec1d-40b8-a2b8-683260f781fe",
+ "cellName": "macOS Flow:\nSearch for\nSigning Identity",
+ "cellId": "54514d16-ec1d-40b8-a2b8-683260f781fe",
+ "visible": true,
+ "parentCellId": "982b473a-6412-45cf-90f3-295e887d683e"
+ },
+ "generated-edge-simstep-5240ff1b-0201-4f99-ac3f-c903033da0b9-54514d16-ec1d-40b8-a2b8-683260f781fe": {
+ "path": "generated-edge-simstep-5240ff1b-0201-4f99-ac3f-c903033da0b9-54514d16-ec1d-40b8-a2b8-683260f781fe",
+ "fileName": "macPackager.ts",
+ "cellName": "macOS Flow: Search for Signing Identity",
+ "cellId": "54514d16-ec1d-40b8-a2b8-683260f781fe",
+ "visible": true,
+ "startLine": 281,
+ "endLine": 281,
+ "parentPath": "packages/app-builder-lib/src/macPackager.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Automate code signing for macOS and Windows applications.",
+ "simStepId": "5240ff1b-0201-4f99-ac3f-c903033da0b9"
+ }
+ ]
+ },
+ "f8595bd8-1c4d-44ad-ae95-775057e1b6d6": {
+ "path": "f8595bd8-1c4d-44ad-ae95-775057e1b6d6",
+ "cellName": "macOS Flow:\nReturn Found\nIdentity",
+ "cellId": "f8595bd8-1c4d-44ad-ae95-775057e1b6d6",
+ "visible": true,
+ "parentCellId": "982b473a-6412-45cf-90f3-295e887d683e"
+ },
+ "generated-edge-simstep-6a8db384-4dcc-42d9-9027-3060e3b175ae-f8595bd8-1c4d-44ad-ae95-775057e1b6d6": {
+ "path": "generated-edge-simstep-6a8db384-4dcc-42d9-9027-3060e3b175ae-f8595bd8-1c4d-44ad-ae95-775057e1b6d6",
+ "fileName": "macCodeSign.ts",
+ "cellName": "macOS Flow: Return Found Identity",
+ "cellId": "f8595bd8-1c4d-44ad-ae95-775057e1b6d6",
+ "visible": true,
+ "startLine": 281,
+ "endLine": 281,
+ "parentPath": "packages/app-builder-lib/src/codeSign/macCodeSign.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Automate code signing for macOS and Windows applications.",
+ "simStepId": "6a8db384-4dcc-42d9-9027-3060e3b175ae"
+ }
+ ]
+ },
+ "c433c0ec-59c7-4b2f-80d7-2e4982a342f7": {
+ "path": "c433c0ec-59c7-4b2f-80d7-2e4982a342f7",
+ "cellName": "macOS Flow:\nPass Options\nto Signing\nDispatcher",
+ "cellId": "c433c0ec-59c7-4b2f-80d7-2e4982a342f7",
+ "visible": true,
+ "parentCellId": "340d83a2-b574-4e1d-a7a9-c0738bd3d5c1"
+ },
+ "generated-edge-simstep-4328bbdc-e3fb-4085-9390-84884cd48c9f-c433c0ec-59c7-4b2f-80d7-2e4982a342f7": {
+ "path": "generated-edge-simstep-4328bbdc-e3fb-4085-9390-84884cd48c9f-c433c0ec-59c7-4b2f-80d7-2e4982a342f7",
+ "fileName": "macPackager.ts",
+ "cellName": "macOS Flow: Pass Options to Signing Dispatcher",
+ "cellId": "c433c0ec-59c7-4b2f-80d7-2e4982a342f7",
+ "visible": true,
+ "startLine": 382,
+ "endLine": 382,
+ "parentPath": "packages/app-builder-lib/src/macPackager.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Automate code signing for macOS and Windows applications.",
+ "simStepId": "4328bbdc-e3fb-4085-9390-84884cd48c9f"
+ }
+ ]
+ },
+ "9b685a22-2fd9-4d43-9a60-a02f205df3b7": {
+ "path": "9b685a22-2fd9-4d43-9a60-a02f205df3b7",
+ "cellName": "macOS Flow:\nPass Options\nto Signing\nLibrary",
+ "cellId": "9b685a22-2fd9-4d43-9a60-a02f205df3b7",
+ "visible": true,
+ "parentCellId": "982b473a-6412-45cf-90f3-295e887d683e"
+ },
+ "generated-edge-simstep-761fca63-a8ef-4e94-a809-4f60ca1b8cdc-9b685a22-2fd9-4d43-9a60-a02f205df3b7": {
+ "path": "generated-edge-simstep-761fca63-a8ef-4e94-a809-4f60ca1b8cdc-9b685a22-2fd9-4d43-9a60-a02f205df3b7",
+ "fileName": "macPackager.ts",
+ "cellName": "macOS Flow: Pass Options to Signing Library",
+ "cellId": "9b685a22-2fd9-4d43-9a60-a02f205df3b7",
+ "visible": true,
+ "startLine": 478,
+ "endLine": 478,
+ "parentPath": "packages/app-builder-lib/src/macPackager.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Automate code signing for macOS and Windows applications.",
+ "simStepId": "761fca63-a8ef-4e94-a809-4f60ca1b8cdc"
+ }
+ ]
+ },
+ "7018df2a-066a-40e7-b304-c22f7f521877": {
+ "path": "7018df2a-066a-40e7-b304-c22f7f521877",
+ "cellName": "dmg-builder",
+ "cellId": "7018df2a-066a-40e7-b304-c22f7f521877",
+ "visible": true,
+ "parentCellId": "d5418ff7-b1a6-479c-a52b-e5f2e91b13fa"
+ },
+ "3b580427-bf76-40c8-a710-9ad421d02136": {
+ "path": "3b580427-bf76-40c8-a710-9ad421d02136",
+ "cellName": "src",
+ "cellId": "3b580427-bf76-40c8-a710-9ad421d02136",
+ "visible": true,
+ "parentCellId": "7018df2a-066a-40e7-b304-c22f7f521877"
+ },
+ "1d4c0740-477c-43b5-9ba1-a657e615182e": {
+ "path": "1d4c0740-477c-43b5-9ba1-a657e615182e",
+ "cellName": "linuxPackager.ts",
+ "cellId": "1d4c0740-477c-43b5-9ba1-a657e615182e",
+ "visible": true,
+ "parentCellId": "982b473a-6412-45cf-90f3-295e887d683e"
+ },
+ "0b853e26-5b3b-421d-bf67-853e533e354b": {
+ "path": "0b853e26-5b3b-421d-bf67-853e533e354b",
+ "cellName": "dmg.ts",
+ "cellId": "0b853e26-5b3b-421d-bf67-853e533e354b",
+ "visible": true,
+ "parentCellId": "3b580427-bf76-40c8-a710-9ad421d02136"
+ },
+ "3a3082f3-48cc-4c7d-9603-bb161d1d0989": {
+ "path": "3a3082f3-48cc-4c7d-9603-bb161d1d0989",
+ "cellName": "AppImageTarget.ts",
+ "cellId": "3a3082f3-48cc-4c7d-9603-bb161d1d0989",
+ "visible": true,
+ "parentCellId": "6285f9fe-25dd-4f8d-8034-98284badf9e5"
+ },
+ "7403828c-0aba-40c6-817f-4af67f25a2c1": {
+ "path": "7403828c-0aba-40c6-817f-4af67f25a2c1",
+ "cellName": "Windows NSIS Flow: Create Windows Targets - winPackager.ts:L77-90",
+ "cellId": "7403828c-0aba-40c6-817f-4af67f25a2c1",
+ "visible": true,
+ "parentCellId": "04404c1a-e259-4e18-948a-2852349ec863"
+ },
+ "packages/app-builder-lib/src/winPackager.ts-simstep-c20bbd4c-5d31-417a-86e0-762238818638": {
+ "path": "packages/app-builder-lib/src/winPackager.ts-simstep-c20bbd4c-5d31-417a-86e0-762238818638",
+ "fileName": "winPackager.ts",
+ "wiki": "The build process for Windows starts in the `WinPackager`. It reads the `win` configuration and iterates through the specified targets (e.g., 'nsis', 'msi', 'portable'). For each target, it instantiates the corresponding target handler class.",
+ "cellName": "Windows NSIS Flow: Create Windows Targets - winPackager.ts:L77-90",
+ "cellId": "7403828c-0aba-40c6-817f-4af67f25a2c1",
+ "visible": true,
+ "startLine": 77,
+ "endLine": 90,
+ "parentCellId": "04404c1a-e259-4e18-948a-2852349ec863",
+ "parentPath": "packages/app-builder-lib/src/winPackager.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Create a wide variety of native installer and package types for each platform.",
+ "simStepId": "c20bbd4c-5d31-417a-86e0-762238818638"
+ }
+ ]
+ },
+ "fe422f63-e4ad-4b1d-aa55-feaeb4eceb96": {
+ "path": "fe422f63-e4ad-4b1d-aa55-feaeb4eceb96",
+ "cellName": "Windows NSIS Flow: Initialize NsisTarget - NsisTarget.ts:L70-87",
+ "cellId": "fe422f63-e4ad-4b1d-aa55-feaeb4eceb96",
+ "visible": true,
+ "parentCellId": "2c78fa58-8fb6-4f94-a2a4-a2263e70cfcf"
+ },
+ "packages/app-builder-lib/src/targets/nsis/NsisTarget.ts-simstep-1b826f7f-e8d7-4b05-9322-ff4709046fe0": {
+ "path": "packages/app-builder-lib/src/targets/nsis/NsisTarget.ts-simstep-1b826f7f-e8d7-4b05-9322-ff4709046fe0",
+ "fileName": "NsisTarget.ts",
+ "wiki": "The `NsisTarget` constructor is called. It initializes its configuration by merging user-defined options and resolves them globally so other parts of the NSIS build process can access them.",
+ "cellName": "Windows NSIS Flow: Initialize NsisTarget - NsisTarget.ts:L70-87",
+ "cellId": "fe422f63-e4ad-4b1d-aa55-feaeb4eceb96",
+ "visible": true,
+ "startLine": 70,
+ "endLine": 87,
+ "parentCellId": "2c78fa58-8fb6-4f94-a2a4-a2263e70cfcf",
+ "parentPath": "packages/app-builder-lib/src/targets/nsis/NsisTarget.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Create a wide variety of native installer and package types for each platform.",
+ "simStepId": "1b826f7f-e8d7-4b05-9322-ff4709046fe0"
+ }
+ ]
+ },
+ "495c3478-2ce2-4185-a2be-c5aca27859ec": {
+ "path": "495c3478-2ce2-4185-a2be-c5aca27859ec",
+ "cellName": "Windows NSIS Flow: Generate NSIS Script - NsisTarget.ts:L208-213",
+ "cellId": "495c3478-2ce2-4185-a2be-c5aca27859ec",
+ "visible": true,
+ "parentCellId": "2c78fa58-8fb6-4f94-a2a4-a2263e70cfcf"
+ },
+ "packages/app-builder-lib/src/targets/nsis/NsisTarget.ts-simstep-0440be1c-5d63-4394-ab24-ea4b28cc65e7": {
+ "path": "packages/app-builder-lib/src/targets/nsis/NsisTarget.ts-simstep-0440be1c-5d63-4394-ab24-ea4b28cc65e7",
+ "fileName": "NsisTarget.ts",
+ "wiki": "The `build` method triggers the core logic in `buildInstaller`. This involves creating an `NsisScriptGenerator` instance, which gathers all configuration (e.g., one-click install, languages, license file) and generates a complete `.nsi` script file.",
+ "cellName": "Windows NSIS Flow: Generate NSIS Script - NsisTarget.ts:L208-213",
+ "cellId": "495c3478-2ce2-4185-a2be-c5aca27859ec",
+ "visible": true,
+ "startLine": 208,
+ "endLine": 213,
+ "parentCellId": "2c78fa58-8fb6-4f94-a2a4-a2263e70cfcf",
+ "parentPath": "packages/app-builder-lib/src/targets/nsis/NsisTarget.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Create a wide variety of native installer and package types for each platform.",
+ "simStepId": "0440be1c-5d63-4394-ab24-ea4b28cc65e7"
+ }
+ ]
+ },
+ "24c3955a-e236-4460-85b9-be1919149d6d": {
+ "path": "24c3955a-e236-4460-85b9-be1919149d6d",
+ "cellName": "Windows NSIS Flow: Create Final Installer - NsisTarget.ts:L237",
+ "cellId": "24c3955a-e236-4460-85b9-be1919149d6d",
+ "visible": true,
+ "parentCellId": "2c78fa58-8fb6-4f94-a2a4-a2263e70cfcf"
+ },
+ "packages/app-builder-lib/src/targets/nsis/NsisTarget.ts-simstep-7af80a58-e2ff-4994-8086-74c150d8e01b": {
+ "path": "packages/app-builder-lib/src/targets/nsis/NsisTarget.ts-simstep-7af80a58-e2ff-4994-8086-74c150d8e01b",
+ "fileName": "NsisTarget.ts",
+ "wiki": "The `makensis.exe` process compiles the script, packages the application files into an installer, signs it (if configured), and outputs the final installer `.exe` file.",
+ "cellName": "Windows NSIS Flow: Create Final Installer - NsisTarget.ts:L237",
+ "cellId": "24c3955a-e236-4460-85b9-be1919149d6d",
+ "visible": true,
+ "startLine": 237,
+ "endLine": 237,
+ "parentCellId": "2c78fa58-8fb6-4f94-a2a4-a2263e70cfcf",
+ "parentPath": "packages/app-builder-lib/src/targets/nsis/NsisTarget.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Create a wide variety of native installer and package types for each platform.",
+ "simStepId": "7af80a58-e2ff-4994-8086-74c150d8e01b"
+ }
+ ]
+ },
+ "7c693dce-0d3b-469c-a2cb-303aed172b2d": {
+ "path": "7c693dce-0d3b-469c-a2cb-303aed172b2d",
+ "cellName": "macOS DMG Flow: Create macOS Targets - macPackager.ts:L97-101",
+ "cellId": "7c693dce-0d3b-469c-a2cb-303aed172b2d",
+ "visible": true,
+ "parentCellId": "340d83a2-b574-4e1d-a7a9-c0738bd3d5c1"
+ },
+ "packages/app-builder-lib/src/macPackager.ts-simstep-123a2d8e-40f0-4224-9b92-03e9f597b151": {
+ "path": "packages/app-builder-lib/src/macPackager.ts-simstep-123a2d8e-40f0-4224-9b92-03e9f597b151",
+ "fileName": "macPackager.ts",
+ "wiki": "The build process for macOS starts in the `MacPackager`. It reads the `mac` configuration and creates target handlers. For the 'dmg' target, it dynamically requires the `DmgTarget` class from the `dmg-builder` package.",
+ "cellName": "macOS DMG Flow: Create macOS Targets - macPackager.ts:L97-101",
+ "cellId": "7c693dce-0d3b-469c-a2cb-303aed172b2d",
+ "visible": true,
+ "startLine": 97,
+ "endLine": 101,
+ "parentCellId": "340d83a2-b574-4e1d-a7a9-c0738bd3d5c1",
+ "parentPath": "packages/app-builder-lib/src/macPackager.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Create a wide variety of native installer and package types for each platform.",
+ "simStepId": "123a2d8e-40f0-4224-9b92-03e9f597b151"
+ }
+ ]
+ },
+ "69e62420-ece1-439c-9797-6ee5747e448d": {
+ "path": "69e62420-ece1-439c-9797-6ee5747e448d",
+ "cellName": "macOS DMG Flow: Initialize DmgTarget - dmg.ts:L50-55",
+ "cellId": "69e62420-ece1-439c-9797-6ee5747e448d",
+ "visible": true,
+ "parentCellId": "0b853e26-5b3b-421d-bf67-853e533e354b"
+ },
+ "packages/dmg-builder/src/dmg.ts-simstep-ccde8a63-4634-46d5-b27a-7386cd56aed1": {
+ "path": "packages/dmg-builder/src/dmg.ts-simstep-ccde8a63-4634-46d5-b27a-7386cd56aed1",
+ "fileName": "dmg.ts",
+ "wiki": "The `DmgTarget` constructor is called. It retrieves the DMG-specific options from the main build configuration (e.g., background image, icon size, window position).",
+ "cellName": "macOS DMG Flow: Initialize DmgTarget - dmg.ts:L50-55",
+ "cellId": "69e62420-ece1-439c-9797-6ee5747e448d",
+ "visible": true,
+ "startLine": 50,
+ "endLine": 55,
+ "parentCellId": "0b853e26-5b3b-421d-bf67-853e533e354b",
+ "parentPath": "packages/dmg-builder/src/dmg.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Create a wide variety of native installer and package types for each platform.",
+ "simStepId": "ccde8a63-4634-46d5-b27a-7386cd56aed1"
+ }
+ ]
+ },
+ "69416989-dca4-460a-beb1-fd729eef1b8b": {
+ "path": "69416989-dca4-460a-beb1-fd729eef1b8b",
+ "cellName": "macOS DMG Flow: Generate DMG Specification - dmg.ts:L59",
+ "cellId": "69416989-dca4-460a-beb1-fd729eef1b8b",
+ "visible": true,
+ "parentCellId": "0b853e26-5b3b-421d-bf67-853e533e354b"
+ },
+ "packages/dmg-builder/src/dmg.ts-simstep-2ebbc873-fff7-458e-8a1f-31664437c8bb": {
+ "path": "packages/dmg-builder/src/dmg.ts-simstep-2ebbc873-fff7-458e-8a1f-31664437c8bb",
+ "fileName": "dmg.ts",
+ "wiki": "The `build` method computes the final DMG configuration, including window size, icon positions, and license information. This configuration is formatted into a JSON specification file for the underlying `dmgbuild` tool.",
+ "cellName": "macOS DMG Flow: Generate DMG Specification - dmg.ts:L59",
+ "cellId": "69416989-dca4-460a-beb1-fd729eef1b8b",
+ "visible": true,
+ "startLine": 59,
+ "endLine": 59,
+ "parentCellId": "0b853e26-5b3b-421d-bf67-853e533e354b",
+ "parentPath": "packages/dmg-builder/src/dmg.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Create a wide variety of native installer and package types for each platform.",
+ "simStepId": "2ebbc873-fff7-458e-8a1f-31664437c8bb"
+ }
+ ]
+ },
+ "a0fdeb83-ac4d-4aa8-9600-ad4a7e11c3d6": {
+ "path": "a0fdeb83-ac4d-4aa8-9600-ad4a7e11c3d6",
+ "cellName": "macOS DMG Flow: Create Final DMG - dmg.ts:L60-67",
+ "cellId": "a0fdeb83-ac4d-4aa8-9600-ad4a7e11c3d6",
+ "visible": true,
+ "parentCellId": "0b853e26-5b3b-421d-bf67-853e533e354b"
+ },
+ "packages/dmg-builder/src/dmg.ts-simstep-c4168afd-776c-4d32-938b-21977d48a8ec": {
+ "path": "packages/dmg-builder/src/dmg.ts-simstep-c4168afd-776c-4d32-938b-21977d48a8ec",
+ "fileName": "dmg.ts",
+ "wiki": "The `dmgbuild` script runs, creating a temporary disk image, copying the application and other files, applying the custom background and icon layout, and compressing it into the final `.dmg` artifact. The DMG is then signed if code signing is configured.",
+ "cellName": "macOS DMG Flow: Create Final DMG - dmg.ts:L60-67",
+ "cellId": "a0fdeb83-ac4d-4aa8-9600-ad4a7e11c3d6",
+ "visible": true,
+ "startLine": 60,
+ "endLine": 67,
+ "parentCellId": "0b853e26-5b3b-421d-bf67-853e533e354b",
+ "parentPath": "packages/dmg-builder/src/dmg.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Create a wide variety of native installer and package types for each platform.",
+ "simStepId": "c4168afd-776c-4d32-938b-21977d48a8ec"
+ }
+ ]
+ },
+ "aa87ed82-537f-472f-a506-e1920a574fd9": {
+ "path": "aa87ed82-537f-472f-a506-e1920a574fd9",
+ "cellName": "Linux AppImage Flow: Create Linux Targets - linuxPackager.ts:L44-58",
+ "cellId": "aa87ed82-537f-472f-a506-e1920a574fd9",
+ "visible": true,
+ "parentCellId": "1d4c0740-477c-43b5-9ba1-a657e615182e"
+ },
+ "packages/app-builder-lib/src/linuxPackager.ts-simstep-8d9c5dd8-e803-4f89-a44c-99db706e647b": {
+ "path": "packages/app-builder-lib/src/linuxPackager.ts-simstep-8d9c5dd8-e803-4f89-a44c-99db706e647b",
+ "fileName": "linuxPackager.ts",
+ "wiki": "The `LinuxPackager` initiates the Linux build. It identifies 'appimage' as a target and dynamically requires the `AppImageTarget` class.",
+ "cellName": "Linux AppImage Flow: Create Linux Targets - linuxPackager.ts:L44-58",
+ "cellId": "aa87ed82-537f-472f-a506-e1920a574fd9",
+ "visible": true,
+ "startLine": 44,
+ "endLine": 58,
+ "parentCellId": "1d4c0740-477c-43b5-9ba1-a657e615182e",
+ "parentPath": "packages/app-builder-lib/src/linuxPackager.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Create a wide variety of native installer and package types for each platform.",
+ "simStepId": "8d9c5dd8-e803-4f89-a44c-99db706e647b"
+ }
+ ]
+ },
+ "98d1be17-6dc1-472b-bc92-8d973457024f": {
+ "path": "98d1be17-6dc1-472b-bc92-8d973457024f",
+ "cellName": "Linux AppImage Flow: Initialize AppImageTarget - AppImageTarget.ts:L18-33",
+ "cellId": "98d1be17-6dc1-472b-bc92-8d973457024f",
+ "visible": true,
+ "parentCellId": "3a3082f3-48cc-4c7d-9603-bb161d1d0989"
+ },
+ "packages/app-builder-lib/src/targets/AppImageTarget.ts-simstep-9736c6d2-d7dc-42b1-9755-113d4a532b88": {
+ "path": "packages/app-builder-lib/src/targets/AppImageTarget.ts-simstep-9736c6d2-d7dc-42b1-9755-113d4a532b88",
+ "fileName": "AppImageTarget.ts",
+ "wiki": "The `AppImageTarget` constructor is called. It reads AppImage-specific options and sets up a lazy-initialized property for the `.desktop` entry file, which is required for desktop integration.",
+ "cellName": "Linux AppImage Flow: Initialize AppImageTarget - AppImageTarget.ts:L18-33",
+ "cellId": "98d1be17-6dc1-472b-bc92-8d973457024f",
+ "visible": true,
+ "startLine": 18,
+ "endLine": 33,
+ "parentCellId": "3a3082f3-48cc-4c7d-9603-bb161d1d0989",
+ "parentPath": "packages/app-builder-lib/src/targets/AppImageTarget.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Create a wide variety of native installer and package types for each platform.",
+ "simStepId": "9736c6d2-d7dc-42b1-9755-113d4a532b88"
+ }
+ ]
+ },
+ "81b53eee-ba91-4e7b-98a8-d3ee9d3d07ea": {
+ "path": "81b53eee-ba91-4e7b-98a8-d3ee9d3d07ea",
+ "cellName": "Linux AppImage Flow: Prepare Staging Directory - AppImageTarget.ts:L38-64",
+ "cellId": "81b53eee-ba91-4e7b-98a8-d3ee9d3d07ea",
+ "visible": true,
+ "parentCellId": "3a3082f3-48cc-4c7d-9603-bb161d1d0989"
+ },
+ "packages/app-builder-lib/src/targets/AppImageTarget.ts-simstep-24830eda-2b3b-438e-bdfb-323fcfe8fb35": {
+ "path": "packages/app-builder-lib/src/targets/AppImageTarget.ts-simstep-24830eda-2b3b-438e-bdfb-323fcfe8fb35",
+ "fileName": "AppImageTarget.ts",
+ "wiki": "The `build` method creates a staging directory. It then copies the application files, the icon, a startup script (`AppRun`), and the generated `.desktop` file into this directory, following the structure required by `appimagetool`.",
+ "cellName": "Linux AppImage Flow: Prepare Staging Directory - AppImageTarget.ts:L38-64",
+ "cellId": "81b53eee-ba91-4e7b-98a8-d3ee9d3d07ea",
+ "visible": true,
+ "startLine": 38,
+ "endLine": 64,
+ "parentCellId": "3a3082f3-48cc-4c7d-9603-bb161d1d0989",
+ "parentPath": "packages/app-builder-lib/src/targets/AppImageTarget.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Create a wide variety of native installer and package types for each platform.",
+ "simStepId": "24830eda-2b3b-438e-bdfb-323fcfe8fb35"
+ }
+ ]
+ },
+ "3a0d0c85-ec29-4c27-a53b-073051b71759": {
+ "path": "3a0d0c85-ec29-4c27-a53b-073051b71759",
+ "cellName": "Linux AppImage Flow: Create Final AppImage - AppImageTarget.ts:L74",
+ "cellId": "3a0d0c85-ec29-4c27-a53b-073051b71759",
+ "visible": true,
+ "parentCellId": "3a3082f3-48cc-4c7d-9603-bb161d1d0989"
+ },
+ "packages/app-builder-lib/src/targets/AppImageTarget.ts-simstep-5aeb5fa0-51e1-4bf8-bd3c-d84653ad3d95": {
+ "path": "packages/app-builder-lib/src/targets/AppImageTarget.ts-simstep-5aeb5fa0-51e1-4bf8-bd3c-d84653ad3d95",
+ "fileName": "AppImageTarget.ts",
+ "wiki": "`electron-builder` executes its helper tool, `app-builder`, which in turn calls `appimagetool`. This tool takes the staging directory and packages it into a single, self-contained, executable `.AppImage` file.",
+ "cellName": "Linux AppImage Flow: Create Final AppImage - AppImageTarget.ts:L74",
+ "cellId": "3a0d0c85-ec29-4c27-a53b-073051b71759",
+ "visible": true,
+ "startLine": 74,
+ "endLine": 74,
+ "parentCellId": "3a3082f3-48cc-4c7d-9603-bb161d1d0989",
+ "parentPath": "packages/app-builder-lib/src/targets/AppImageTarget.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Create a wide variety of native installer and package types for each platform.",
+ "simStepId": "5aeb5fa0-51e1-4bf8-bd3c-d84653ad3d95"
+ }
+ ]
+ },
+ "982b9edd-2167-406b-aeed-af8f1553feb3": {
+ "path": "982b9edd-2167-406b-aeed-af8f1553feb3",
+ "cellName": "Windows NSIS\nFlow: Instantiate\nNsisTarget",
+ "cellId": "982b9edd-2167-406b-aeed-af8f1553feb3",
+ "visible": true,
+ "parentCellId": "982b473a-6412-45cf-90f3-295e887d683e"
+ },
+ "generated-edge-simstep-041b2d19-f750-4d0e-8f0f-a91d2d124432-982b9edd-2167-406b-aeed-af8f1553feb3": {
+ "path": "generated-edge-simstep-041b2d19-f750-4d0e-8f0f-a91d2d124432-982b9edd-2167-406b-aeed-af8f1553feb3",
+ "fileName": "winPackager.ts",
+ "cellName": "Windows NSIS Flow: Instantiate NsisTarget",
+ "cellId": "982b9edd-2167-406b-aeed-af8f1553feb3",
+ "visible": true,
+ "startLine": 80,
+ "endLine": 80,
+ "parentPath": "packages/app-builder-lib/src/winPackager.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Create a wide variety of native installer and package types for each platform.",
+ "simStepId": "041b2d19-f750-4d0e-8f0f-a91d2d124432"
+ }
+ ]
+ },
+ "1d00246f-3364-4904-8681-1ba47e5dd92f": {
+ "path": "1d00246f-3364-4904-8681-1ba47e5dd92f",
+ "cellName": "Windows NSIS\nFlow: Send\nBuild Request",
+ "cellId": "1d00246f-3364-4904-8681-1ba47e5dd92f",
+ "visible": true,
+ "parentCellId": "2c78fa58-8fb6-4f94-a2a4-a2263e70cfcf"
+ },
+ "generated-edge-simstep-d45fcb34-e2dd-47c6-948f-5822293d6ea4-1d00246f-3364-4904-8681-1ba47e5dd92f": {
+ "path": "generated-edge-simstep-d45fcb34-e2dd-47c6-948f-5822293d6ea4-1d00246f-3364-4904-8681-1ba47e5dd92f",
+ "fileName": "NsisTarget.ts",
+ "cellName": "Windows NSIS Flow: Send Build Request",
+ "cellId": "1d00246f-3364-4904-8681-1ba47e5dd92f",
+ "visible": true,
+ "startLine": 91,
+ "endLine": 91,
+ "parentPath": "packages/app-builder-lib/src/targets/nsis/NsisTarget.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Create a wide variety of native installer and package types for each platform.",
+ "simStepId": "d45fcb34-e2dd-47c6-948f-5822293d6ea4"
+ }
+ ]
+ },
+ "05c03c70-1504-4ff7-aeb1-929d4b6e7fa3": {
+ "path": "05c03c70-1504-4ff7-aeb1-929d4b6e7fa3",
+ "cellName": "Windows NSIS\nFlow: Pass\nScript to\nCompiler",
+ "cellId": "05c03c70-1504-4ff7-aeb1-929d4b6e7fa3",
+ "visible": true,
+ "parentCellId": "2c78fa58-8fb6-4f94-a2a4-a2263e70cfcf"
+ },
+ "generated-edge-simstep-8d9ebb2a-baa9-454e-bccf-5a66b0b77dd8-05c03c70-1504-4ff7-aeb1-929d4b6e7fa3": {
+ "path": "generated-edge-simstep-8d9ebb2a-baa9-454e-bccf-5a66b0b77dd8-05c03c70-1504-4ff7-aeb1-929d4b6e7fa3",
+ "fileName": "NsisTarget.ts",
+ "cellName": "Windows NSIS Flow: Pass Script to Compiler",
+ "cellId": "05c03c70-1504-4ff7-aeb1-929d4b6e7fa3",
+ "visible": true,
+ "startLine": 226,
+ "endLine": 226,
+ "parentPath": "packages/app-builder-lib/src/targets/nsis/NsisTarget.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Create a wide variety of native installer and package types for each platform.",
+ "simStepId": "8d9ebb2a-baa9-454e-bccf-5a66b0b77dd8"
+ }
+ ]
+ },
+ "2adadbcd-adc4-495c-952d-296a99fccae7": {
+ "path": "2adadbcd-adc4-495c-952d-296a99fccae7",
+ "cellName": "macOS DMG\nFlow: Instantiate\nDmgTarget",
+ "cellId": "2adadbcd-adc4-495c-952d-296a99fccae7",
+ "visible": true,
+ "parentCellId": "d5418ff7-b1a6-479c-a52b-e5f2e91b13fa"
+ },
+ "generated-edge-simstep-5707e597-a404-4a4e-a795-cbbdcb47800c-2adadbcd-adc4-495c-952d-296a99fccae7": {
+ "path": "generated-edge-simstep-5707e597-a404-4a4e-a795-cbbdcb47800c-2adadbcd-adc4-495c-952d-296a99fccae7",
+ "fileName": "macPackager.ts",
+ "cellName": "macOS DMG Flow: Instantiate DmgTarget",
+ "cellId": "2adadbcd-adc4-495c-952d-296a99fccae7",
+ "visible": true,
+ "startLine": 99,
+ "endLine": 99,
+ "parentPath": "packages/app-builder-lib/src/macPackager.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Create a wide variety of native installer and package types for each platform.",
+ "simStepId": "5707e597-a404-4a4e-a795-cbbdcb47800c"
+ }
+ ]
+ },
+ "0c54dbe6-d777-4bd6-8670-dab093141a01": {
+ "path": "0c54dbe6-d777-4bd6-8670-dab093141a01",
+ "cellName": "macOS DMG\nFlow: Send\nBuild Request",
+ "cellId": "0c54dbe6-d777-4bd6-8670-dab093141a01",
+ "visible": true,
+ "parentCellId": "0b853e26-5b3b-421d-bf67-853e533e354b"
+ },
+ "generated-edge-simstep-e015f28f-5c4a-4082-9f5e-51692004e37c-0c54dbe6-d777-4bd6-8670-dab093141a01": {
+ "path": "generated-edge-simstep-e015f28f-5c4a-4082-9f5e-51692004e37c-0c54dbe6-d777-4bd6-8670-dab093141a01",
+ "fileName": "dmg.ts",
+ "cellName": "macOS DMG Flow: Send Build Request",
+ "cellId": "0c54dbe6-d777-4bd6-8670-dab093141a01",
+ "visible": true,
+ "startLine": 57,
+ "endLine": 57,
+ "parentPath": "packages/dmg-builder/src/dmg.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Create a wide variety of native installer and package types for each platform.",
+ "simStepId": "e015f28f-5c4a-4082-9f5e-51692004e37c"
+ }
+ ]
+ },
+ "5f31e988-7e58-447f-9556-72db1ff78e5f": {
+ "path": "5f31e988-7e58-447f-9556-72db1ff78e5f",
+ "cellName": "macOS DMG\nFlow: Pass\nSpec to\nBuild Script",
+ "cellId": "5f31e988-7e58-447f-9556-72db1ff78e5f",
+ "visible": true,
+ "parentCellId": "0b853e26-5b3b-421d-bf67-853e533e354b"
+ },
+ "generated-edge-simstep-1f6d7419-07a9-4531-84f7-848fd0a10104-5f31e988-7e58-447f-9556-72db1ff78e5f": {
+ "path": "generated-edge-simstep-1f6d7419-07a9-4531-84f7-848fd0a10104-5f31e988-7e58-447f-9556-72db1ff78e5f",
+ "fileName": "dmg.ts",
+ "cellName": "macOS DMG Flow: Pass Spec to Build Script",
+ "cellId": "5f31e988-7e58-447f-9556-72db1ff78e5f",
+ "visible": true,
+ "startLine": 67,
+ "endLine": 67,
+ "parentPath": "packages/dmg-builder/src/dmg.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Create a wide variety of native installer and package types for each platform.",
+ "simStepId": "1f6d7419-07a9-4531-84f7-848fd0a10104"
+ }
+ ]
+ },
+ "57c52626-9ccb-4a54-9158-87016f335c02": {
+ "path": "57c52626-9ccb-4a54-9158-87016f335c02",
+ "cellName": "Linux AppImage\nFlow: Instantiate\nAppImageTarget",
+ "cellId": "57c52626-9ccb-4a54-9158-87016f335c02",
+ "visible": true,
+ "parentCellId": "982b473a-6412-45cf-90f3-295e887d683e"
+ },
+ "generated-edge-simstep-a85a4c67-02bf-47df-b864-5af60492135e-57c52626-9ccb-4a54-9158-87016f335c02": {
+ "path": "generated-edge-simstep-a85a4c67-02bf-47df-b864-5af60492135e-57c52626-9ccb-4a54-9158-87016f335c02",
+ "fileName": "linuxPackager.ts",
+ "cellName": "Linux AppImage Flow: Instantiate AppImageTarget",
+ "cellId": "57c52626-9ccb-4a54-9158-87016f335c02",
+ "visible": true,
+ "startLine": 70,
+ "endLine": 70,
+ "parentPath": "packages/app-builder-lib/src/linuxPackager.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Create a wide variety of native installer and package types for each platform.",
+ "simStepId": "a85a4c67-02bf-47df-b864-5af60492135e"
+ }
+ ]
+ },
+ "a113743d-a410-4bf2-8f3d-8d748b536837": {
+ "path": "a113743d-a410-4bf2-8f3d-8d748b536837",
+ "cellName": "Linux AppImage\nFlow: Send\nBuild Request",
+ "cellId": "a113743d-a410-4bf2-8f3d-8d748b536837",
+ "visible": true,
+ "parentCellId": "3a3082f3-48cc-4c7d-9603-bb161d1d0989"
+ },
+ "generated-edge-simstep-e641d563-f23d-43f2-ae48-82b1c266f96c-a113743d-a410-4bf2-8f3d-8d748b536837": {
+ "path": "generated-edge-simstep-e641d563-f23d-43f2-ae48-82b1c266f96c-a113743d-a410-4bf2-8f3d-8d748b536837",
+ "fileName": "AppImageTarget.ts",
+ "cellName": "Linux AppImage Flow: Send Build Request",
+ "cellId": "a113743d-a410-4bf2-8f3d-8d748b536837",
+ "visible": true,
+ "startLine": 35,
+ "endLine": 35,
+ "parentPath": "packages/app-builder-lib/src/targets/AppImageTarget.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Create a wide variety of native installer and package types for each platform.",
+ "simStepId": "e641d563-f23d-43f2-ae48-82b1c266f96c"
+ }
+ ]
+ },
+ "a17bd16d-9cea-4c97-8106-fe4886ca8e56": {
+ "path": "a17bd16d-9cea-4c97-8106-fe4886ca8e56",
+ "cellName": "Linux AppImage\nFlow: Pass\nStaging Info\nto App\nBuilder",
+ "cellId": "a17bd16d-9cea-4c97-8106-fe4886ca8e56",
+ "visible": true,
+ "parentCellId": "3a3082f3-48cc-4c7d-9603-bb161d1d0989"
+ },
+ "generated-edge-simstep-b9e64687-ae13-4949-930e-c6e38daec0dc-a17bd16d-9cea-4c97-8106-fe4886ca8e56": {
+ "path": "generated-edge-simstep-b9e64687-ae13-4949-930e-c6e38daec0dc-a17bd16d-9cea-4c97-8106-fe4886ca8e56",
+ "fileName": "AppImageTarget.ts",
+ "cellName": "Linux AppImage Flow: Pass Staging Info to App Builder",
+ "cellId": "a17bd16d-9cea-4c97-8106-fe4886ca8e56",
+ "visible": true,
+ "startLine": 68,
+ "endLine": 73,
+ "parentPath": "packages/app-builder-lib/src/targets/AppImageTarget.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Create a wide variety of native installer and package types for each platform.",
+ "simStepId": "b9e64687-ae13-4949-930e-c6e38daec0dc"
+ }
+ ]
+ },
+ "961a4a5f-dbd2-4376-8149-5ed6d9501595": {
+ "path": "961a4a5f-dbd2-4376-8149-5ed6d9501595",
+ "cellName": "differentialDownloader",
+ "cellId": "961a4a5f-dbd2-4376-8149-5ed6d9501595",
+ "visible": true,
+ "parentCellId": "68aede06-2d8b-46a7-8cbe-78f2aed3541e"
+ },
+ "0850be83-b674-4749-a67c-98b7736d578c": {
+ "path": "0850be83-b674-4749-a67c-98b7736d578c",
+ "cellName": "differentialUpdateInfoBuilder.ts",
+ "cellId": "0850be83-b674-4749-a67c-98b7736d578c",
+ "visible": true,
+ "parentCellId": "6285f9fe-25dd-4f8d-8034-98284badf9e5"
+ },
+ "b569585b-3d08-4b24-8dab-5693c7467270": {
+ "path": "b569585b-3d08-4b24-8dab-5693c7467270",
+ "cellName": "DifferentialDownloader.ts",
+ "cellId": "b569585b-3d08-4b24-8dab-5693c7467270",
+ "visible": true,
+ "parentCellId": "961a4a5f-dbd2-4376-8149-5ed6d9501595"
+ },
+ "e5d82326-fe46-455c-911e-d9df10103132": {
+ "path": "e5d82326-fe46-455c-911e-d9df10103132",
+ "cellName": "downloadPlanBuilder.ts",
+ "cellId": "e5d82326-fe46-455c-911e-d9df10103132",
+ "visible": true,
+ "parentCellId": "961a4a5f-dbd2-4376-8149-5ed6d9501595"
+ },
+ "543156d6-0a81-4ba0-a747-724fd337239b": {
+ "path": "543156d6-0a81-4ba0-a747-724fd337239b",
+ "cellName": "multipleRangeDownloader.ts",
+ "cellId": "543156d6-0a81-4ba0-a747-724fd337239b",
+ "visible": true,
+ "parentCellId": "961a4a5f-dbd2-4376-8149-5ed6d9501595"
+ },
+ "a00f4320-0a01-4719-bc2b-f63e47aca5be": {
+ "path": "a00f4320-0a01-4719-bc2b-f63e47aca5be",
+ "cellName": "Build: Start Differential Update Info Generation - NsisTarget.ts:L111-127",
+ "cellId": "a00f4320-0a01-4719-bc2b-f63e47aca5be",
+ "visible": true,
+ "parentCellId": "2c78fa58-8fb6-4f94-a2a4-a2263e70cfcf"
+ },
+ "packages/app-builder-lib/src/targets/nsis/NsisTarget.ts-simstep-cbef6d99-0092-44e9-8f7d-a906ed08ee43": {
+ "path": "packages/app-builder-lib/src/targets/nsis/NsisTarget.ts-simstep-cbef6d99-0092-44e9-8f7d-a906ed08ee43",
+ "fileName": "NsisTarget.ts",
+ "wiki": "During the application build process for a target that supports differential updates (like NSIS web installers or AppImage), the builder initiates the creation of blockmap data after packaging the application.",
+ "cellName": "Build: Start Differential Update Info Generation - NsisTarget.ts:L111-127",
+ "cellId": "a00f4320-0a01-4719-bc2b-f63e47aca5be",
+ "visible": true,
+ "startLine": 111,
+ "endLine": 127,
+ "parentCellId": "2c78fa58-8fb6-4f94-a2a4-a2263e70cfcf",
+ "parentPath": "packages/app-builder-lib/src/targets/nsis/NsisTarget.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Generate and apply differential (blockmap) updates to reduce download sizes.",
+ "simStepId": "cbef6d99-0092-44e9-8f7d-a906ed08ee43"
+ }
+ ]
+ },
+ "2f7511dc-15d6-4e25-b5bb-06315e90b41f": {
+ "path": "2f7511dc-15d6-4e25-b5bb-06315e90b41f",
+ "cellName": "Build: Generate and Append Blockmap - differentialUpdateInfoBuilder.ts:L66-69",
+ "cellId": "2f7511dc-15d6-4e25-b5bb-06315e90b41f",
+ "visible": true,
+ "parentCellId": "0850be83-b674-4749-a67c-98b7736d578c"
+ },
+ "packages/app-builder-lib/src/targets/differentialUpdateInfoBuilder.ts-simstep-9522c0b4-daee-4514-bde9-cd4721af3e38": {
+ "path": "packages/app-builder-lib/src/targets/differentialUpdateInfoBuilder.ts-simstep-9522c0b4-daee-4514-bde9-cd4721af3e38",
+ "fileName": "differentialUpdateInfoBuilder.ts",
+ "wiki": "The `appendBlockmap` function is called, which in turn executes the `app-builder blockmap` command-line tool. This tool reads the archive file, divides it into blocks, calculates checksums for each block, and appends this blockmap data to the end of the archive file itself.",
+ "cellName": "Build: Generate and Append Blockmap - differentialUpdateInfoBuilder.ts:L66-69",
+ "cellId": "2f7511dc-15d6-4e25-b5bb-06315e90b41f",
+ "visible": true,
+ "startLine": 66,
+ "endLine": 69,
+ "parentCellId": "0850be83-b674-4749-a67c-98b7736d578c",
+ "parentPath": "packages/app-builder-lib/src/targets/differentialUpdateInfoBuilder.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Generate and apply differential (blockmap) updates to reduce download sizes.",
+ "simStepId": "9522c0b4-daee-4514-bde9-cd4721af3e38"
+ }
+ ]
+ },
+ "371ccf87-8f70-439b-8538-2d3d6c216bfe": {
+ "path": "371ccf87-8f70-439b-8538-2d3d6c216bfe",
+ "cellName": "Build: Create Standalone Blockmap File (Alternative) - differentialUpdateInfoBuilder.ts:L71-78",
+ "cellId": "371ccf87-8f70-439b-8538-2d3d6c216bfe",
+ "visible": true,
+ "parentCellId": "0850be83-b674-4749-a67c-98b7736d578c"
+ },
+ "packages/app-builder-lib/src/targets/differentialUpdateInfoBuilder.ts-simstep-4ea7d980-dc32-4761-960e-8280a7b4b574": {
+ "path": "packages/app-builder-lib/src/targets/differentialUpdateInfoBuilder.ts-simstep-4ea7d980-dc32-4761-960e-8280a7b4b574",
+ "fileName": "differentialUpdateInfoBuilder.ts",
+ "wiki": "For targets that do not embed the blockmap (e.g., standard NSIS installers), the `createBlockmap` function is used instead. It executes `app-builder blockmap` to generate a separate `.blockmap` file alongside the main installer artifact.",
+ "cellName": "Build: Create Standalone Blockmap File (Alternative) - differentialUpdateInfoBuilder.ts:L71-78",
+ "cellId": "371ccf87-8f70-439b-8538-2d3d6c216bfe",
+ "visible": true,
+ "startLine": 71,
+ "endLine": 78,
+ "parentCellId": "0850be83-b674-4749-a67c-98b7736d578c",
+ "parentPath": "packages/app-builder-lib/src/targets/differentialUpdateInfoBuilder.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Generate and apply differential (blockmap) updates to reduce download sizes.",
+ "simStepId": "4ea7d980-dc32-4761-960e-8280a7b4b574"
+ }
+ ]
+ },
+ "8c41f7f5-5ee5-482c-a696-ee03c709cafe": {
+ "path": "8c41f7f5-5ee5-482c-a696-ee03c709cafe",
+ "cellName": "Update: Fetch Blockmap URLs - AppUpdater.ts:L811-816",
+ "cellId": "8c41f7f5-5ee5-482c-a696-ee03c709cafe",
+ "visible": true,
+ "parentCellId": "ab16d105-df22-4acb-9ff7-d8abdcfb8d67"
+ },
+ "packages/electron-updater/src/AppUpdater.ts-simstep-b55b8474-d5dc-42ab-a0bc-74c99549ec1e": {
+ "path": "packages/electron-updater/src/AppUpdater.ts-simstep-b55b8474-d5dc-42ab-a0bc-74c99549ec1e",
+ "fileName": "AppUpdater.ts",
+ "wiki": "The updater determines the URLs for both the new version's blockmap and the old version's blockmap. It calls the update provider, which constructs the URLs based on the artifact's file name and version numbers.",
+ "cellName": "Update: Fetch Blockmap URLs - AppUpdater.ts:L811-816",
+ "cellId": "8c41f7f5-5ee5-482c-a696-ee03c709cafe",
+ "visible": true,
+ "startLine": 811,
+ "endLine": 816,
+ "parentCellId": "ab16d105-df22-4acb-9ff7-d8abdcfb8d67",
+ "parentPath": "packages/electron-updater/src/AppUpdater.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Generate and apply differential (blockmap) updates to reduce download sizes.",
+ "simStepId": "b55b8474-d5dc-42ab-a0bc-74c99549ec1e"
+ }
+ ]
+ },
+ "f669d111-adca-409b-b133-fb24351cfb69": {
+ "path": "f669d111-adca-409b-b133-fb24351cfb69",
+ "cellName": "Update: Initiate Differential Downloader - AppUpdater.ts:L877",
+ "cellId": "f669d111-adca-409b-b133-fb24351cfb69",
+ "visible": true,
+ "parentCellId": "ab16d105-df22-4acb-9ff7-d8abdcfb8d67"
+ },
+ "packages/electron-updater/src/AppUpdater.ts-simstep-5787a85b-1a5d-42f4-b854-fa7587b8fe52": {
+ "path": "packages/electron-updater/src/AppUpdater.ts-simstep-5787a85b-1a5d-42f4-b854-fa7587b8fe52",
+ "fileName": "AppUpdater.ts",
+ "wiki": "With both the old and new blockmap data available, a `GenericDifferentialDownloader` instance is created and its `download` method is called to begin comparing the blockmaps and downloading the differences.",
+ "cellName": "Update: Initiate Differential Downloader - AppUpdater.ts:L877",
+ "cellId": "f669d111-adca-409b-b133-fb24351cfb69",
+ "visible": true,
+ "startLine": 877,
+ "endLine": 877,
+ "parentCellId": "ab16d105-df22-4acb-9ff7-d8abdcfb8d67",
+ "parentPath": "packages/electron-updater/src/AppUpdater.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Generate and apply differential (blockmap) updates to reduce download sizes.",
+ "simStepId": "5787a85b-1a5d-42f4-b854-fa7587b8fe52"
+ }
+ ]
+ },
+ "45e46f31-b8f3-4c13-a82a-23ebddcfd2a5": {
+ "path": "45e46f31-b8f3-4c13-a82a-23ebddcfd2a5",
+ "cellName": "Update: Compute Download Plan - downloadPlanBuilder.ts:L19-89",
+ "cellId": "45e46f31-b8f3-4c13-a82a-23ebddcfd2a5",
+ "visible": true,
+ "parentCellId": "e5d82326-fe46-455c-911e-d9df10103132"
+ },
+ "packages/electron-updater/src/differentialDownloader/downloadPlanBuilder.ts-simstep-b485c578-5b03-457f-a0a8-81b36897cbec": {
+ "path": "packages/electron-updater/src/differentialDownloader/downloadPlanBuilder.ts-simstep-b485c578-5b03-457f-a0a8-81b36897cbec",
+ "fileName": "downloadPlanBuilder.ts",
+ "wiki": "The `computeOperations` function compares the checksums of the blocks from the old and new blockmaps. It generates a series of operations: `COPY` for blocks that are unchanged (and can be copied from the old local file) and `DOWNLOAD` for blocks that are new or modified.",
+ "cellName": "Update: Compute Download Plan - downloadPlanBuilder.ts:L19-89",
+ "cellId": "45e46f31-b8f3-4c13-a82a-23ebddcfd2a5",
+ "visible": true,
+ "startLine": 19,
+ "endLine": 89,
+ "parentCellId": "e5d82326-fe46-455c-911e-d9df10103132",
+ "parentPath": "packages/electron-updater/src/differentialDownloader/downloadPlanBuilder.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Generate and apply differential (blockmap) updates to reduce download sizes.",
+ "simStepId": "b485c578-5b03-457f-a0a8-81b36897cbec"
+ }
+ ]
+ },
+ "46160220-f24b-4a53-aba5-add01dfa0e49": {
+ "path": "46160220-f24b-4a53-aba5-add01dfa0e49",
+ "cellName": "Update: Execute Download Plan - multipleRangeDownloader.ts:L8-119",
+ "cellId": "46160220-f24b-4a53-aba5-add01dfa0e49",
+ "visible": true,
+ "parentCellId": "543156d6-0a81-4ba0-a747-724fd337239b"
+ },
+ "packages/electron-updater/src/differentialDownloader/multipleRangeDownloader.ts-simstep-4ea4d3ec-b303-433d-a39f-e8d124940302": {
+ "path": "packages/electron-updater/src/differentialDownloader/multipleRangeDownloader.ts-simstep-4ea4d3ec-b303-433d-a39f-e8d124940302",
+ "fileName": "multipleRangeDownloader.ts",
+ "wiki": "The `executeTasksUsingMultipleRangeRequests` function processes the operation list. For `DOWNLOAD` operations, it constructs HTTP requests with `Range` headers to download only the specific byte ranges required. For `COPY` operations, it reads the corresponding blocks from the old cached installer file. These pieces are then written in order to assemble the new file.",
+ "cellName": "Update: Execute Download Plan - multipleRangeDownloader.ts:L8-119",
+ "cellId": "46160220-f24b-4a53-aba5-add01dfa0e49",
+ "visible": true,
+ "startLine": 8,
+ "endLine": 119,
+ "parentCellId": "543156d6-0a81-4ba0-a747-724fd337239b",
+ "parentPath": "packages/electron-updater/src/differentialDownloader/multipleRangeDownloader.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Generate and apply differential (blockmap) updates to reduce download sizes.",
+ "simStepId": "4ea4d3ec-b303-433d-a39f-e8d124940302"
+ }
+ ]
+ },
+ "dd3f58a3-66d7-464a-98f1-a2897db7b71e": {
+ "path": "dd3f58a3-66d7-464a-98f1-a2897db7b71e",
+ "cellName": "Update: Cache New Blockmap - AppUpdater.ts:L749-753",
+ "cellId": "dd3f58a3-66d7-464a-98f1-a2897db7b71e",
+ "visible": true,
+ "parentCellId": "ab16d105-df22-4acb-9ff7-d8abdcfb8d67"
+ },
+ "packages/electron-updater/src/AppUpdater.ts-simstep-d311b182-c04d-47c3-95af-507dc23a943d": {
+ "path": "packages/electron-updater/src/AppUpdater.ts-simstep-d311b182-c04d-47c3-95af-507dc23a943d",
+ "fileName": "AppUpdater.ts",
+ "wiki": "After a successful differential download, the `AppUpdater` copies the newly downloaded blockmap file into the cache directory as `current.blockmap`. This ensures it can be used as the 'old' blockmap for the next subsequent differential update, preventing the need to re-download it.",
+ "cellName": "Update: Cache New Blockmap - AppUpdater.ts:L749-753",
+ "cellId": "dd3f58a3-66d7-464a-98f1-a2897db7b71e",
+ "visible": true,
+ "startLine": 749,
+ "endLine": 753,
+ "parentCellId": "ab16d105-df22-4acb-9ff7-d8abdcfb8d67",
+ "parentPath": "packages/electron-updater/src/AppUpdater.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Generate and apply differential (blockmap) updates to reduce download sizes.",
+ "simStepId": "d311b182-c04d-47c3-95af-507dc23a943d"
+ }
+ ]
+ },
+ "acb4fe96-2a4f-486e-858e-a48264459d0a": {
+ "path": "acb4fe96-2a4f-486e-858e-a48264459d0a",
+ "cellName": "Build: Pass\nArchive for\nBlockmap Creation",
+ "cellId": "acb4fe96-2a4f-486e-858e-a48264459d0a",
+ "visible": true,
+ "parentCellId": "6285f9fe-25dd-4f8d-8034-98284badf9e5"
+ },
+ "generated-edge-simstep-64d695b2-76c0-4395-a429-e972ea83b1ea-acb4fe96-2a4f-486e-858e-a48264459d0a": {
+ "path": "generated-edge-simstep-64d695b2-76c0-4395-a429-e972ea83b1ea-acb4fe96-2a4f-486e-858e-a48264459d0a",
+ "fileName": "NsisTarget.ts",
+ "cellName": "Build: Pass Archive for Blockmap Creation",
+ "cellId": "acb4fe96-2a4f-486e-858e-a48264459d0a",
+ "visible": true,
+ "startLine": 121,
+ "endLine": 121,
+ "parentPath": "packages/app-builder-lib/src/targets/nsis/NsisTarget.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Generate and apply differential (blockmap) updates to reduce download sizes.",
+ "simStepId": "64d695b2-76c0-4395-a429-e972ea83b1ea"
+ }
+ ]
+ },
+ "7910427f-6c29-4c98-9a3b-eb221a158522": {
+ "path": "7910427f-6c29-4c98-9a3b-eb221a158522",
+ "cellName": "Build: Return\nBlockmap Metadata",
+ "cellId": "7910427f-6c29-4c98-9a3b-eb221a158522",
+ "visible": true,
+ "parentCellId": "0850be83-b674-4749-a67c-98b7736d578c"
+ },
+ "generated-edge-simstep-37bfdf5a-4be2-4246-8060-92e5fefa4883-7910427f-6c29-4c98-9a3b-eb221a158522": {
+ "path": "generated-edge-simstep-37bfdf5a-4be2-4246-8060-92e5fefa4883-7910427f-6c29-4c98-9a3b-eb221a158522",
+ "fileName": "differentialUpdateInfoBuilder.ts",
+ "cellName": "Build: Return Blockmap Metadata",
+ "cellId": "7910427f-6c29-4c98-9a3b-eb221a158522",
+ "visible": true,
+ "startLine": 68,
+ "endLine": 68,
+ "parentPath": "packages/app-builder-lib/src/targets/differentialUpdateInfoBuilder.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Generate and apply differential (blockmap) updates to reduce download sizes.",
+ "simStepId": "37bfdf5a-4be2-4246-8060-92e5fefa4883"
+ }
+ ]
+ },
+ "7aeee163-7f35-4481-af78-afe997f2d97c": {
+ "path": "7aeee163-7f35-4481-af78-afe997f2d97c",
+ "cellName": "Update: Start\nDifferential Download",
+ "cellId": "7aeee163-7f35-4481-af78-afe997f2d97c",
+ "visible": true,
+ "parentCellId": "d5418ff7-b1a6-479c-a52b-e5f2e91b13fa"
+ },
+ "generated-edge-simstep-464282fa-182a-4ea7-a7f5-12c0ff6a92ba-7aeee163-7f35-4481-af78-afe997f2d97c": {
+ "path": "generated-edge-simstep-464282fa-182a-4ea7-a7f5-12c0ff6a92ba-7aeee163-7f35-4481-af78-afe997f2d97c",
+ "fileName": "differentialUpdateInfoBuilder.ts",
+ "cellName": "Update: Start Differential Download",
+ "cellId": "7aeee163-7f35-4481-af78-afe997f2d97c",
+ "visible": true,
+ "startLine": 800,
+ "endLine": 804,
+ "parentPath": "packages/app-builder-lib/src/targets/differentialUpdateInfoBuilder.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Generate and apply differential (blockmap) updates to reduce download sizes.",
+ "simStepId": "464282fa-182a-4ea7-a7f5-12c0ff6a92ba"
+ }
+ ]
+ },
+ "5ce4da31-ce3b-4faa-b8f7-d359d8f3a83a": {
+ "path": "5ce4da31-ce3b-4faa-b8f7-d359d8f3a83a",
+ "cellName": "Update: Download\nBlockmap Files",
+ "cellId": "5ce4da31-ce3b-4faa-b8f7-d359d8f3a83a",
+ "visible": true,
+ "parentCellId": "ab16d105-df22-4acb-9ff7-d8abdcfb8d67"
+ },
+ "generated-edge-simstep-7179d02e-af40-41d2-a61f-306d459dc742-5ce4da31-ce3b-4faa-b8f7-d359d8f3a83a": {
+ "path": "generated-edge-simstep-7179d02e-af40-41d2-a61f-306d459dc742-5ce4da31-ce3b-4faa-b8f7-d359d8f3a83a",
+ "fileName": "AppUpdater.ts",
+ "cellName": "Update: Download Blockmap Files",
+ "cellId": "5ce4da31-ce3b-4faa-b8f7-d359d8f3a83a",
+ "visible": true,
+ "startLine": 818,
+ "endLine": 832,
+ "parentPath": "packages/electron-updater/src/AppUpdater.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Generate and apply differential (blockmap) updates to reduce download sizes.",
+ "simStepId": "7179d02e-af40-41d2-a61f-306d459dc742"
+ }
+ ]
+ },
+ "e221f497-d04c-4564-894b-07273c80282b": {
+ "path": "e221f497-d04c-4564-894b-07273c80282b",
+ "cellName": "Update: Pass\nBlockmaps for\nPlan Computation",
+ "cellId": "e221f497-d04c-4564-894b-07273c80282b",
+ "visible": true,
+ "parentCellId": "68aede06-2d8b-46a7-8cbe-78f2aed3541e"
+ },
+ "generated-edge-simstep-6d01f25e-74b0-4f6e-81d7-f903844d7e5c-e221f497-d04c-4564-894b-07273c80282b": {
+ "path": "generated-edge-simstep-6d01f25e-74b0-4f6e-81d7-f903844d7e5c-e221f497-d04c-4564-894b-07273c80282b",
+ "fileName": "AppUpdater.ts",
+ "cellName": "Update: Pass Blockmaps for Plan Computation",
+ "cellId": "e221f497-d04c-4564-894b-07273c80282b",
+ "visible": true,
+ "startLine": 62,
+ "endLine": 62,
+ "parentPath": "packages/electron-updater/src/AppUpdater.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Generate and apply differential (blockmap) updates to reduce download sizes.",
+ "simStepId": "6d01f25e-74b0-4f6e-81d7-f903844d7e5c"
+ }
+ ]
+ },
+ "3abf101d-277d-42de-956b-456005a993f0": {
+ "path": "3abf101d-277d-42de-956b-456005a993f0",
+ "cellName": "Update: Transfer\nDownload Plan\nfor Execution",
+ "cellId": "3abf101d-277d-42de-956b-456005a993f0",
+ "visible": true,
+ "parentCellId": "961a4a5f-dbd2-4376-8149-5ed6d9501595"
+ },
+ "generated-edge-simstep-117f9460-0a60-4805-aa60-8bc8da9e3091-3abf101d-277d-42de-956b-456005a993f0": {
+ "path": "generated-edge-simstep-117f9460-0a60-4805-aa60-8bc8da9e3091-3abf101d-277d-42de-956b-456005a993f0",
+ "fileName": "downloadPlanBuilder.ts",
+ "cellName": "Update: Transfer Download Plan for Execution",
+ "cellId": "3abf101d-277d-42de-956b-456005a993f0",
+ "visible": true,
+ "startLine": 55,
+ "endLine": 55,
+ "parentPath": "packages/electron-updater/src/differentialDownloader/downloadPlanBuilder.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Generate and apply differential (blockmap) updates to reduce download sizes.",
+ "simStepId": "117f9460-0a60-4805-aa60-8bc8da9e3091"
+ }
+ ]
+ },
+ "714db195-252c-4625-ba8a-32071a62147c": {
+ "path": "714db195-252c-4625-ba8a-32071a62147c",
+ "cellName": "Update: Return\nPath of\nCompleted File",
+ "cellId": "714db195-252c-4625-ba8a-32071a62147c",
+ "visible": true,
+ "parentCellId": "68aede06-2d8b-46a7-8cbe-78f2aed3541e"
+ },
+ "generated-edge-simstep-98cef0bb-a14c-43fb-a881-c65c07b3d1ed-714db195-252c-4625-ba8a-32071a62147c": {
+ "path": "generated-edge-simstep-98cef0bb-a14c-43fb-a881-c65c07b3d1ed-714db195-252c-4625-ba8a-32071a62147c",
+ "fileName": "multipleRangeDownloader.ts",
+ "cellName": "Update: Return Path of Completed File",
+ "cellId": "714db195-252c-4625-ba8a-32071a62147c",
+ "visible": true,
+ "startLine": 796,
+ "endLine": 799,
+ "parentPath": "packages/electron-updater/src/differentialDownloader/multipleRangeDownloader.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Generate and apply differential (blockmap) updates to reduce download sizes.",
+ "simStepId": "98cef0bb-a14c-43fb-a881-c65c07b3d1ed"
+ }
+ ]
+ },
+ "0eb64763-d37f-47ee-940f-f78b3d443f15": {
+ "path": "0eb64763-d37f-47ee-940f-f78b3d443f15",
+ "cellName": "util",
+ "cellId": "0eb64763-d37f-47ee-940f-f78b3d443f15",
+ "visible": true,
+ "parentCellId": "982b473a-6412-45cf-90f3-295e887d683e"
+ },
+ "315d2b1f-34de-415f-99ed-3d126b0d7d93": {
+ "path": "315d2b1f-34de-415f-99ed-3d126b0d7d93",
+ "cellName": "config",
+ "cellId": "315d2b1f-34de-415f-99ed-3d126b0d7d93",
+ "visible": true,
+ "parentCellId": "0eb64763-d37f-47ee-940f-f78b3d443f15"
+ },
+ "c216db25-e131-436a-bd4a-3ef896778e38": {
+ "path": "c216db25-e131-436a-bd4a-3ef896778e38",
+ "cellName": "config.ts",
+ "cellId": "c216db25-e131-436a-bd4a-3ef896778e38",
+ "visible": true,
+ "parentCellId": "315d2b1f-34de-415f-99ed-3d126b0d7d93"
+ },
+ "f1529f11-210d-4930-aeca-8c83f7f256ad": {
+ "path": "f1529f11-210d-4930-aeca-8c83f7f256ad",
+ "cellName": "Initiate Build Configuration - packager.ts:L359-362",
+ "cellId": "f1529f11-210d-4930-aeca-8c83f7f256ad",
+ "visible": true,
+ "parentCellId": "a11025ce-9b7e-432d-b898-ecd76cbd1f32"
+ },
+ "packages/app-builder-lib/src/packager.ts-simstep-346d86d2-2683-4a96-b7e9-15d4ddf82a70": {
+ "path": "packages/app-builder-lib/src/packager.ts-simstep-346d86d2-2683-4a96-b7e9-15d4ddf82a70",
+ "fileName": "packager.ts",
+ "wiki": "The build process begins within the `Packager` class's `_init` method. This step prepares to load and consolidate the build configuration from all potential sources, including `package.json`, dedicated config files (e.g., `electron-builder.yml`), and command-line arguments.",
+ "cellName": "Initiate Build Configuration - packager.ts:L359-362",
+ "cellId": "f1529f11-210d-4930-aeca-8c83f7f256ad",
+ "visible": true,
+ "startLine": 359,
+ "endLine": 362,
+ "parentCellId": "a11025ce-9b7e-432d-b898-ecd76cbd1f32",
+ "parentPath": "packages/app-builder-lib/src/packager.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Manage the entire build process via a flexible configuration file.",
+ "simStepId": "346d86d2-2683-4a96-b7e9-15d4ddf82a70"
+ }
+ ]
+ },
+ "dadc5bd5-20ea-408d-84d6-c8a3ef9a94eb": {
+ "path": "dadc5bd5-20ea-408d-84d6-c8a3ef9a94eb",
+ "cellName": "Load and Merge Configuration Sources - config.ts:L36-54",
+ "cellId": "dadc5bd5-20ea-408d-84d6-c8a3ef9a94eb",
+ "visible": true,
+ "parentCellId": "c216db25-e131-436a-bd4a-3ef896778e38"
+ },
+ "packages/app-builder-lib/src/util/config/config.ts-simstep-ad4169c7-aac6-473f-84be-98864bc0cf60": {
+ "path": "packages/app-builder-lib/src/util/config/config.ts-simstep-ad4169c7-aac6-473f-84be-98864bc0cf60",
+ "fileName": "config.ts",
+ "wiki": "The `getConfig` function loads configuration from disk (e.g., the `build` key in `package.json` or an `electron-builder.yml` file). It recursively handles any parent configurations specified via the `extends` property and then merges them with the configuration provided via command-line options to produce a single, unified configuration object.",
+ "cellName": "Load and Merge Configuration Sources - config.ts:L36-54",
+ "cellId": "dadc5bd5-20ea-408d-84d6-c8a3ef9a94eb",
+ "visible": true,
+ "startLine": 36,
+ "endLine": 54,
+ "parentCellId": "c216db25-e131-436a-bd4a-3ef896778e38",
+ "parentPath": "packages/app-builder-lib/src/util/config/config.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Manage the entire build process via a flexible configuration file.",
+ "simStepId": "ad4169c7-aac6-473f-84be-98864bc0cf60"
+ }
+ ]
+ },
+ "58e81f0e-c509-4779-aad7-922abaaa3914": {
+ "path": "58e81f0e-c509-4779-aad7-922abaaa3914",
+ "cellName": "Validate Configuration Schema - config.ts:L217-259",
+ "cellId": "58e81f0e-c509-4779-aad7-922abaaa3914",
+ "visible": true,
+ "parentCellId": "c216db25-e131-436a-bd4a-3ef896778e38"
+ },
+ "packages/app-builder-lib/src/util/config/config.ts-simstep-123cce99-c309-431e-85b0-ce23fc556959": {
+ "path": "packages/app-builder-lib/src/util/config/config.ts-simstep-123cce99-c309-431e-85b0-ce23fc556959",
+ "fileName": "config.ts",
+ "wiki": "The `validateConfiguration` function is called to check the merged configuration against a predefined JSON schema (`scheme.json`). This step ensures that all options are valid, correctly typed, and not misspelled. If validation fails, an `InvalidConfigurationError` is thrown, halting the build process and informing the user of the error.",
+ "cellName": "Validate Configuration Schema - config.ts:L217-259",
+ "cellId": "58e81f0e-c509-4779-aad7-922abaaa3914",
+ "visible": true,
+ "startLine": 217,
+ "endLine": 259,
+ "parentCellId": "c216db25-e131-436a-bd4a-3ef896778e38",
+ "parentPath": "packages/app-builder-lib/src/util/config/config.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Manage the entire build process via a flexible configuration file.",
+ "simStepId": "123cce99-c309-431e-85b0-ce23fc556959"
+ }
+ ]
+ },
+ "40d32a04-2ac4-4d9e-8a2f-baff4bbe17ac": {
+ "path": "40d32a04-2ac4-4d9e-8a2f-baff4bbe17ac",
+ "cellName": "Finalize and Store Configuration - packager.ts:L392",
+ "cellId": "40d32a04-2ac4-4d9e-8a2f-baff4bbe17ac",
+ "visible": true,
+ "parentCellId": "a11025ce-9b7e-432d-b898-ecd76cbd1f32"
+ },
+ "packages/app-builder-lib/src/packager.ts-simstep-519355a1-7c7a-46ed-b106-f54dd725749f": {
+ "path": "packages/app-builder-lib/src/packager.ts-simstep-519355a1-7c7a-46ed-b106-f54dd725749f",
+ "fileName": "packager.ts",
+ "wiki": "The `Packager` receives the fully validated configuration and assigns it to an internal property (`this._configuration`). This object now serves as the single source of truth that will direct all subsequent packaging, building, and publishing steps.",
+ "cellName": "Finalize and Store Configuration - packager.ts:L392",
+ "cellId": "40d32a04-2ac4-4d9e-8a2f-baff4bbe17ac",
+ "visible": true,
+ "startLine": 392,
+ "endLine": 392,
+ "parentCellId": "a11025ce-9b7e-432d-b898-ecd76cbd1f32",
+ "parentPath": "packages/app-builder-lib/src/packager.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Manage the entire build process via a flexible configuration file.",
+ "simStepId": "519355a1-7c7a-46ed-b106-f54dd725749f"
+ }
+ ]
+ },
+ "366e94f1-af7b-41f0-a4d2-02f73c87e861": {
+ "path": "366e94f1-af7b-41f0-a4d2-02f73c87e861",
+ "cellName": "Request Configuration\nData",
+ "cellId": "366e94f1-af7b-41f0-a4d2-02f73c87e861",
+ "visible": true,
+ "parentCellId": "982b473a-6412-45cf-90f3-295e887d683e"
+ },
+ "generated-edge-simstep-649449fe-7787-42de-9a23-fc6baf2fd27f-366e94f1-af7b-41f0-a4d2-02f73c87e861": {
+ "path": "generated-edge-simstep-649449fe-7787-42de-9a23-fc6baf2fd27f-366e94f1-af7b-41f0-a4d2-02f73c87e861",
+ "fileName": "packager.ts",
+ "cellName": "Request Configuration Data",
+ "cellId": "366e94f1-af7b-41f0-a4d2-02f73c87e861",
+ "visible": true,
+ "startLine": 362,
+ "endLine": 362,
+ "parentPath": "packages/app-builder-lib/src/packager.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Manage the entire build process via a flexible configuration file.",
+ "simStepId": "649449fe-7787-42de-9a23-fc6baf2fd27f"
+ }
+ ]
+ },
+ "c27efe07-cf27-488d-9fca-0a181f53779c": {
+ "path": "c27efe07-cf27-488d-9fca-0a181f53779c",
+ "cellName": "Forward Merged\nConfiguration for\nValidation",
+ "cellId": "c27efe07-cf27-488d-9fca-0a181f53779c",
+ "visible": true,
+ "parentCellId": "c216db25-e131-436a-bd4a-3ef896778e38"
+ },
+ "generated-edge-simstep-75f15dc5-68b0-403c-bb25-59e5e6ae61ac-c27efe07-cf27-488d-9fca-0a181f53779c": {
+ "path": "generated-edge-simstep-75f15dc5-68b0-403c-bb25-59e5e6ae61ac-c27efe07-cf27-488d-9fca-0a181f53779c",
+ "fileName": "config.ts",
+ "cellName": "Forward Merged Configuration for Validation",
+ "cellId": "c27efe07-cf27-488d-9fca-0a181f53779c",
+ "visible": true,
+ "startLine": 362,
+ "endLine": 362,
+ "parentPath": "packages/app-builder-lib/src/util/config/config.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Manage the entire build process via a flexible configuration file.",
+ "simStepId": "75f15dc5-68b0-403c-bb25-59e5e6ae61ac"
+ }
+ ]
+ },
+ "ef83ad04-d1ae-416d-9c4d-39dbf72b07bc": {
+ "path": "ef83ad04-d1ae-416d-9c4d-39dbf72b07bc",
+ "cellName": "Return Validated\nConfiguration",
+ "cellId": "ef83ad04-d1ae-416d-9c4d-39dbf72b07bc",
+ "visible": true,
+ "parentCellId": "982b473a-6412-45cf-90f3-295e887d683e"
+ },
+ "generated-edge-simstep-eba11fa9-b470-43a7-a30d-a9a09acdcdb6-ef83ad04-d1ae-416d-9c4d-39dbf72b07bc": {
+ "path": "generated-edge-simstep-eba11fa9-b470-43a7-a30d-a9a09acdcdb6-ef83ad04-d1ae-416d-9c4d-39dbf72b07bc",
+ "fileName": "config.ts",
+ "cellName": "Return Validated Configuration",
+ "cellId": "ef83ad04-d1ae-416d-9c4d-39dbf72b07bc",
+ "visible": true,
+ "startLine": 390,
+ "endLine": 390,
+ "parentPath": "packages/app-builder-lib/src/util/config/config.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Manage the entire build process via a flexible configuration file.",
+ "simStepId": "eba11fa9-b470-43a7-a30d-a9a09acdcdb6"
+ }
+ ]
+ },
+ "ac2ca802-6c8a-4cff-815c-2901b6bcd7c9": {
+ "path": "ac2ca802-6c8a-4cff-815c-2901b6bcd7c9",
+ "cellName": "pages",
+ "cellId": "ac2ca802-6c8a-4cff-815c-2901b6bcd7c9",
+ "visible": true
+ },
+ "53d6212c-8fb2-410a-b890-ba030586a0fe": {
+ "path": "53d6212c-8fb2-410a-b890-ba030586a0fe",
+ "cellName": "multi-platform-build.md",
+ "cellId": "53d6212c-8fb2-410a-b890-ba030586a0fe",
+ "visible": true,
+ "parentCellId": "ac2ca802-6c8a-4cff-815c-2901b6bcd7c9"
+ },
+ "4c579761-1617-46fe-8a72-49578728b548": {
+ "path": "4c579761-1617-46fe-8a72-49578728b548",
+ "cellName": "builder-util",
+ "cellId": "4c579761-1617-46fe-8a72-49578728b548",
+ "visible": true,
+ "parentCellId": "d5418ff7-b1a6-479c-a52b-e5f2e91b13fa"
+ },
+ "f6003686-8db7-4713-8cb3-84b29dc88da5": {
+ "path": "f6003686-8db7-4713-8cb3-84b29dc88da5",
+ "cellName": "src",
+ "cellId": "f6003686-8db7-4713-8cb3-84b29dc88da5",
+ "visible": true,
+ "parentCellId": "4c579761-1617-46fe-8a72-49578728b548"
+ },
+ "4794a3d2-0469-4617-8dfa-e4e29f10efa5": {
+ "path": "4794a3d2-0469-4617-8dfa-e4e29f10efa5",
+ "cellName": "builder.ts",
+ "cellId": "4794a3d2-0469-4617-8dfa-e4e29f10efa5",
+ "visible": true,
+ "parentCellId": "e2e3b351-35eb-4f1b-b92d-671e45ebb9d2"
+ },
+ "d5ee7a07-bdbd-4a26-a5e4-405ed32c144d": {
+ "path": "d5ee7a07-bdbd-4a26-a5e4-405ed32c144d",
+ "cellName": "vm",
+ "cellId": "d5ee7a07-bdbd-4a26-a5e4-405ed32c144d",
+ "visible": true,
+ "parentCellId": "982b473a-6412-45cf-90f3-295e887d683e"
+ },
+ "b177908f-31cd-4327-9c7b-c28ab7c7446d": {
+ "path": "b177908f-31cd-4327-9c7b-c28ab7c7446d",
+ "cellName": "util.ts",
+ "cellId": "b177908f-31cd-4327-9c7b-c28ab7c7446d",
+ "visible": true,
+ "parentCellId": "f6003686-8db7-4713-8cb3-84b29dc88da5"
+ },
+ "dc6c11b5-5e97-4d58-8c38-baa4e65f884a": {
+ "path": "dc6c11b5-5e97-4d58-8c38-baa4e65f884a",
+ "cellName": "vm.ts",
+ "cellId": "dc6c11b5-5e97-4d58-8c38-baa4e65f884a",
+ "visible": true,
+ "parentCellId": "d5ee7a07-bdbd-4a26-a5e4-405ed32c144d"
+ },
+ "e1ed70af-7f97-405f-8ecd-cf6af46891fc": {
+ "path": "e1ed70af-7f97-405f-8ecd-cf6af46891fc",
+ "cellName": "WineVm.ts",
+ "cellId": "e1ed70af-7f97-405f-8ecd-cf6af46891fc",
+ "visible": true,
+ "parentCellId": "d5ee7a07-bdbd-4a26-a5e4-405ed32c144d"
+ },
+ "81b90a80-c03f-4aa8-ba03-317fa22fac46": {
+ "path": "81b90a80-c03f-4aa8-ba03-317fa22fac46",
+ "cellName": "MsiTarget.ts",
+ "cellId": "81b90a80-c03f-4aa8-ba03-317fa22fac46",
+ "visible": true,
+ "parentCellId": "6285f9fe-25dd-4f8d-8034-98284badf9e5"
+ },
+ "f622f8c1-0980-41bd-a9d5-90109b9efd97": {
+ "path": "f622f8c1-0980-41bd-a9d5-90109b9efd97",
+ "cellName": "User Initiates Build in Docker Container - multi-platform-build.md:L162-172",
+ "cellId": "f622f8c1-0980-41bd-a9d5-90109b9efd97",
+ "visible": true,
+ "parentCellId": "53d6212c-8fb2-410a-b890-ba030586a0fe"
+ },
+ "pages/multi-platform-build.md-simstep-217d27ce-874f-4f3f-bf25-18890c8d9517": {
+ "path": "pages/multi-platform-build.md-simstep-217d27ce-874f-4f3f-bf25-18890c8d9517",
+ "fileName": "multi-platform-build.md",
+ "wiki": "A developer on a non-Windows host (e.g., macOS/Linux) uses a Docker command to start a container with a pre-configured build environment (like `electronuserland/builder:wine`) and runs the build command inside it.",
+ "cellName": "User Initiates Build in Docker Container - multi-platform-build.md:L162-172",
+ "cellId": "f622f8c1-0980-41bd-a9d5-90109b9efd97",
+ "visible": true,
+ "startLine": 162,
+ "endLine": 172,
+ "parentCellId": "53d6212c-8fb2-410a-b890-ba030586a0fe",
+ "parentPath": "pages/multi-platform-build.md",
+ "simSteps": [
+ {
+ "simulationKey": "Build for any target platform (Windows, Linux) from any host OS using Docker.",
+ "simStepId": "217d27ce-874f-4f3f-bf25-18890c8d9517"
+ }
+ ]
+ },
+ "e1fe7eb2-de29-4d5a-a022-603bf2b6c508": {
+ "path": "e1fe7eb2-de29-4d5a-a022-603bf2b6c508",
+ "cellName": "WinPackager Selects VM Manager for Cross-Compilation - winPackager.ts:L31",
+ "cellId": "e1fe7eb2-de29-4d5a-a022-603bf2b6c508",
+ "visible": true,
+ "parentCellId": "04404c1a-e259-4e18-948a-2852349ec863"
+ },
+ "packages/app-builder-lib/src/winPackager.ts-simstep-e231944b-0774-43f9-9d86-562f7ee9cde9": {
+ "path": "packages/app-builder-lib/src/winPackager.ts-simstep-e231944b-0774-43f9-9d86-562f7ee9cde9",
+ "fileName": "winPackager.ts",
+ "wiki": "The `WinPackager` detects it's running on a non-Windows OS (Linux inside the Docker container). It lazily initializes a `VmManager` to handle the execution of Windows-specific tools. The `getWindowsVm` utility function is called to find a suitable environment like Wine.",
+ "cellName": "WinPackager Selects VM Manager for Cross-Compilation - winPackager.ts:L31",
+ "cellId": "e1fe7eb2-de29-4d5a-a022-603bf2b6c508",
+ "visible": true,
+ "startLine": 31,
+ "endLine": 31,
+ "parentCellId": "04404c1a-e259-4e18-948a-2852349ec863",
+ "parentPath": "packages/app-builder-lib/src/winPackager.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Build for any target platform (Windows, Linux) from any host OS using Docker.",
+ "simStepId": "e231944b-0774-43f9-9d86-562f7ee9cde9"
+ }
+ ]
+ },
+ "3c333efc-5417-4bd4-8a13-b2a5fb63d807": {
+ "path": "3c333efc-5417-4bd4-8a13-b2a5fb63d807",
+ "cellName": "Wine Environment Detected and `WineVmManager` Instantiated - MsiTarget.ts:L20",
+ "cellId": "3c333efc-5417-4bd4-8a13-b2a5fb63d807",
+ "visible": true,
+ "parentCellId": "81b90a80-c03f-4aa8-ba03-317fa22fac46"
+ },
+ "packages/app-builder-lib/src/targets/MsiTarget.ts-simstep-69918668-639b-4f01-aadf-00c01814fee8": {
+ "path": "packages/app-builder-lib/src/targets/MsiTarget.ts-simstep-69918668-639b-4f01-aadf-00c01814fee8",
+ "fileName": "MsiTarget.ts",
+ "wiki": "Since `wine` is available in the Docker container, it's chosen as the execution environment. For specific targets like MSI, the `MsiTarget` class directly instantiates `WineVmManager` to manage the execution of the WiX toolset via Wine.",
+ "cellName": "Wine Environment Detected and `WineVmManager` Instantiated - MsiTarget.ts:L20",
+ "cellId": "3c333efc-5417-4bd4-8a13-b2a5fb63d807",
+ "visible": true,
+ "startLine": 20,
+ "endLine": 20,
+ "parentCellId": "81b90a80-c03f-4aa8-ba03-317fa22fac46",
+ "parentPath": "packages/app-builder-lib/src/targets/MsiTarget.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Build for any target platform (Windows, Linux) from any host OS using Docker.",
+ "simStepId": "69918668-639b-4f01-aadf-00c01814fee8"
+ }
+ ]
+ },
+ "2e9057c9-f5aa-425b-8d7e-9c6857f37ff7": {
+ "path": "2e9057c9-f5aa-425b-8d7e-9c6857f37ff7",
+ "cellName": "Executing Windows Tool using Wine - WineVm.ts:L12-15",
+ "cellId": "2e9057c9-f5aa-425b-8d7e-9c6857f37ff7",
+ "visible": true,
+ "parentCellId": "e1ed70af-7f97-405f-8ecd-cf6af46891fc"
+ },
+ "packages/app-builder-lib/src/vm/WineVm.ts-simstep-af3018f7-2d3f-4e11-a3cd-49e2804312c6": {
+ "path": "packages/app-builder-lib/src/vm/WineVm.ts-simstep-af3018f7-2d3f-4e11-a3cd-49e2804312c6",
+ "fileName": "WineVm.ts",
+ "wiki": "`WineVmManager` delegates the execution to the `execWine` function. This function constructs the final command by prepending `wine` and its arguments and then executes it in a child process, effectively running the Windows tool on the Linux host within the container.",
+ "cellName": "Executing Windows Tool using Wine - WineVm.ts:L12-15",
+ "cellId": "2e9057c9-f5aa-425b-8d7e-9c6857f37ff7",
+ "visible": true,
+ "startLine": 12,
+ "endLine": 15,
+ "parentCellId": "e1ed70af-7f97-405f-8ecd-cf6af46891fc",
+ "parentPath": "packages/app-builder-lib/src/vm/WineVm.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Build for any target platform (Windows, Linux) from any host OS using Docker.",
+ "simStepId": "af3018f7-2d3f-4e11-a3cd-49e2804312c6"
+ }
+ ]
+ },
+ "bc648cdd-4d43-4139-b795-2ed09ccfc0cb": {
+ "path": "bc648cdd-4d43-4139-b795-2ed09ccfc0cb",
+ "cellName": "Final Artifact Generated in Shared Volume - NsisTarget.ts:L135-157",
+ "cellId": "bc648cdd-4d43-4139-b795-2ed09ccfc0cb",
+ "visible": true,
+ "parentCellId": "2c78fa58-8fb6-4f94-a2a4-a2263e70cfcf"
+ },
+ "packages/app-builder-lib/src/targets/nsis/NsisTarget.ts-simstep-3f1e5eeb-3ad0-4f9e-9eb1-68d60efe6153": {
+ "path": "packages/app-builder-lib/src/targets/nsis/NsisTarget.ts-simstep-3f1e5eeb-3ad0-4f9e-9eb1-68d60efe6153",
+ "fileName": "NsisTarget.ts",
+ "wiki": "After all necessary Windows-specific tools (like `rcedit`, `osslsigncode`, and `makensis`) have been executed via Wine, the final build artifact (e.g., an `.exe` installer) is assembled. Because the project directory is mounted as a Docker volume, the generated artifact is immediately available on the host machine's file system.",
+ "cellName": "Final Artifact Generated in Shared Volume - NsisTarget.ts:L135-157",
+ "cellId": "bc648cdd-4d43-4139-b795-2ed09ccfc0cb",
+ "visible": true,
+ "startLine": 135,
+ "endLine": 157,
+ "parentCellId": "2c78fa58-8fb6-4f94-a2a4-a2263e70cfcf",
+ "parentPath": "packages/app-builder-lib/src/targets/nsis/NsisTarget.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Build for any target platform (Windows, Linux) from any host OS using Docker.",
+ "simStepId": "3f1e5eeb-3ad0-4f9e-9eb1-68d60efe6153"
+ }
+ ]
+ },
+ "842a8051-19c8-45a8-a70b-fce9cc272d19": {
+ "path": "842a8051-19c8-45a8-a70b-fce9cc272d19",
+ "cellName": "Build Command\nDispatched",
+ "cellId": "842a8051-19c8-45a8-a70b-fce9cc272d19",
+ "visible": true
+ },
+ "generated-edge-simstep-6e3e83f7-6a52-40d0-bbd0-4c96e847a695-842a8051-19c8-45a8-a70b-fce9cc272d19": {
+ "path": "generated-edge-simstep-6e3e83f7-6a52-40d0-bbd0-4c96e847a695-842a8051-19c8-45a8-a70b-fce9cc272d19",
+ "fileName": "multi-platform-build.md",
+ "cellName": "Build Command Dispatched",
+ "cellId": "842a8051-19c8-45a8-a70b-fce9cc272d19",
+ "visible": true,
+ "startLine": 43,
+ "endLine": 65,
+ "parentPath": "pages/multi-platform-build.md",
+ "simSteps": [
+ {
+ "simulationKey": "Build for any target platform (Windows, Linux) from any host OS using Docker.",
+ "simStepId": "6e3e83f7-6a52-40d0-bbd0-4c96e847a695"
+ }
+ ]
+ },
+ "5a0ec9d1-2590-4d06-969f-16ae2b9316c6": {
+ "path": "5a0ec9d1-2590-4d06-969f-16ae2b9316c6",
+ "cellName": "Probing for\nAvailable VM\nEnvironments",
+ "cellId": "5a0ec9d1-2590-4d06-969f-16ae2b9316c6",
+ "visible": true,
+ "parentCellId": "982b473a-6412-45cf-90f3-295e887d683e"
+ },
+ "generated-edge-simstep-6d6a977d-78e7-4739-b867-bcfc40386efc-5a0ec9d1-2590-4d06-969f-16ae2b9316c6": {
+ "path": "generated-edge-simstep-6d6a977d-78e7-4739-b867-bcfc40386efc-5a0ec9d1-2590-4d06-969f-16ae2b9316c6",
+ "fileName": "winPackager.ts",
+ "cellName": "Probing for Available VM Environments",
+ "cellId": "5a0ec9d1-2590-4d06-969f-16ae2b9316c6",
+ "visible": true,
+ "startLine": 34,
+ "endLine": 52,
+ "parentPath": "packages/app-builder-lib/src/winPackager.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Build for any target platform (Windows, Linux) from any host OS using Docker.",
+ "simStepId": "6d6a977d-78e7-4739-b867-bcfc40386efc"
+ }
+ ]
+ },
+ "de47c536-8845-4625-9e9a-95021f34a150": {
+ "path": "de47c536-8845-4625-9e9a-95021f34a150",
+ "cellName": "Transmitting Windows\nTool Command\nto `WineVmManager`",
+ "cellId": "de47c536-8845-4625-9e9a-95021f34a150",
+ "visible": true,
+ "parentCellId": "982b473a-6412-45cf-90f3-295e887d683e"
+ },
+ "generated-edge-simstep-cc62fc8d-60bd-42b0-823c-fab44646d43b-de47c536-8845-4625-9e9a-95021f34a150": {
+ "path": "generated-edge-simstep-cc62fc8d-60bd-42b0-823c-fab44646d43b-de47c536-8845-4625-9e9a-95021f34a150",
+ "fileName": "MsiTarget.ts",
+ "cellName": "Transmitting Windows Tool Command to `WineVmManager`",
+ "cellId": "de47c536-8845-4625-9e9a-95021f34a150",
+ "visible": true,
+ "startLine": 207,
+ "endLine": 207,
+ "parentPath": "packages/app-builder-lib/src/targets/MsiTarget.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Build for any target platform (Windows, Linux) from any host OS using Docker.",
+ "simStepId": "cc62fc8d-60bd-42b0-823c-fab44646d43b"
+ }
+ ]
+ },
+ "2bb0eaa9-6e46-443d-8142-0a4e21d607b0": {
+ "path": "2bb0eaa9-6e46-443d-8142-0a4e21d607b0",
+ "cellName": "Returning Tool\nExecution Result",
+ "cellId": "2bb0eaa9-6e46-443d-8142-0a4e21d607b0",
+ "visible": true,
+ "parentCellId": "982b473a-6412-45cf-90f3-295e887d683e"
+ },
+ "generated-edge-simstep-0f9eba69-7f69-40d1-a824-6050d9b14616-2bb0eaa9-6e46-443d-8142-0a4e21d607b0": {
+ "path": "generated-edge-simstep-0f9eba69-7f69-40d1-a824-6050d9b14616-2bb0eaa9-6e46-443d-8142-0a4e21d607b0",
+ "fileName": "WineVm.ts",
+ "cellName": "Returning Tool Execution Result",
+ "cellId": "2bb0eaa9-6e46-443d-8142-0a4e21d607b0",
+ "visible": true,
+ "startLine": 123,
+ "endLine": 148,
+ "parentPath": "packages/app-builder-lib/src/vm/WineVm.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Build for any target platform (Windows, Linux) from any host OS using Docker.",
+ "simStepId": "0f9eba69-7f69-40d1-a824-6050d9b14616"
+ }
+ ]
+ },
+ "ca036926-48ee-4551-bbad-0ea2eb67dae1": {
+ "path": "ca036926-48ee-4551-bbad-0ea2eb67dae1",
+ "cellName": "yarn.ts",
+ "cellId": "ca036926-48ee-4551-bbad-0ea2eb67dae1",
+ "visible": true,
+ "parentCellId": "0eb64763-d37f-47ee-940f-f78b3d443f15"
+ },
+ "5b8dd99f-2760-4848-93ca-26e19be71cf1": {
+ "path": "5b8dd99f-2760-4848-93ca-26e19be71cf1",
+ "cellName": "Build Process Initialization - packager.ts:L80",
+ "cellId": "5b8dd99f-2760-4848-93ca-26e19be71cf1",
+ "visible": true,
+ "parentCellId": "a11025ce-9b7e-432d-b898-ecd76cbd1f32"
+ },
+ "packages/app-builder-lib/src/packager.ts-simstep-724e64ce-c2d5-4ead-b9dd-ce0e8aa55636": {
+ "path": "packages/app-builder-lib/src/packager.ts-simstep-724e64ce-c2d5-4ead-b9dd-ce0e8aa55636",
+ "fileName": "packager.ts",
+ "wiki": "The user initiates the application build process via the command line. Electron-builder's `Packager` class is instantiated, loading the build configuration from `package.json` or a config file. This configuration specifies that native modules should be rebuilt using `node-gyp` by setting `nodeGypRebuild` to `true`.",
+ "cellName": "Build Process Initialization - packager.ts:L80",
+ "cellId": "5b8dd99f-2760-4848-93ca-26e19be71cf1",
+ "visible": true,
+ "startLine": 80,
+ "endLine": 80,
+ "parentCellId": "a11025ce-9b7e-432d-b898-ecd76cbd1f32",
+ "parentPath": "packages/app-builder-lib/src/packager.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Automatically rebuild native Node.js modules against the correct Electron version.",
+ "simStepId": "724e64ce-c2d5-4ead-b9dd-ce0e8aa55636"
+ }
+ ]
+ },
+ "293941b3-97fd-46d3-91c4-219a31b08d2e": {
+ "path": "293941b3-97fd-46d3-91c4-219a31b08d2e",
+ "cellName": "Check Rebuild Configuration - packager.ts:L574-576",
+ "cellId": "293941b3-97fd-46d3-91c4-219a31b08d2e",
+ "visible": true,
+ "parentCellId": "a11025ce-9b7e-432d-b898-ecd76cbd1f32"
+ },
+ "packages/app-builder-lib/src/packager.ts-simstep-01f7f263-4b72-4d87-83ab-a7a08cbf2040": {
+ "path": "packages/app-builder-lib/src/packager.ts-simstep-01f7f263-4b72-4d87-83ab-a7a08cbf2040",
+ "fileName": "packager.ts",
+ "wiki": "During the packaging process, the builder checks the configuration to see if `nodeGypRebuild` is set to `true`. This flag instructs the builder to recompile any native Node.js modules. The default behavior is controlled by `npmRebuild`, which is `true` by default.",
+ "cellName": "Check Rebuild Configuration - packager.ts:L574-576",
+ "cellId": "293941b3-97fd-46d3-91c4-219a31b08d2e",
+ "visible": true,
+ "startLine": 574,
+ "endLine": 576,
+ "parentCellId": "a11025ce-9b7e-432d-b898-ecd76cbd1f32",
+ "parentPath": "packages/app-builder-lib/src/packager.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Automatically rebuild native Node.js modules against the correct Electron version.",
+ "simStepId": "01f7f263-4b72-4d87-83ab-a7a08cbf2040"
+ }
+ ]
+ },
+ "1968fa1d-36e1-4dab-bb94-046e8f6a1f17": {
+ "path": "1968fa1d-36e1-4dab-bb94-046e8f6a1f17",
+ "cellName": "Execute node-gyp Rebuild Command - yarn.ts:L113-129",
+ "cellId": "1968fa1d-36e1-4dab-bb94-046e8f6a1f17",
+ "visible": true,
+ "parentCellId": "ca036926-48ee-4551-bbad-0ea2eb67dae1"
+ },
+ "packages/app-builder-lib/src/util/yarn.ts-simstep-11fcae61-be38-4abd-989d-e789257d2e03": {
+ "path": "packages/app-builder-lib/src/util/yarn.ts-simstep-11fcae61-be38-4abd-989d-e789257d2e03",
+ "fileName": "yarn.ts",
+ "wiki": "The `nodeGypRebuild` function executes the `node-gyp rebuild` command. It sets up the necessary environment variables (`GYP_DEFINES`) so that `node-gyp` downloads the correct headers for the target Electron version and compiles the native modules against them.",
+ "cellName": "Execute node-gyp Rebuild Command - yarn.ts:L113-129",
+ "cellId": "1968fa1d-36e1-4dab-bb94-046e8f6a1f17",
+ "visible": true,
+ "startLine": 113,
+ "endLine": 129,
+ "parentCellId": "ca036926-48ee-4551-bbad-0ea2eb67dae1",
+ "parentPath": "packages/app-builder-lib/src/util/yarn.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Automatically rebuild native Node.js modules against the correct Electron version.",
+ "simStepId": "11fcae61-be38-4abd-989d-e789257d2e03"
+ }
+ ]
+ },
+ "c6b08084-5b40-4851-85d1-36771aa72864": {
+ "path": "c6b08084-5b40-4851-85d1-36771aa72864",
+ "cellName": "Configuration Transfer",
+ "cellId": "c6b08084-5b40-4851-85d1-36771aa72864",
+ "visible": true,
+ "parentCellId": "a11025ce-9b7e-432d-b898-ecd76cbd1f32"
+ },
+ "generated-edge-simstep-ca6b1a93-51f2-4438-acaa-c361ead109f9-c6b08084-5b40-4851-85d1-36771aa72864": {
+ "path": "generated-edge-simstep-ca6b1a93-51f2-4438-acaa-c361ead109f9-c6b08084-5b40-4851-85d1-36771aa72864",
+ "fileName": "packager.ts",
+ "cellName": "Configuration Transfer",
+ "cellId": "c6b08084-5b40-4851-85d1-36771aa72864",
+ "visible": true,
+ "startLine": 573,
+ "endLine": 573,
+ "parentPath": "packages/app-builder-lib/src/packager.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Automatically rebuild native Node.js modules against the correct Electron version.",
+ "simStepId": "ca6b1a93-51f2-4438-acaa-c361ead109f9"
+ }
+ ]
+ },
+ "868f1053-dacf-4fe7-97cf-84c2023c903b": {
+ "path": "868f1053-dacf-4fe7-97cf-84c2023c903b",
+ "cellName": "Invoke Native\nModule Rebuild",
+ "cellId": "868f1053-dacf-4fe7-97cf-84c2023c903b",
+ "visible": true,
+ "parentCellId": "982b473a-6412-45cf-90f3-295e887d683e"
+ },
+ "generated-edge-simstep-be13f802-049f-4c12-9948-87f5d07d9bb4-868f1053-dacf-4fe7-97cf-84c2023c903b": {
+ "path": "generated-edge-simstep-be13f802-049f-4c12-9948-87f5d07d9bb4-868f1053-dacf-4fe7-97cf-84c2023c903b",
+ "fileName": "packager.ts",
+ "cellName": "Invoke Native Module Rebuild",
+ "cellId": "868f1053-dacf-4fe7-97cf-84c2023c903b",
+ "visible": true,
+ "startLine": 575,
+ "endLine": 575,
+ "parentPath": "packages/app-builder-lib/src/packager.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Automatically rebuild native Node.js modules against the correct Electron version.",
+ "simStepId": "be13f802-049f-4c12-9948-87f5d07d9bb4"
+ }
+ ]
+ },
+ "ca25ebdf-8524-4d0f-8503-6a5f90e69b86": {
+ "path": "ca25ebdf-8524-4d0f-8503-6a5f90e69b86",
+ "cellName": "configuration.ts",
+ "cellId": "ca25ebdf-8524-4d0f-8503-6a5f90e69b86",
+ "visible": true,
+ "parentCellId": "982b473a-6412-45cf-90f3-295e887d683e"
+ },
+ "4986bc36-c623-406f-adbb-f8240d0d6dff": {
+ "path": "4986bc36-c623-406f-adbb-f8240d0d6dff",
+ "cellName": "Config: Define Build Hooks - configuration.ts:L293-328",
+ "cellId": "4986bc36-c623-406f-adbb-f8240d0d6dff",
+ "visible": true,
+ "parentCellId": "ca25ebdf-8524-4d0f-8503-6a5f90e69b86"
+ },
+ "packages/app-builder-lib/src/configuration.ts-simstep-17c81f38-7358-4164-bb3a-6bc15aea391f": {
+ "path": "packages/app-builder-lib/src/configuration.ts-simstep-17c81f38-7358-4164-bb3a-6bc15aea391f",
+ "fileName": "configuration.ts",
+ "wiki": "A developer specifies custom scripts or functions for various build lifecycle stages in the `electron-builder` configuration. These hooks, such as `beforePack`, `afterPack`, and `afterSign`, allow for injecting custom logic into the packaging process.",
+ "cellName": "Config: Define Build Hooks - configuration.ts:L293-328",
+ "cellId": "4986bc36-c623-406f-adbb-f8240d0d6dff",
+ "visible": true,
+ "startLine": 293,
+ "endLine": 328,
+ "parentCellId": "ca25ebdf-8524-4d0f-8503-6a5f90e69b86",
+ "parentPath": "packages/app-builder-lib/src/configuration.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Customize the build lifecycle with user-defined hooks.",
+ "simStepId": "17c81f38-7358-4164-bb3a-6bc15aea391f"
+ }
+ ]
+ },
+ "1ffe25f0-e13b-4bd6-b50f-18a070f87b15": {
+ "path": "1ffe25f0-e13b-4bd6-b50f-18a070f87b15",
+ "cellName": "Event Registration: Register Hooks - packager.ts:L273-276",
+ "cellId": "1ffe25f0-e13b-4bd6-b50f-18a070f87b15",
+ "visible": true,
+ "parentCellId": "a11025ce-9b7e-432d-b898-ecd76cbd1f32"
+ },
+ "packages/app-builder-lib/src/packager.ts-simstep-de69b967-e195-4697-8ba6-cc2939062c1b": {
+ "path": "packages/app-builder-lib/src/packager.ts-simstep-de69b967-e195-4697-8ba6-cc2939062c1b",
+ "fileName": "packager.ts",
+ "wiki": "The Packager resolves the hook paths from the configuration into executable functions and registers them as listeners on an internal event emitter. Each hook corresponds to a specific event in the build lifecycle.",
+ "cellName": "Event Registration: Register Hooks - packager.ts:L273-276",
+ "cellId": "1ffe25f0-e13b-4bd6-b50f-18a070f87b15",
+ "visible": true,
+ "startLine": 273,
+ "endLine": 276,
+ "parentCellId": "a11025ce-9b7e-432d-b898-ecd76cbd1f32",
+ "parentPath": "packages/app-builder-lib/src/packager.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Customize the build lifecycle with user-defined hooks.",
+ "simStepId": "de69b967-e195-4697-8ba6-cc2939062c1b"
+ }
+ ]
+ },
+ "b46fad74-5ff4-4571-b418-c7d2536bcce3": {
+ "path": "b46fad74-5ff4-4571-b418-c7d2536bcce3",
+ "cellName": "Lifecycle Hook: Trigger `beforePack` - packager.ts:L333-335",
+ "cellId": "b46fad74-5ff4-4571-b418-c7d2536bcce3",
+ "visible": true,
+ "parentCellId": "a11025ce-9b7e-432d-b898-ecd76cbd1f32"
+ },
+ "packages/app-builder-lib/src/packager.ts-simstep-71b031b2-a8cb-4b43-b306-5d49ea0d2c70": {
+ "path": "packages/app-builder-lib/src/packager.ts-simstep-71b031b2-a8cb-4b43-b306-5d49ea0d2c70",
+ "fileName": "packager.ts",
+ "wiki": "The `beforePack` event is emitted, triggering the user-defined hook. This allows the developer to perform custom actions on the source files before they are bundled into an ASAR archive or copied to the final app structure.",
+ "cellName": "Lifecycle Hook: Trigger `beforePack` - packager.ts:L333-335",
+ "cellId": "b46fad74-5ff4-4571-b418-c7d2536bcce3",
+ "visible": true,
+ "startLine": 333,
+ "endLine": 335,
+ "parentCellId": "a11025ce-9b7e-432d-b898-ecd76cbd1f32",
+ "parentPath": "packages/app-builder-lib/src/packager.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Customize the build lifecycle with user-defined hooks.",
+ "simStepId": "71b031b2-a8cb-4b43-b306-5d49ea0d2c70"
+ }
+ ]
+ },
+ "d94fab9d-a42f-4c51-a325-285d556164eb": {
+ "path": "d94fab9d-a42f-4c51-a325-285d556164eb",
+ "cellName": "Lifecycle Hook: Trigger `afterPack` - platformPackager.ts:L341",
+ "cellId": "d94fab9d-a42f-4c51-a325-285d556164eb",
+ "visible": true,
+ "parentCellId": "e5f7319d-ce48-4427-a671-7d3569ae78a3"
+ },
+ "packages/app-builder-lib/src/platformPackager.ts-simstep-c03732e0-42f1-4b10-a9fe-03b2c4627b11": {
+ "path": "packages/app-builder-lib/src/platformPackager.ts-simstep-c03732e0-42f1-4b10-a9fe-03b2c4627b11",
+ "fileName": "platformPackager.ts",
+ "wiki": "The `afterPack` event is emitted, executing the user's script. This is a common point to modify the contents of the packaged application, for example, by removing or adding files before code signing and creating the final distributable.",
+ "cellName": "Lifecycle Hook: Trigger `afterPack` - platformPackager.ts:L341",
+ "cellId": "d94fab9d-a42f-4c51-a325-285d556164eb",
+ "visible": true,
+ "startLine": 341,
+ "endLine": 341,
+ "parentCellId": "e5f7319d-ce48-4427-a671-7d3569ae78a3",
+ "parentPath": "packages/app-builder-lib/src/platformPackager.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Customize the build lifecycle with user-defined hooks.",
+ "simStepId": "c03732e0-42f1-4b10-a9fe-03b2c4627b11"
+ }
+ ]
+ },
+ "63f8931d-862c-492b-9df0-37f5ccdac0ce": {
+ "path": "63f8931d-862c-492b-9df0-37f5ccdac0ce",
+ "cellName": "Lifecycle Hook: Trigger `afterSign` - packager.ts:L337-339",
+ "cellId": "63f8931d-862c-492b-9df0-37f5ccdac0ce",
+ "visible": true,
+ "parentCellId": "a11025ce-9b7e-432d-b898-ecd76cbd1f32"
+ },
+ "packages/app-builder-lib/src/packager.ts-simstep-d425d6c7-ee61-4fba-9346-c190ce7e4f4d": {
+ "path": "packages/app-builder-lib/src/packager.ts-simstep-d425d6c7-ee61-4fba-9346-c190ce7e4f4d",
+ "fileName": "packager.ts",
+ "wiki": "The `afterSign` event is emitted. The corresponding user script is executed, providing an opportunity to perform actions after the application package has been signed, such as notarization on macOS or other verification steps.",
+ "cellName": "Lifecycle Hook: Trigger `afterSign` - packager.ts:L337-339",
+ "cellId": "63f8931d-862c-492b-9df0-37f5ccdac0ce",
+ "visible": true,
+ "startLine": 337,
+ "endLine": 339,
+ "parentCellId": "a11025ce-9b7e-432d-b898-ecd76cbd1f32",
+ "parentPath": "packages/app-builder-lib/src/packager.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Customize the build lifecycle with user-defined hooks.",
+ "simStepId": "d425d6c7-ee61-4fba-9346-c190ce7e4f4d"
+ }
+ ]
+ },
+ "a503a103-cf40-4e40-8cb5-4bba9a612a61": {
+ "path": "a503a103-cf40-4e40-8cb5-4bba9a612a61",
+ "cellName": "Data Flow:\nConfiguration to\nPackager",
+ "cellId": "a503a103-cf40-4e40-8cb5-4bba9a612a61",
+ "visible": true,
+ "parentCellId": "982b473a-6412-45cf-90f3-295e887d683e"
+ },
+ "generated-edge-simstep-62a8bc1e-e029-4899-98a6-8df9f141f8bc-a503a103-cf40-4e40-8cb5-4bba9a612a61": {
+ "path": "generated-edge-simstep-62a8bc1e-e029-4899-98a6-8df9f141f8bc-a503a103-cf40-4e40-8cb5-4bba9a612a61",
+ "fileName": "configuration.ts",
+ "cellName": "Data Flow: Configuration to Packager",
+ "cellId": "a503a103-cf40-4e40-8cb5-4bba9a612a61",
+ "visible": true,
+ "startLine": 360,
+ "endLine": 366,
+ "parentPath": "packages/app-builder-lib/src/configuration.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Customize the build lifecycle with user-defined hooks.",
+ "simStepId": "62a8bc1e-e029-4899-98a6-8df9f141f8bc"
+ }
+ ]
+ },
+ "5a127ce2-5190-4486-9a2e-0e5233d98390": {
+ "path": "5a127ce2-5190-4486-9a2e-0e5233d98390",
+ "cellName": "Data Flow:\nBeforePack Context\nCreation",
+ "cellId": "5a127ce2-5190-4486-9a2e-0e5233d98390",
+ "visible": true,
+ "parentCellId": "a11025ce-9b7e-432d-b898-ecd76cbd1f32"
+ },
+ "generated-edge-simstep-c2623ec4-a837-49aa-b3ba-9bb3a343496b-5a127ce2-5190-4486-9a2e-0e5233d98390": {
+ "path": "generated-edge-simstep-c2623ec4-a837-49aa-b3ba-9bb3a343496b-5a127ce2-5190-4486-9a2e-0e5233d98390",
+ "fileName": "packager.ts",
+ "cellName": "Data Flow: BeforePack Context Creation",
+ "cellId": "5a127ce2-5190-4486-9a2e-0e5233d98390",
+ "visible": true,
+ "startLine": 288,
+ "endLine": 295,
+ "parentPath": "packages/app-builder-lib/src/packager.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Customize the build lifecycle with user-defined hooks.",
+ "simStepId": "c2623ec4-a837-49aa-b3ba-9bb3a343496b"
+ }
+ ]
+ },
+ "e2c928ac-7e66-42bf-b994-e439001e30b5": {
+ "path": "e2c928ac-7e66-42bf-b994-e439001e30b5",
+ "cellName": "Data Flow:\nAfterPack Context\nTransmission",
+ "cellId": "e2c928ac-7e66-42bf-b994-e439001e30b5",
+ "visible": true,
+ "parentCellId": "982b473a-6412-45cf-90f3-295e887d683e"
+ },
+ "generated-edge-simstep-2fcf3eb6-dab0-4ad8-83eb-e2da3c97fefc-e2c928ac-7e66-42bf-b994-e439001e30b5": {
+ "path": "generated-edge-simstep-2fcf3eb6-dab0-4ad8-83eb-e2da3c97fefc-e2c928ac-7e66-42bf-b994-e439001e30b5",
+ "fileName": "packager.ts",
+ "cellName": "Data Flow: AfterPack Context Transmission",
+ "cellId": "e2c928ac-7e66-42bf-b994-e439001e30b5",
+ "visible": true,
+ "startLine": 288,
+ "endLine": 295,
+ "parentPath": "packages/app-builder-lib/src/packager.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Customize the build lifecycle with user-defined hooks.",
+ "simStepId": "2fcf3eb6-dab0-4ad8-83eb-e2da3c97fefc"
+ }
+ ]
+ },
+ "a5a16231-984f-440c-80b4-dd87f0bcf391": {
+ "path": "a5a16231-984f-440c-80b4-dd87f0bcf391",
+ "cellName": "Data Flow:\nPost-Signing Context\nTransmission",
+ "cellId": "a5a16231-984f-440c-80b4-dd87f0bcf391",
+ "visible": true,
+ "parentCellId": "982b473a-6412-45cf-90f3-295e887d683e"
+ },
+ "generated-edge-simstep-b42f4566-68d0-4a13-ab40-948791f9feb5-a5a16231-984f-440c-80b4-dd87f0bcf391": {
+ "path": "generated-edge-simstep-b42f4566-68d0-4a13-ab40-948791f9feb5-a5a16231-984f-440c-80b4-dd87f0bcf391",
+ "fileName": "platformPackager.ts",
+ "cellName": "Data Flow: Post-Signing Context Transmission",
+ "cellId": "a5a16231-984f-440c-80b4-dd87f0bcf391",
+ "visible": true,
+ "startLine": 437,
+ "endLine": 440,
+ "parentPath": "packages/app-builder-lib/src/platformPackager.ts",
+ "simSteps": [
+ {
+ "simulationKey": "Customize the build lifecycle with user-defined hooks.",
+ "simStepId": "b42f4566-68d0-4a13-ab40-948791f9feb5"
+ }
+ ]
+ }
+ },
+ "simulations": {
+ "Build and package Electron apps into distributable formats for macOS, Windows, and Linux.": {
+ "name": "Build and package Electron apps into distributable formats for macOS, Windows, and Linux.",
+ "simSteps": [
+ {
+ "simStepId": "37c61fda-3ac3-48c6-ac1b-2d3d16a1ba50",
+ "diagramNodeId": "2557e9f0-0617-4e2b-84a0-bc0182ab76b9",
+ "simStepLabel": "Build Initiation",
+ "simStepDescription": "The build process is initiated by calling the top-level `build` function. This function initializes the main `Packager` instance, which orchestrates the entire build, and a `PublishManager` to handle artifact uploads and release management.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/electron-builder/src/index.ts",
+ "startLine": "86",
+ "endLine": "97",
+ "relevantVariables": [
+ "build",
+ "Packager",
+ "PublishManager"
+ ]
+ },
+ "inputDataExample": "{\"options\": {\"targets\": {\"win\": {\"target\": [\"nsis\"], \"arch\": [\"x64\"]}}, \"config\": {\"appId\": \"com.example.myapp\", \"productName\": \"MyApp\"}}}",
+ "outputDataExample": "{\"buildResultPromise\": \"Promise>\"}"
+ },
+ {
+ "simStepId": "702d6e11-c8aa-4e1e-af83-f2b235f3c4f8",
+ "diagramNodeId": "85d2b0a5-983c-406e-8c8a-d4a661aab363",
+ "simStepLabel": "Invoking Packager",
+ "simStepDescription": "The build options are passed from the main `build` function to the `Packager` instance's `build` method to start the packaging process.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/electron-builder/src/index.ts",
+ "startLine": "92",
+ "endLine": "92",
+ "relevantVariables": [
+ "packager.build()"
+ ]
+ },
+ "inputDataExample": "{\"packager\": \"\", \"options\": {\"targets\": {\"win\": {\"target\": [\"nsis\"], \"arch\": [\"x64\"]}}, \"config\": {\"appId\": \"com.example.myapp\", \"productName\": \"MyApp\"}}}",
+ "outputDataExample": "{\"packager\": \"\", \"options\": {\"targets\": {\"win\": {\"target\": [\"nsis\"], \"arch\": [\"x64\"]}}, \"config\": {\"appId\": \"com.example.myapp\", \"productName\": \"MyApp\"}}}"
+ },
+ {
+ "simStepId": "74e73870-fc93-4b72-a2fb-047f42786fb8",
+ "diagramNodeId": "705abe8c-1ac1-4649-bb74-24a448b4dfba",
+ "simStepLabel": "Main Build Orchestration",
+ "simStepDescription": "The `Packager.build` method orchestrates the entire process. It identifies the target platforms and architectures, creates platform-specific packagers (e.g., `WinPackager`), and then calls `createTargets` to instantiate the builders for each specified format (e.g., NSIS, DMG).",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/app-builder-lib/src/packager.ts",
+ "startLine": "476",
+ "endLine": "509",
+ "relevantVariables": [
+ "this.createHelper",
+ "computeArchToTargetNamesMap",
+ "createTargets",
+ "packager.pack"
+ ]
+ },
+ "inputDataExample": "null",
+ "outputDataExample": "{\"buildResult\": {\"outDir\": \"/path/to/project/dist\", \"platformToTargets\": {\"win\": {\"nsis\": \"\"}}}}"
+ },
+ {
+ "simStepId": "a63d8e43-c4d4-424c-bb20-dde919b22a5c",
+ "diagramNodeId": "999dcb27-f18c-45e1-9222-cf828446818c",
+ "simStepLabel": "Dispatching to Platform Packager",
+ "simStepDescription": "The central `Packager` dispatches the packaging task to a platform-specific packager (e.g., `WinPackager`) by invoking its `pack` method, passing along the output directory, architecture, and the list of targets to be built.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/app-builder-lib/src/packager.ts",
+ "startLine": "503",
+ "endLine": "503",
+ "relevantVariables": [
+ "packager.pack"
+ ]
+ },
+ "inputDataExample": "{\"outDir\": \"/path/to/project/dist\", \"arch\": \"x64\", \"targets\": [\"\"]}",
+ "outputDataExample": "{\"outDir\": \"/path/to/project/dist\", \"arch\": \"x64\", \"targets\": [\"\"]}"
+ },
+ {
+ "simStepId": "6f93e673-993e-4d8c-86fd-3d1a86dc70e9",
+ "diagramNodeId": "54abc9cf-725a-4fa4-8542-7bd2d55bfd23",
+ "simStepLabel": "Application Staging",
+ "simStepDescription": "The `PlatformPackager.doPack` method prepares the application for packaging. This involves downloading and unpacking the correct Electron version, copying the application's source files, installing production dependencies, and bundling the app's source code into an `app.asar` archive.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/app-builder-lib/src/platformPackager.ts",
+ "startLine": "252",
+ "endLine": "272",
+ "relevantVariables": [
+ "framework.prepareApplicationStageDirectory",
+ "this.info.installAppDependencies",
+ "copyAppFiles",
+ "this.info.afterPack"
+ ]
+ },
+ "inputDataExample": "{\"packOptions\": {\"outDir\": \"/path/to/project/dist\", \"arch\": \"x64\", \"targets\": [\"\"]}}",
+ "outputDataExample": "{\"appOutDir\": \"/path/to/project/dist/win-unpacked\"}"
+ },
+ {
+ "simStepId": "14d6b2f2-9e48-462a-a88c-de3a0bbc3341",
+ "diagramNodeId": "8d5a2659-6d65-4733-9e82-486a55b88da4",
+ "simStepLabel": "Passing Staged App to Target Builders",
+ "simStepDescription": "After the application is fully staged in a directory (containing the Electron runtime and the `app.asar` file), this directory path is passed to the `packageInDistributableFormat` method, which will invoke the specific target builders.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/app-builder-lib/src/platformPackager.ts",
+ "startLine": "342",
+ "endLine": "342",
+ "relevantVariables": [
+ "this.packageInDistributableFormat"
+ ]
+ },
+ "inputDataExample": "{\"appOutDir\": \"/path/to/project/dist/win-unpacked\", \"arch\": \"x64\", \"targets\": [\"\"]}",
+ "outputDataExample": "{\"appOutDir\": \"/path/to/project/dist/win-unpacked\", \"arch\": \"x64\", \"targets\": [\"\"]}"
+ },
+ {
+ "simStepId": "616cbbb4-dc8b-4538-a6c9-45caa1aeac6f",
+ "diagramNodeId": "992f3600-6b95-433c-b47f-8d8b849b3e16",
+ "simStepLabel": "Creating Distributable Package (NSIS Example)",
+ "simStepDescription": "A specific target builder, such as `NsisTarget`, takes the staged application directory and creates the final distributable. For NSIS, this involves generating a `.nsi` script with all the necessary configurations (icons, licenses, shortcuts), compiling it with `makensis.exe`, signing the output installer, and optionally creating differential update info.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/app-builder-lib/src/targets/nsis/NsisTarget.ts",
+ "startLine": "358",
+ "endLine": "393",
+ "relevantVariables": [
+ "this.executeMakensis",
+ "packager.sign",
+ "createBlockmap",
+ "packager.info.emitArtifactBuildCompleted"
+ ]
+ },
+ "inputDataExample": "{\"appOutDir\": \"/path/to/project/dist/win-unpacked\", \"arch\": \"x64\"}",
+ "outputDataExample": "{\"artifactPath\": \"/path/to/project/dist/MyApp Setup 1.0.0.exe\"}"
+ },
+ {
+ "simStepId": "b376a2a9-8f4f-4578-a752-59ad5fc8a6a7",
+ "diagramNodeId": "13048108-491b-4a4e-818e-3de71a5823b5",
+ "simStepLabel": "Artifact Created Event",
+ "simStepDescription": "Once a distributable file is created, the target builder emits an `artifactBuildCompleted` event. This event signals that a new artifact is ready and includes all relevant metadata, such as its path, target type, and update information.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/app-builder-lib/src/targets/nsis/NsisTarget.ts",
+ "startLine": "377",
+ "endLine": "389",
+ "relevantVariables": [
+ "packager.info.emitArtifactBuildCompleted"
+ ]
+ },
+ "inputDataExample": "{\"file\": \"/path/to/project/dist/MyApp Setup 1.0.0.exe\", \"target\": \"\", \"arch\": \"x64\", \"packager\": \"\"}",
+ "outputDataExample": "{\"file\": \"/path/to/project/dist/MyApp Setup 1.0.0.exe\", \"target\": \"\", \"arch\": \"x64\", \"packager\": \"\"}"
+ },
+ {
+ "simStepId": "44835141-b351-4eb4-a88f-06557b593f98",
+ "diagramNodeId": "2fbac7c8-0210-4aef-b507-907d1cd6e882",
+ "simStepLabel": "Handling Artifacts and Publishing",
+ "simStepDescription": "The `PublishManager` listens for `artifactCreated` events. Upon receiving one, it checks the build configuration for publishing details. If configured, it schedules the artifact for upload to the specified provider (e.g., GitHub, S3). It also initiates the process of creating auto-update metadata files.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/app-builder-lib/src/publish/PublishManager.ts",
+ "startLine": "135",
+ "endLine": "144",
+ "relevantVariables": [
+ "packager.onArtifactCreated",
+ "this.scheduleUpload",
+ "createUpdateInfoTasks"
+ ]
+ },
+ "inputDataExample": "{\"event\": {\"file\": \"/path/to/project/dist/MyApp-1.0.0.exe\", \"publishConfig\": {\"provider\": \"github\"}}}",
+ "outputDataExample": "null"
+ },
+ {
+ "simStepId": "40fa827b-4dcb-4b93-88d7-3050399d9434",
+ "diagramNodeId": "c694f719-f97f-48f2-afb5-06c77fbe1961",
+ "simStepLabel": "Requesting Update Info Generation",
+ "simStepDescription": "The `PublishManager` calls `createUpdateInfoTasks` with the `ArtifactCreated` event data to generate the necessary metadata files for the auto-update feature.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/app-builder-lib/src/publish/PublishManager.ts",
+ "startLine": "219",
+ "endLine": "219",
+ "relevantVariables": [
+ "createUpdateInfoTasks"
+ ]
+ },
+ "inputDataExample": "{\"event\": {\"file\": \"/path/to/dist/MyApp-1.0.0.exe\", \"packager\": \"\", \"arch\": \"x64\", \"publishConfig\": {\"provider\": \"github\"}}}",
+ "outputDataExample": "{\"event\": {\"file\": \"/path/to/dist/MyApp-1.0.0.exe\", \"packager\": \"\", \"arch\": \"x64\", \"publishConfig\": {\"provider\": \"github\"}}}"
+ },
+ {
+ "simStepId": "5363a185-f79a-4ffb-aa2d-0310373ec057",
+ "diagramNodeId": "96eb9f2f-8b1b-4c41-99fa-867c620cd1a3",
+ "simStepLabel": "Generating Auto-Update Metadata",
+ "simStepDescription": "The `createUpdateInfoTasks` function generates the data for auto-update files (e.g., `latest.yml`). It resolves the final publishing configuration, calculates file hashes (SHA-512), and assembles an `UpdateInfo` object that `electron-updater` can consume to check for new versions.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/app-builder-lib/src/publish/updateInfoBuilder.ts",
+ "startLine": "91",
+ "endLine": "129",
+ "relevantVariables": [
+ "createUpdateInfoTasks",
+ "getPublishConfigsForUpdateInfo",
+ "createUpdateInfo",
+ "computeChannelNames"
+ ]
+ },
+ "inputDataExample": "{\"event\": {\"file\": \"/path/to/dist/MyApp-1.0.0.exe\", \"packager\": \"\", \"arch\": \"x64\"}}",
+ "outputDataExample": "[{\"file\": \"/path/to/dist/latest.yml\", \"info\": {\"version\": \"1.0.0\", \"files\": [{\"url\": \"MyApp-1.0.0.exe\", \"sha512\": \"...\"}], \"path\": \"MyApp-1.0.0.exe\"}}]"
+ },
+ {
+ "simStepId": "01ec3ea7-6fee-4c31-9bfc-e6b32c3f414b",
+ "diagramNodeId": "bc893a4e-3dff-49db-a75d-53e8dbe96686",
+ "simStepLabel": "Transmitting Update Tasks",
+ "simStepDescription": "The `UpdateInfoFileTask` objects, containing the structured update data and the destination path for each file (e.g., `latest.yml`), are returned to the `PublishManager` for writing and publishing.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/app-builder-lib/src/publish/updateInfoBuilder.ts",
+ "startLine": "166",
+ "endLine": "166",
+ "relevantVariables": [
+ "tasks"
+ ]
+ },
+ "inputDataExample": "[{\"file\": \"/path/to/dist/latest.yml\", \"info\": {\"version\": \"1.0.0\", \"files\": [{\"url\": \"MyApp-1.0.0.exe\", \"sha512\": \"...\"}]}}]",
+ "outputDataExample": "[{\"file\": \"/path/to/dist/latest.yml\", \"info\": {\"version\": \"1.0.0\", \"files\": [{\"url\": \"MyApp-1.0.0.exe\", \"sha512\": \"...\"}]}}]"
+ },
+ {
+ "simStepId": "56c1408f-4203-4d94-a7eb-0753aabca35f",
+ "diagramNodeId": "0e901318-3bc4-41a6-bfed-96b043833417",
+ "simStepLabel": "Finalizing Build",
+ "simStepDescription": "The `PublishManager`'s `awaitTasks` method is called to conclude the process. It writes the generated update metadata files to the output directory and waits for all pending artifact upload tasks to complete successfully.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/app-builder-lib/src/publish/PublishManager.ts",
+ "startLine": "248",
+ "endLine": "255",
+ "relevantVariables": [
+ "awaitTasks",
+ "writeUpdateInfoFiles",
+ "this.taskManager.awaitTasks"
+ ]
+ },
+ "inputDataExample": "{\"updateFileWriteTask\": [{\"file\": \"/path/to/dist/latest.yml\", \"info\": \"...\"}]}",
+ "outputDataExample": "null"
+ }
+ ],
+ "description": "- The core functionality of electron-builder is to take an Electron application's source code and package it into platform-specific distributable formats
- It handles the complexities of creating application bundles and installers for different operating systems
- - It abstracts platform differences, allowing a single configuration to produce builds for Windows (NSIS, MSI), macOS (DMG, PKG), and Linux (AppImage, deb, rpm, snap)
- - The process involves collecting application files, creating an ASAR archive, and bundling the Electron runtime
- - Key files for this are
packages/app-builder-lib/src/packager - ts and the platform-specific
winPackager - ts,
macPackager - ts, and
linuxPackager - ts
",
+ "simulationNodesAndEdges": {
+ "2557e9f0-0617-4e2b-84a0-bc0182ab76b9": {
+ "simStepIds": [
+ "37c61fda-3ac3-48c6-ac1b-2d3d16a1ba50"
+ ]
+ },
+ "705abe8c-1ac1-4649-bb74-24a448b4dfba": {
+ "simStepIds": [
+ "74e73870-fc93-4b72-a2fb-047f42786fb8"
+ ]
+ },
+ "54abc9cf-725a-4fa4-8542-7bd2d55bfd23": {
+ "simStepIds": [
+ "6f93e673-993e-4d8c-86fd-3d1a86dc70e9"
+ ]
+ },
+ "992f3600-6b95-433c-b47f-8d8b849b3e16": {
+ "simStepIds": [
+ "616cbbb4-dc8b-4538-a6c9-45caa1aeac6f"
+ ]
+ },
+ "2fbac7c8-0210-4aef-b507-907d1cd6e882": {
+ "simStepIds": [
+ "44835141-b351-4eb4-a88f-06557b593f98"
+ ]
+ },
+ "96eb9f2f-8b1b-4c41-99fa-867c620cd1a3": {
+ "simStepIds": [
+ "5363a185-f79a-4ffb-aa2d-0310373ec057"
+ ]
+ },
+ "0e901318-3bc4-41a6-bfed-96b043833417": {
+ "simStepIds": [
+ "56c1408f-4203-4d94-a7eb-0753aabca35f"
+ ]
+ },
+ "85d2b0a5-983c-406e-8c8a-d4a661aab363": {
+ "simStepIds": [
+ "702d6e11-c8aa-4e1e-af83-f2b235f3c4f8"
+ ]
+ },
+ "999dcb27-f18c-45e1-9222-cf828446818c": {
+ "simStepIds": [
+ "a63d8e43-c4d4-424c-bb20-dde919b22a5c"
+ ]
+ },
+ "8d5a2659-6d65-4733-9e82-486a55b88da4": {
+ "simStepIds": [
+ "14d6b2f2-9e48-462a-a88c-de3a0bbc3341"
+ ]
+ },
+ "13048108-491b-4a4e-818e-3de71a5823b5": {
+ "simStepIds": [
+ "b376a2a9-8f4f-4578-a752-59ad5fc8a6a7"
+ ]
+ },
+ "c694f719-f97f-48f2-afb5-06c77fbe1961": {
+ "simStepIds": [
+ "40fa827b-4dcb-4b93-88d7-3050399d9434"
+ ]
+ },
+ "bc893a4e-3dff-49db-a75d-53e8dbe96686": {
+ "simStepIds": [
+ "01ec3ea7-6fee-4c31-9bfc-e6b32c3f414b"
+ ]
+ }
+ },
+ "isAIGenerated": true,
+ "keywords": "PlatformPackager, Packager, createTargets",
+ "generationPrompt": "Build and package Electron apps into distributable formats for macOS, Windows, and Linux.",
+ "generationKeywords": "PlatformPackager, Packager, createTargets"
+ },
+ "Provide out-of-the-box auto-update capabilities for applications.": {
+ "name": "Provide out-of-the-box auto-update capabilities for applications.",
+ "simSteps": [
+ {
+ "simStepId": "74d951fa-b26b-4419-9820-2610d732a2cb",
+ "diagramNodeId": "1e9daf90-8f5b-44ec-a967-99c383ad32b9",
+ "simStepLabel": "AutoUpdater Initialization",
+ "simStepDescription": "When the application starts, it imports `electron-updater`. This automatically creates a platform-specific `AppUpdater` instance (e.g., `NsisUpdater` for Windows, `MacUpdater` for macOS) and assigns it to the `autoUpdater` export. This instance is pre-configured to handle updates for the specific platform.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/electron-updater/src/main.ts",
+ "startLine": "23",
+ "endLine": "28",
+ "relevantVariables": [
+ "_autoUpdater",
+ "doLoadAutoUpdater"
+ ]
+ },
+ "inputDataExample": "{}",
+ "outputDataExample": "{\"autoUpdater\": {\"constructor\": \"NsisUpdater\", \"autoDownload\": true, \"autoInstallOnAppQuit\": true}}"
+ },
+ {
+ "simStepId": "1e5474c6-6a14-4255-a3e8-70f28a8d19be",
+ "diagramNodeId": "8f49e2dc-7c02-49ca-a46f-4a6aec595b5d",
+ "simStepLabel": "API Call: Initiate Update Check",
+ "simStepDescription": "The application's main process code calls `autoUpdater.checkForUpdates()` to begin the update process. This is typically done on application startup or triggered by a user action (e.g., clicking a 'Check for Updates' menu item).",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "test/fixtures/test-app/app/index.js",
+ "startLine": "69",
+ "endLine": "69",
+ "relevantVariables": [
+ "autoUpdater.checkForUpdates"
+ ]
+ },
+ "inputDataExample": "{}",
+ "outputDataExample": "{}"
+ },
+ {
+ "simStepId": "3bfbefce-7c30-49ec-8639-e675734f7eac",
+ "diagramNodeId": "bedcfb08-7d16-4775-a826-1f285fc5db15",
+ "simStepLabel": "Process Update Check Request",
+ "simStepDescription": "The `AppUpdater.checkForUpdates()` method is invoked. It ensures that only one update check is running at a time by using a promise lock (`checkForUpdatesPromise`). It emits a `checking-for-update` event and then calls the internal `doCheckForUpdates()` method to perform the actual check.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/electron-updater/src/AppUpdater.ts",
+ "startLine": "325",
+ "endLine": "347",
+ "relevantVariables": [
+ "checkForUpdates",
+ "checkForUpdatesPromise",
+ "doCheckForUpdates"
+ ]
+ },
+ "inputDataExample": "{}",
+ "outputDataExample": "{\"updateCheckResultPromise\": \"Promise\"}"
+ },
+ {
+ "simStepId": "f4a0a232-dc79-4e63-849a-a148000736f8",
+ "diagramNodeId": "b982a95b-1e48-4fe5-b8b9-f12e797771ab",
+ "simStepLabel": "Request Update Metadata from Server",
+ "simStepDescription": "Inside `doCheckForUpdates`, a provider (e.g., `GenericProvider`, `GitHubProvider`) is created based on the `publish` configuration. This provider constructs the correct URL for the update metadata file (e.g., `latest.yml`) and sends an HTTP GET request to the update server.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/electron-updater/src/providers/GenericProvider.ts",
+ "startLine": "29",
+ "endLine": "29",
+ "relevantVariables": [
+ "this.httpRequest",
+ "channelUrl"
+ ]
+ },
+ "inputDataExample": "{\"url\": \"https://my-update-server.com/releases/latest.yml\"}",
+ "outputDataExample": "{\"url\": \"https://my-update-server.com/releases/latest.yml\"}"
+ },
+ {
+ "simStepId": "4f03a31a-697e-4611-b943-e0e59053a7eb",
+ "diagramNodeId": "be339346-d3f5-4ff2-b5dd-dad0552de606",
+ "simStepLabel": "Fetch and Parse Update Information",
+ "simStepDescription": "The provider receives the metadata file from the server, parses it (e.g., from YAML format), and constructs an `UpdateInfo` object containing details about the new version, release notes, and file information.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/electron-updater/src/providers/GenericProvider.ts",
+ "startLine": "25",
+ "endLine": "46",
+ "relevantVariables": [
+ "getLatestVersion",
+ "parseUpdateInfo",
+ "httpRequest"
+ ]
+ },
+ "inputDataExample": "{\"body\": \"version: 2.0.0\\npath: MyApp-Setup-2.0.0.exe\\nsha512: abc...xyz\"}",
+ "outputDataExample": "{\"version\": \"2.0.0\", \"path\": \"MyApp-Setup-2.0.0.exe\", \"sha512\": \"abc...xyz\", \"files\": [{\"url\": \"MyApp-Setup-2.0.0.exe\", \"sha512\": \"abc...xyz\"}]}"
+ },
+ {
+ "simStepId": "8d9cec1b-f071-4a21-8252-e1c5fff37cdd",
+ "diagramNodeId": "8745e811-9a81-40a8-b1e1-256959f3c8d3",
+ "simStepLabel": "Transmit Parsed UpdateInfo",
+ "simStepDescription": "The `UpdateInfo` object is returned from the provider to the `AppUpdater` instance.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/electron-updater/src/providers/GenericProvider.ts",
+ "startLine": "29",
+ "endLine": "29",
+ "relevantVariables": [
+ "parseUpdateInfo"
+ ]
+ },
+ "inputDataExample": "{\"version\": \"2.0.0\", \"path\": \"MyApp-Setup-2.0.0.exe\", \"sha512\": \"abc...xyz\", \"files\": [{\"url\": \"MyApp-Setup-2.0.0.exe\", \"sha512\": \"abc...xyz\"}]}",
+ "outputDataExample": "{\"version\": \"2.0.0\", \"path\": \"MyApp-Setup-2.0.0.exe\", \"sha512\": \"abc...xyz\", \"files\": [{\"url\": \"MyApp-Setup-2.0.0.exe\", \"sha512\": \"abc...xyz\"}]}"
+ },
+ {
+ "simStepId": "8e15b5d0-9308-4f92-be9a-4589f787888b",
+ "diagramNodeId": "1ff908e3-215d-4c43-a3c1-c9860ae3e253",
+ "simStepLabel": "Evaluate Update Availability and Start Download",
+ "simStepDescription": "`AppUpdater` compares the version from `UpdateInfo` with the current application version. If a newer version is found, it emits an `update-available` event. If `autoDownload` is enabled (which it is by default), it immediately calls `executeDownload` to start downloading the update installer.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/electron-updater/src/AppUpdater.ts",
+ "startLine": "554",
+ "endLine": "557",
+ "relevantVariables": [
+ "isUpdateAvailable",
+ "scheduleDownload",
+ "executeDownload"
+ ]
+ },
+ "inputDataExample": "{\"currentVersion\": \"1.0.0\", \"updateInfo\": {\"version\": \"2.0.0\", \"files\": [...]}}",
+ "outputDataExample": "{\"downloadPromise\": \"Promise\"}"
+ },
+ {
+ "simStepId": "5d104e19-4eab-4e46-a6ca-aebe26e32b81",
+ "diagramNodeId": "b96d2ef2-d920-481e-b4e6-de4eafffd4a3",
+ "simStepLabel": "Download Update Package",
+ "simStepDescription": "The `executeDownload` method initiates the download of the installer package (e.g., .exe file) from the URL specified in the `UpdateInfo`. This may involve a differential downloader to only fetch the changed parts of the file. `progress` events are emitted during this process.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/electron-updater/src/BaseUpdater.ts",
+ "startLine": "29",
+ "endLine": "43",
+ "relevantVariables": [
+ "executeDownload",
+ "DifferentialDownloader"
+ ]
+ },
+ "inputDataExample": "{\"url\": \"https://my-update-server.com/releases/MyApp-Setup-2.0.0.exe\"}",
+ "outputDataExample": "{\"url\": \"https://my-update-server.com/releases/MyApp-Setup-2.0.0.exe\"}"
+ },
+ {
+ "simStepId": "c6f3a286-6ef4-425f-b2c3-80f17caa8c3f",
+ "diagramNodeId": "41f8a620-78b8-496e-99c5-ff04e474a517",
+ "simStepLabel": "Finalize Download",
+ "simStepDescription": "Once the download is complete, the file is saved to a temporary cache directory. The `AppUpdater` then emits an `update-downloaded` event to notify the application that the update is ready for installation.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/electron-updater/src/AppUpdater.ts",
+ "startLine": "574",
+ "endLine": "574",
+ "relevantVariables": [
+ "dispatchUpdateDownloaded"
+ ]
+ },
+ "inputDataExample": "{\"downloadedFilePath\": \"C:\\Users\\user\\AppData\\Local\\my-app-updater\\pending\\MyApp-Setup-2.0.0.exe\"}",
+ "outputDataExample": "{\"event\": \"update-downloaded\", \"updateInfo\": {\"version\": \"2.0.0\", ...}, \"downloadedFile\": \"...\"}"
+ },
+ {
+ "simStepId": "e8350c5a-c7ff-49cf-ab97-7dfec2af63ef",
+ "diagramNodeId": "614a57c4-c79d-4c9b-be78-201da18766cd",
+ "simStepLabel": "API Call: Quit and Install Update",
+ "simStepDescription": "Upon receiving the `update-downloaded` event, the application typically prompts the user to apply the update. When the user agrees, the application calls `autoUpdater.quitAndInstall()`. This tells the updater to close the application and run the installer.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/electron-updater/src/AppUpdater.ts",
+ "startLine": "608",
+ "endLine": "623",
+ "relevantVariables": [
+ "quitAndInstall"
+ ]
+ },
+ "inputDataExample": "{}",
+ "outputDataExample": "{}"
+ },
+ {
+ "simStepId": "4dee9b52-2d29-4068-88a1-68df85d796be",
+ "diagramNodeId": "9e535902-5e87-4b32-ab48-32386af3ff89",
+ "simStepLabel": "Execute Quit and Install",
+ "simStepDescription": "The `quitAndInstall` method in `BaseUpdater` is called. It sets a flag (`quitAndInstallCalled`) to prevent duplicate calls and invokes the platform-specific `doInstall` method to run the downloaded installer.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/electron-updater/src/BaseUpdater.ts",
+ "startLine": "14",
+ "endLine": "26",
+ "relevantVariables": [
+ "quitAndInstall",
+ "install",
+ "quitAndInstallCalled"
+ ]
+ },
+ "inputDataExample": "{\"isSilent\": true, \"isForceRunAfter\": false}",
+ "outputDataExample": "{\"isInstalled\": true}"
+ },
+ {
+ "simStepId": "3bf78573-19d3-458e-a3a1-ab1beb3cb2a4",
+ "diagramNodeId": "bf619bd7-f6c0-4d44-8f95-908c4bf499d5",
+ "simStepLabel": "Launch Installer Process",
+ "simStepDescription": "The platform-specific `doInstall` method (e.g., in `NsisUpdater`) spawns the downloaded installer executable as a new child process. For a silent install, command-line flags like `/S` are passed.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/electron-updater/src/BaseUpdater.ts",
+ "startLine": "67",
+ "endLine": "71",
+ "relevantVariables": [
+ "this.doInstall"
+ ]
+ },
+ "inputDataExample": "{\"installerPath\": \"C:\\Users\\user\\AppData\\Local\\my-app-updater\\pending\\MyApp-Setup-2.0.0.exe\", \"isSilent\": true}",
+ "outputDataExample": "{\"installerPath\": \"C:\\Users\\user\\AppData\\Local\\my-app-updater\\pending\\MyApp-Setup-2.0.0.exe\", \"isSilent\": true}"
+ },
+ {
+ "simStepId": "847a4db6-b5da-41a5-a612-95c61446ff2b",
+ "diagramNodeId": "9f0eb48a-f102-4db5-ae48-a891dcf4ee36",
+ "simStepLabel": "Quit Application",
+ "simStepDescription": "After successfully launching the installer process, `quitAndInstall` emits a `before-quit-for-update` event and then immediately calls `app.quit()` to terminate the running application. This releases file locks and allows the installer to overwrite the application files.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/electron-updater/src/BaseUpdater.ts",
+ "startLine": "18",
+ "endLine": "22",
+ "relevantVariables": [
+ "this.app.quit"
+ ]
+ },
+ "inputDataExample": "{}",
+ "outputDataExample": "{}"
+ }
+ ],
+ "description": "- A critical feature for maintaining applications, electron-updater provides a complete client-side solution for automatic updates
- - It automatically checks a specified update server for new versions based on the application's channel (e
- g
- , stable, beta)
- - It can download updates in the background and provides events to the application to notify the user
- - Includes the logic to restart the application and apply the update (
quitAndInstall) - - The main implementation is in
packages/electron-updater/src/AppUpdater - ts, with platform-specific logic in files like
NsisUpdater - ts
",
+ "simulationNodesAndEdges": {
+ "1e9daf90-8f5b-44ec-a967-99c383ad32b9": {
+ "simStepIds": [
+ "74d951fa-b26b-4419-9820-2610d732a2cb"
+ ]
+ },
+ "bedcfb08-7d16-4775-a826-1f285fc5db15": {
+ "simStepIds": [
+ "3bfbefce-7c30-49ec-8639-e675734f7eac"
+ ]
+ },
+ "be339346-d3f5-4ff2-b5dd-dad0552de606": {
+ "simStepIds": [
+ "4f03a31a-697e-4611-b943-e0e59053a7eb"
+ ]
+ },
+ "1ff908e3-215d-4c43-a3c1-c9860ae3e253": {
+ "simStepIds": [
+ "8e15b5d0-9308-4f92-be9a-4589f787888b"
+ ]
+ },
+ "41f8a620-78b8-496e-99c5-ff04e474a517": {
+ "simStepIds": [
+ "c6f3a286-6ef4-425f-b2c3-80f17caa8c3f"
+ ]
+ },
+ "9e535902-5e87-4b32-ab48-32386af3ff89": {
+ "simStepIds": [
+ "4dee9b52-2d29-4068-88a1-68df85d796be"
+ ]
+ },
+ "9f0eb48a-f102-4db5-ae48-a891dcf4ee36": {
+ "simStepIds": [
+ "847a4db6-b5da-41a5-a612-95c61446ff2b"
+ ]
+ },
+ "8f49e2dc-7c02-49ca-a46f-4a6aec595b5d": {
+ "simStepIds": [
+ "1e5474c6-6a14-4255-a3e8-70f28a8d19be"
+ ]
+ },
+ "b982a95b-1e48-4fe5-b8b9-f12e797771ab": {
+ "simStepIds": [
+ "f4a0a232-dc79-4e63-849a-a148000736f8"
+ ]
+ },
+ "8745e811-9a81-40a8-b1e1-256959f3c8d3": {
+ "simStepIds": [
+ "8d9cec1b-f071-4a21-8252-e1c5fff37cdd"
+ ]
+ },
+ "b96d2ef2-d920-481e-b4e6-de4eafffd4a3": {
+ "simStepIds": [
+ "5d104e19-4eab-4e46-a6ca-aebe26e32b81"
+ ]
+ },
+ "614a57c4-c79d-4c9b-be78-201da18766cd": {
+ "simStepIds": [
+ "e8350c5a-c7ff-49cf-ab97-7dfec2af63ef"
+ ]
+ },
+ "bf619bd7-f6c0-4d44-8f95-908c4bf499d5": {
+ "simStepIds": [
+ "3bf78573-19d3-458e-a3a1-ab1beb3cb2a4"
+ ]
+ }
+ },
+ "isAIGenerated": true,
+ "keywords": "AppUpdater, checkForUpdates, quitAndInstall",
+ "generationPrompt": "Provide out-of-the-box auto-update capabilities for applications.",
+ "generationKeywords": "AppUpdater, checkForUpdates, quitAndInstall"
+ },
+ "Automate publishing of application installers and updates to various release channels.": {
+ "name": "Automate publishing of application installers and updates to various release channels.",
+ "simSteps": [
+ {
+ "simStepId": "f35d4a9e-ffec-4d0b-b35f-90850fbb9130",
+ "diagramNodeId": "1adfa7ab-c1c6-4a12-ad2b-231bdeb9132b",
+ "simStepLabel": "Initiate Build and Publishing Process",
+ "simStepDescription": "The overall process starts when the `build` function is called. It creates a `Packager` instance to handle the creation of application artifacts and then instantiates a `PublishManager` to manage the publishing of those artifacts to configured providers. The `PublishManager` also registers listeners for events emitted by the packager, such as when an artifact is created.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/app-builder-lib/src/index.ts",
+ "startLine": "80",
+ "endLine": "84",
+ "relevantVariables": [
+ "build",
+ "options",
+ "Packager",
+ "PublishManager"
+ ]
+ },
+ "inputDataExample": "{\"options\": {\"mac\": [\"dmg\"], \"win\": [\"nsis\"], \"linux\": [\"AppImage\"], \"publish\": {\"provider\": \"github\", \"owner\": \"my-org\", \"repo\": \"my-app\"}}}",
+ "outputDataExample": "{\"publishManager\": {\"isPublish\": true}, \"packager\": {\"cancellationToken\": {}}}"
+ },
+ {
+ "simStepId": "f1baa282-c373-4951-b822-b12cc4592654",
+ "diagramNodeId": "69b16248-e13f-4d05-b7bf-7cd94ff00fbf",
+ "simStepLabel": "Artifact Creation Event",
+ "simStepDescription": "As the `Packager` successfully builds an artifact (e.g., a `.dmg` or `.exe` file), it emits an `artifactCreated` event. This event carries data about the newly created artifact, which is crucial for the publishing step.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/app-builder-lib/src/publish/PublishManager.ts",
+ "startLine": "138",
+ "endLine": "146",
+ "relevantVariables": [
+ "packager.artifactCreated.on",
+ "event"
+ ]
+ },
+ "inputDataExample": "{\"file\": \"/path/to/dist/my-app-1.0.0.dmg\", \"safeArtifactName\": \"my-app-1.0.0.dmg\", \"target\": \"dmg\", \"arch\": \"x64\", \"packager\": {\"platform\": \"mac\"}}",
+ "outputDataExample": "{\"file\": \"/path/to/dist/my-app-1.0.0.dmg\", \"safeArtifactName\": \"my-app-1.0.0.dmg\", \"target\": \"dmg\", \"arch\": \"x64\", \"packager\": {\"platform\": \"mac\"}}"
+ },
+ {
+ "simStepId": "419f3e16-41c0-45a1-aa50-0767e8f54fea",
+ "diagramNodeId": "187c76f4-215b-4c46-a48d-66a046a23316",
+ "simStepLabel": "Schedule Artifact Upload",
+ "simStepDescription": "The `PublishManager`'s listener for the `artifactCreated` event is triggered. It processes the event data, retrieves the relevant publishing configuration, and then calls its own `scheduleUpload` method to add the artifact to an asynchronous upload queue.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/app-builder-lib/src/publish/PublishManager.ts",
+ "startLine": "138",
+ "endLine": "146",
+ "relevantVariables": [
+ "scheduleUpload",
+ "publishConfiguration",
+ "event"
+ ]
+ },
+ "inputDataExample": "{\"file\": \"/path/to/dist/my-app-1.0.0.dmg\", \"safeArtifactName\": \"my-app-1.0.0.dmg\", \"target\": \"dmg\", \"arch\": \"x64\", \"packager\": {\"platform\": \"mac\"}}",
+ "outputDataExample": "{}"
+ },
+ {
+ "simStepId": "c2603129-b4ab-4ce8-9198-8e72e3e6fa3a",
+ "diagramNodeId": "0e8da646-3b25-4881-a8f2-b419d23286c4",
+ "simStepLabel": "Passing Upload Details to Scheduler",
+ "simStepDescription": "The `PublishManager` internally passes the specific publishing configuration and an `UploadTask` object (containing details about the artifact file) to the `scheduleUpload` method for processing.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/app-builder-lib/src/publish/PublishManager.ts",
+ "startLine": "154",
+ "endLine": "154",
+ "relevantVariables": [
+ "scheduleUpload",
+ "publishConfig",
+ "event"
+ ]
+ },
+ "inputDataExample": "{\"publishConfig\": {\"provider\": \"github\", \"owner\": \"my-org\", \"repo\": \"my-app\"}, \"event\": {\"file\": \"/path/to/dist/my-app-1.0.0.dmg\", \"arch\": \"x64\"}}",
+ "outputDataExample": "{\"publishConfig\": {\"provider\": \"github\", \"owner\": \"my-org\", \"repo\": \"my-app\"}, \"event\": {\"file\": \"/path/to/dist/my-app-1.0.0.dmg\", \"arch\": \"x64\"}}"
+ },
+ {
+ "simStepId": "4ddcfbb7-69d1-45b5-8011-d82c032acae3",
+ "diagramNodeId": "f9d28546-2567-4a0b-86ea-2dd7f40c5b39",
+ "simStepLabel": "Create Provider-Specific Publisher",
+ "simStepDescription": "The `scheduleUpload` method determines the publishing provider (e.g., 'github') from the configuration. It then uses a factory function, `createPublisher`, to instantiate a provider-specific publisher class, such as `GitHubPublisher`, which contains the logic to communicate with that provider's API.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/app-builder-lib/src/publish/PublishManager.ts",
+ "startLine": "314",
+ "endLine": "322",
+ "relevantVariables": [
+ "createPublisher",
+ "provider",
+ "GitHubPublisher",
+ "GitlabPublisher"
+ ]
+ },
+ "inputDataExample": "{\"publishConfig\": {\"provider\": \"github\", \"owner\": \"my-org\", \"repo\": \"my-app\"}}",
+ "outputDataExample": "{\"publisher\": {\"providerName\": \"github\"}}"
+ },
+ {
+ "simStepId": "5035ffb6-ea57-4421-891f-e67b6b62c678",
+ "diagramNodeId": "397cfc71-aa3e-4b21-a55e-e1ff6f0ff54c",
+ "simStepLabel": "Submitting Upload Task to Publisher",
+ "simStepDescription": "The `PublishManager` adds a task to its internal `AsyncTaskManager` that will execute the `upload` method on the newly created publisher instance (e.g., `GitHubPublisher`), passing along the artifact details.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/app-builder-lib/src/publish/PublishManager.ts",
+ "startLine": "154",
+ "endLine": "160",
+ "relevantVariables": [
+ "scheduleUpload",
+ "taskManager",
+ "publisher.upload"
+ ]
+ },
+ "inputDataExample": "{\"file\": \"/path/to/dist/my-app-1.0.0.dmg\", \"arch\": \"x64\"}",
+ "outputDataExample": "{\"file\": \"/path/to/dist/my-app-1.0.0.dmg\", \"arch\": \"x64\"}"
+ },
+ {
+ "simStepId": "a6549131-20b8-4199-aaba-db87a8583448",
+ "diagramNodeId": "5aa288ec-1d85-4b29-bdf6-4b84a550b798",
+ "simStepLabel": "Upload Artifact to GitHub Release",
+ "simStepDescription": "The `GitHubPublisher`'s `upload` method is executed. It first ensures a GitHub Release exists for the current version tag (creating a new draft or pre-release if necessary). Then, it uses the GitHub API to upload the specified artifact file to that release as an asset.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/electron-publish/src/gitHubPublisher.ts",
+ "startLine": "28",
+ "endLine": "29",
+ "relevantVariables": [
+ "GitHubPublisher",
+ "_release",
+ "getOrCreateRelease"
+ ]
+ },
+ "inputDataExample": "{\"task\": {\"file\": \"/path/to/dist/my-app-1.0.0.dmg\", \"arch\": \"x64\"}}",
+ "outputDataExample": "{\"status\": \"completed\", \"url\": \"https://github.com/my-org/my-app/releases/download/v1.0.0/my-app-1.0.0.dmg\"}"
+ },
+ {
+ "simStepId": "e133fa6a-f9d9-4ec0-9669-f3fb5acdf20a",
+ "diagramNodeId": "435362ea-1737-4682-ab3a-73135c41418c",
+ "simStepLabel": "Awaiting All Pending Uploads",
+ "simStepDescription": "After all artifacts have been generated and their corresponding upload tasks scheduled, the main `build` process must wait for them to finish. It calls `publishManager.awaitTasks()` to pause execution until all asynchronous upload operations have completed.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/app-builder-lib/src/index.ts",
+ "startLine": "132",
+ "endLine": "132",
+ "relevantVariables": [
+ "publishManager.awaitTasks"
+ ]
+ },
+ "inputDataExample": "{}",
+ "outputDataExample": "{}"
+ },
+ {
+ "simStepId": "5c7b9901-1af2-4f22-8d08-5cf415c1174b",
+ "diagramNodeId": "60f61b0c-a485-4cfa-99e8-cd72712caf67",
+ "simStepLabel": "Publishing Complete",
+ "simStepDescription": "Once `publishManager.awaitTasks()` resolves, it signifies that all artifacts have been successfully uploaded to their respective providers. The `build` function performs final cleanup and returns a promise that resolves with an array of file paths to the locally generated artifacts.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/app-builder-lib/src/index.ts",
+ "startLine": "125",
+ "endLine": "136",
+ "relevantVariables": [
+ "executeFinally",
+ "publishManager.awaitTasks",
+ "buildResult.artifactPaths"
+ ]
+ },
+ "inputDataExample": "{}",
+ "outputDataExample": "{\"artifactPaths\": [\"/path/to/dist/my-app-1.0.0.dmg\", \"/path/to/dist/latest-mac.yml\"]}"
+ }
+ ],
+ "description": "- After building artifacts, electron-builder can automatically upload them to a variety of hosting providers, which is essential for continuous integration and delivery (CI/CD)
- - Supports publishing to GitHub Releases, Amazon S3, DigitalOcean Spaces, and generic HTTP servers
- - Automatically generates and uploads update metadata files (e
- g
- ,
latest - yml) which are consumed by the
electron-updater module - - The central logic is managed by
packages/app-builder-lib/src/publish/PublishManager - ts, with specific provider implementations in the
packages/electron-publish/ directory
",
+ "simulationNodesAndEdges": {
+ "1adfa7ab-c1c6-4a12-ad2b-231bdeb9132b": {
+ "simStepIds": [
+ "f35d4a9e-ffec-4d0b-b35f-90850fbb9130"
+ ]
+ },
+ "187c76f4-215b-4c46-a48d-66a046a23316": {
+ "simStepIds": [
+ "419f3e16-41c0-45a1-aa50-0767e8f54fea"
+ ]
+ },
+ "f9d28546-2567-4a0b-86ea-2dd7f40c5b39": {
+ "simStepIds": [
+ "4ddcfbb7-69d1-45b5-8011-d82c032acae3"
+ ]
+ },
+ "5aa288ec-1d85-4b29-bdf6-4b84a550b798": {
+ "simStepIds": [
+ "a6549131-20b8-4199-aaba-db87a8583448"
+ ]
+ },
+ "60f61b0c-a485-4cfa-99e8-cd72712caf67": {
+ "simStepIds": [
+ "5c7b9901-1af2-4f22-8d08-5cf415c1174b"
+ ]
+ },
+ "69b16248-e13f-4d05-b7bf-7cd94ff00fbf": {
+ "simStepIds": [
+ "f1baa282-c373-4951-b822-b12cc4592654"
+ ]
+ },
+ "0e8da646-3b25-4881-a8f2-b419d23286c4": {
+ "simStepIds": [
+ "c2603129-b4ab-4ce8-9198-8e72e3e6fa3a"
+ ]
+ },
+ "397cfc71-aa3e-4b21-a55e-e1ff6f0ff54c": {
+ "simStepIds": [
+ "5035ffb6-ea57-4421-891f-e67b6b62c678"
+ ]
+ },
+ "435362ea-1737-4682-ab3a-73135c41418c": {
+ "simStepIds": [
+ "e133fa6a-f9d9-4ec0-9669-f3fb5acdf20a"
+ ]
+ }
+ },
+ "isAIGenerated": true,
+ "keywords": "PublishManager, GitHubPublisher, scheduleUpload",
+ "generationPrompt": "Automate publishing of application installers and updates to various release channels.",
+ "generationKeywords": "PublishManager, GitHubPublisher, scheduleUpload"
+ },
+ "Automate code signing for macOS and Windows applications.": {
+ "name": "Automate code signing for macOS and Windows applications.",
+ "simSteps": [
+ {
+ "simStepId": "4288fc8b-b291-4fa5-9bc2-1dee9507e0be",
+ "diagramNodeId": "3b08ebb3-0526-4973-84fe-4ce072a15b9d",
+ "simStepLabel": "Windows Flow: Initiate Application Signing",
+ "simStepDescription": "The Windows packaging process triggers the `signApp` method to sign all relevant executables within the packaged application directory. This method iterates through files like .exe and .dll and determines if they need signing.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/app-builder-lib/src/winPackager.ts",
+ "startLine": "244",
+ "endLine": "263",
+ "relevantVariables": [
+ "signApp",
+ "signAndEditResources",
+ "shouldSignFile",
+ "sign"
+ ]
+ },
+ "inputDataExample": "{\"packContext\": {\"appOutDir\": \"C:\\\\project\\\\dist\\\\win-unpacked\", \"arch\": \"x64\", \"outDir\": \"C:\\\\project\\\\dist\"}, \"isAsar\": true}",
+ "outputDataExample": "{\"signedFiles\": [\"C:\\\\project\\\\dist\\\\win-unpacked\\\\my-app.exe\"]}"
+ },
+ {
+ "simStepId": "8a86f3d3-61b9-42b9-b537-52580a09626c",
+ "diagramNodeId": "1dcf9897-7ff7-4f6b-9b73-e209504e2abb",
+ "simStepLabel": "Windows Flow: Pass File to Signing Method",
+ "simStepDescription": "The path of each executable file identified for signing is passed to the main `sign` method of the `WinPackager`.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/app-builder-lib/src/winPackager.ts",
+ "startLine": "262",
+ "endLine": "262",
+ "relevantVariables": [
+ "sign"
+ ]
+ },
+ "inputDataExample": "{\"file\": \"C:\\\\project\\\\dist\\\\win-unpacked\\\\my-app.exe\"}",
+ "outputDataExample": "{\"file\": \"C:\\\\project\\\\dist\\\\win-unpacked\\\\my-app.exe\"}"
+ },
+ {
+ "simStepId": "2d08d950-792c-4739-bc87-37a2a96b867f",
+ "diagramNodeId": "1b4b5157-2e39-4f8a-9cbd-ed1dc0214043",
+ "simStepLabel": "Windows Flow: Prepare Signing Options",
+ "simStepDescription": "For each file, the `sign` method in `WinPackager` constructs a `WindowsSignOptions` object. This object bundles the file path and all relevant signing configurations from the user's `electron-builder.json` or `package.json`.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/app-builder-lib/src/winPackager.ts",
+ "startLine": "125",
+ "endLine": "132",
+ "relevantVariables": [
+ "sign",
+ "WindowsSignOptions",
+ "signWindows"
+ ]
+ },
+ "inputDataExample": "{\"file\": \"C:\\\\project\\\\dist\\\\win-unpacked\\\\my-app.exe\"}",
+ "outputDataExample": "{\"signOptions\": {\"path\": \"C:\\\\project\\\\dist\\\\win-unpacked\\\\my-app.exe\", \"options\": {\"productName\": \"My App\", \"signtoolOptions\": {\"certificateFile\": \"C:\\\\certs\\\\mycert.pfx\", \"certificatePassword\": \"my-secret-password\", \"timeStampServer\": \"http://timestamp.digicert.com\"}}}}"
+ },
+ {
+ "simStepId": "2527dfd9-d18d-48e9-9c70-331e8622cf1c",
+ "diagramNodeId": "6dccc7db-69c6-45da-af72-194e9a0ce5a5",
+ "simStepLabel": "Windows Flow: Dispatch to Central Signing Function",
+ "simStepDescription": "The prepared `WindowsSignOptions` object is passed to the central `signWindows` function, which orchestrates the signing process.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/app-builder-lib/src/winPackager.ts",
+ "startLine": "130",
+ "endLine": "130",
+ "relevantVariables": [
+ "signWindows"
+ ]
+ },
+ "inputDataExample": "{\"signOptions\": {\"path\": \"C:\\\\project\\\\dist\\\\win-unpacked\\\\my-app.exe\", \"options\": {\"productName\": \"My App\", \"signtoolOptions\": {\"certificateFile\": \"C:\\\\certs\\\\mycert.pfx\", \"certificatePassword\": \"my-secret-password\", \"timeStampServer\": \"http://timestamp.digicert.com\"}}}}",
+ "outputDataExample": "{\"signOptions\": {\"path\": \"C:\\\\project\\\\dist\\\\win-unpacked\\\\my-app.exe\", \"options\": {\"productName\": \"My App\", \"signtoolOptions\": {\"certificateFile\": \"C:\\\\certs\\\\mycert.pfx\", \"certificatePassword\": \"my-secret-password\", \"timeStampServer\": \"http://timestamp.digicert.com\"}}}}"
+ },
+ {
+ "simStepId": "b146ef73-cea7-4625-9ae9-535b6ae48653",
+ "diagramNodeId": "74b87e43-0809-4711-963c-6cbd695cb4e7",
+ "simStepLabel": "Windows Flow: Select Signing Manager (signtool vs Azure)",
+ "simStepDescription": "The `signWindows` function retrieves the appropriate signing manager from the packager. The packager's `signingManager` property lazily initializes either a `WindowsSignToolManager` (for traditional certificates) or a `WindowsSignAzureManager` based on the user's configuration (`signtoolOptions` vs `azureSignOptions`).",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/app-builder-lib/src/winPackager.ts",
+ "startLine": "34",
+ "endLine": "40",
+ "relevantVariables": [
+ "signingManager",
+ "WindowsSignAzureManager",
+ "WindowsSignToolManager"
+ ]
+ },
+ "inputDataExample": "{\"options\": {\"azureSignOptions\": null, \"signtoolOptions\": {\"certificateFile\": \"...\"}}}",
+ "outputDataExample": "{\"manager\": \"WindowsSignToolManager\"}"
+ },
+ {
+ "simStepId": "f36b28a3-53c0-4e40-b751-a80bf3a331e2",
+ "diagramNodeId": "20ca941e-4d3e-4d86-8e75-7b8324dc8bde",
+ "simStepLabel": "Windows Flow: Pass Options to Manager",
+ "simStepDescription": "The `signWindows` function invokes the `signFile` method on the selected signing manager, passing along the signing options.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/app-builder-lib/src/codeSign/windowsCodeSign.ts",
+ "startLine": "17",
+ "endLine": "17",
+ "relevantVariables": [
+ "packageManager.signFile"
+ ]
+ },
+ "inputDataExample": "{\"signOptions\": {\"path\": \"C:\\\\project\\\\dist\\\\win-unpacked\\\\my-app.exe\", \"options\": {}}}",
+ "outputDataExample": "{\"signOptions\": {\"path\": \"C:\\\\project\\\\dist\\\\win-unpacked\\\\my-app.exe\", \"options\": {}}}"
+ },
+ {
+ "simStepId": "b6edc4d8-77cf-4961-a541-1fcdd7d0347a",
+ "diagramNodeId": "2ff70e5a-9fe9-4d5e-b386-5a13af933d5a",
+ "simStepLabel": "Windows Flow: Prepare Signing Command",
+ "simStepDescription": "The `WindowsSignToolManager`'s `signFile` method is called. It resolves certificate information via the `cscInfo` property and checks for custom signing hooks. If no custom hook is found, it calls the `doSign` method to execute the standard signing process.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/app-builder-lib/src/codeSign/windowsSignToolManager.ts",
+ "startLine": "180",
+ "endLine": "227",
+ "relevantVariables": [
+ "signFile",
+ "cscInfo",
+ "customSign",
+ "executor",
+ "doSign"
+ ]
+ },
+ "inputDataExample": "{\"options\": {\"path\": \"C:\\\\project\\\\dist\\\\win-unpacked\\\\my-app.exe\", \"options\": {}}}",
+ "outputDataExample": "{\"configuration\": {\"path\": \"C:\\\\project\\\\dist\\\\win-unpacked\\\\my-app.exe\", \"name\": \"My App\", \"cscInfo\": {\"file\": \"C:\\\\certs\\\\mycert.pfx\", \"password\": \"my-secret-password\"}, \"hash\": \"sha256\"}}"
+ },
+ {
+ "simStepId": "99a550ab-cc26-4fb5-b5aa-535a2b7158e3",
+ "diagramNodeId": "79435eaa-f540-4ac4-ac0c-d9443c652a7d",
+ "simStepLabel": "Windows Flow: Pass Config to Executor",
+ "simStepDescription": "The detailed signing configuration, including certificate info and file paths, is passed to the `doSign` method for execution.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/app-builder-lib/src/codeSign/windowsSignToolManager.ts",
+ "startLine": "227",
+ "endLine": "227",
+ "relevantVariables": [
+ "executor"
+ ]
+ },
+ "inputDataExample": "{\"configuration\": {\"path\": \"C:\\\\project\\\\dist\\\\win-unpacked\\\\my-app.exe\", \"name\": \"My App\", \"cscInfo\": {\"file\": \"C:\\\\certs\\\\mycert.pfx\", \"password\": \"my-secret-password\"}, \"hash\": \"sha256\"}}",
+ "outputDataExample": "{\"configuration\": {\"path\": \"C:\\\\project\\\\dist\\\\win-unpacked\\\\my-app.exe\", \"name\": \"My App\", \"cscInfo\": {\"file\": \"C:\\\\certs\\\\mycert.pfx\", \"password\": \"my-secret-password\"}, \"hash\": \"sha256\"}}"
+ },
+ {
+ "simStepId": "18bd8074-291c-4596-8cf2-3bf6c02c9e9f",
+ "diagramNodeId": "0ccca601-22f1-4b53-9e3e-531e5754fc2b",
+ "simStepLabel": "Windows Flow: Execute Signing Tool",
+ "simStepDescription": "The `doSign` method constructs the final command-line arguments for the signing utility (`signtool.exe` on Windows or `osslsigncode` on other platforms). It includes hash algorithms, timestamp server URLs, and certificate details before executing the command to cryptographically sign the executable file.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/app-builder-lib/src/codeSign/windowsSignToolManager.ts",
+ "startLine": "428",
+ "endLine": "466",
+ "relevantVariables": [
+ "doSign",
+ "getToolPath",
+ "exec",
+ "execWine"
+ ]
+ },
+ "inputDataExample": "{\"configuration\": {\"path\": \"C:\\\\project\\\\dist\\\\win-unpacked\\\\my-app.exe\", \"name\": \"My App\", \"cscInfo\": {\"file\": \"C:\\\\certs\\\\mycert.pfx\", \"password\": \"my-secret-password\"}, \"hash\": \"sha256\"}}",
+ "outputDataExample": "{\"exitCode\": 0}"
+ },
+ {
+ "simStepId": "50d2bb50-cee4-401b-b8a7-7fbd146bb349",
+ "diagramNodeId": "22874821-7199-449c-b0a7-3556d0b42732",
+ "simStepLabel": "macOS Flow: Initiate Application Signing",
+ "simStepDescription": "The macOS packaging process calls the `sign` method on the `MacPackager` instance. This method is the main entry point for the entire code signing flow for the `.app` bundle, starting by checking if signing is permitted and gathering necessary credentials.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/app-builder-lib/src/macPackager.ts",
+ "startLine": "241",
+ "endLine": "274",
+ "relevantVariables": [
+ "sign",
+ "isSignAllowed",
+ "codeSigningInfo"
+ ]
+ },
+ "inputDataExample": "{\"appPath\": \"/path/to/dist/mac/My App.app\", \"outDir\": \"/path/to/dist/mac\", \"masOptions\": null, \"arch\": \"x64\"}",
+ "outputDataExample": "{\"identityQualifier\": \"Developer ID Application: John Doe (A1B2C3D4E5)\", \"keychainFile\": \"/var/folders/xyz/temp.keychain\"}"
+ },
+ {
+ "simStepId": "5240ff1b-0201-4f99-ac3f-c903033da0b9",
+ "diagramNodeId": "54514d16-ec1d-40b8-a2b8-683260f781fe",
+ "simStepLabel": "macOS Flow: Search for Signing Identity",
+ "simStepDescription": "The certificate name (qualifier) and keychain path are passed to the `findIdentity` utility to locate the correct signing certificate.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/app-builder-lib/src/macPackager.ts",
+ "startLine": "281",
+ "endLine": "281",
+ "relevantVariables": [
+ "findIdentity"
+ ]
+ },
+ "inputDataExample": "{\"certType\": \"Developer ID Application\", \"qualifier\": \"Developer ID Application: John Doe (A1B2C3D4E5)\", \"keychainFile\": \"/var/folders/xyz/temp.keychain\"}",
+ "outputDataExample": "{\"certType\": \"Developer ID Application\", \"qualifier\": \"Developer ID Application: John Doe (A1B2C3D4E5)\", \"keychainFile\": \"/var/folders/xyz/temp.keychain\"}"
+ },
+ {
+ "simStepId": "23327905-d34a-4a79-9d63-8922931f6c79",
+ "diagramNodeId": "c7b24ba6-d237-4472-a014-65d332ded496",
+ "simStepLabel": "macOS Flow: Find Certificate in Keychain",
+ "simStepDescription": "The `findIdentity` utility searches the specified keychain for a valid code signing certificate. It looks for specific certificate types (e.g., \"Developer ID Application\") that match the provided name or qualifier.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/app-builder-lib/src/codeSign/macCodeSign.ts",
+ "startLine": "133",
+ "endLine": "159",
+ "relevantVariables": [
+ "findIdentity",
+ "exec"
+ ]
+ },
+ "inputDataExample": "{\"certType\": \"Developer ID Application\", \"qualifier\": \"Developer ID Application: John Doe (A1B2C3D4E5)\", \"keychainFile\": \"/var/folders/xyz/temp.keychain\"}",
+ "outputDataExample": "{\"identity\": {\"name\": \"Developer ID Application: John Doe (A1B2C3D4E5)\", \"hash\": \"A1B2C3D4E5F6...\"}}"
+ },
+ {
+ "simStepId": "6a8db384-4dcc-42d9-9027-3060e3b175ae",
+ "diagramNodeId": "f8595bd8-1c4d-44ad-ae95-775057e1b6d6",
+ "simStepLabel": "macOS Flow: Return Found Identity",
+ "simStepDescription": "The found identity object, containing its name and hash, is returned to the `MacPackager` to be used for signing.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/app-builder-lib/src/macPackager.ts",
+ "startLine": "281",
+ "endLine": "281",
+ "relevantVariables": [
+ "identity"
+ ]
+ },
+ "inputDataExample": "{\"identity\": {\"name\": \"Developer ID Application: John Doe (A1B2C3D4E5)\", \"hash\": \"A1B2C3D4E5F6...\"}}",
+ "outputDataExample": "{\"identity\": {\"name\": \"Developer ID Application: John Doe (A1B2C3D4E5)\", \"hash\": \"A1B2C3D4E5F6...\"}}"
+ },
+ {
+ "simStepId": "97bbd682-da9b-492d-b030-4285b15bd321",
+ "diagramNodeId": "28c71da0-5e31-4d8d-b009-41257cc99b0a",
+ "simStepLabel": "macOS Flow: Prepare Signing Options",
+ "simStepDescription": "Back in `MacPackager.sign`, a `SignOptions` object is constructed. This object consolidates all parameters for the `@electron/osx-sign` library, including the app path, platform, entitlements files, provisioning profiles, and the identity to use.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/app-builder-lib/src/macPackager.ts",
+ "startLine": "327",
+ "endLine": "380",
+ "relevantVariables": [
+ "signOptions",
+ "getOptionsForFile"
+ ]
+ },
+ "inputDataExample": "{\"identity\": {\"name\": \"Developer ID Application: John Doe...\", \"hash\": \"A1B2...\"}}",
+ "outputDataExample": "{\"signOptions\": {\"app\": \"/path/to/dist/mac/My App.app\", \"identityValidation\": false, \"identity\": \"Developer ID Application: John Doe...\", \"platform\": \"darwin\", \"entitlements\": \"build/entitlements.mac.plist\"}}"
+ },
+ {
+ "simStepId": "4328bbdc-e3fb-4085-9390-84884cd48c9f",
+ "diagramNodeId": "c433c0ec-59c7-4b2f-80d7-2e4982a342f7",
+ "simStepLabel": "macOS Flow: Pass Options to Signing Dispatcher",
+ "simStepDescription": "The fully constructed `SignOptions` object is passed to the `doSign` method, which will handle the actual execution of the signing process.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/app-builder-lib/src/macPackager.ts",
+ "startLine": "382",
+ "endLine": "382",
+ "relevantVariables": [
+ "doSign"
+ ]
+ },
+ "inputDataExample": "{\"signOptions\": {\"app\": \"/path/to/dist/mac/My App.app\", \"identityValidation\": false, \"identity\": \"Developer ID Application: John Doe...\", \"platform\": \"darwin\", \"entitlements\": \"build/entitlements.mac.plist\"}}",
+ "outputDataExample": "{\"signOptions\": {\"app\": \"/path/to/dist/mac/My App.app\", \"identityValidation\": false, \"identity\": \"Developer ID Application: John Doe...\", \"platform\": \"darwin\", \"entitlements\": \"build/entitlements.mac.plist\"}}"
+ },
+ {
+ "simStepId": "a119fc5e-3525-4cdd-ba24-3a0b7ac93322",
+ "diagramNodeId": "8b8e45bd-f24c-42b3-8e47-416b96196902",
+ "simStepLabel": "macOS Flow: Dispatch to Signing Function",
+ "simStepDescription": "The `doSign` method acts as a dispatcher. It checks if a custom signing function is defined in the configuration. If not, it proceeds to call the default `sign` wrapper function, passing along the prepared `SignOptions`.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/app-builder-lib/src/macPackager.ts",
+ "startLine": "453",
+ "endLine": "479",
+ "relevantVariables": [
+ "doSign",
+ "customSign",
+ "resolveFunction",
+ "sign"
+ ]
+ },
+ "inputDataExample": "{\"signOptions\": {\"app\": \"/path/to/dist/mac/My App.app\", \"identity\": \"...\"}}",
+ "outputDataExample": "{\"opts\": {\"app\": \"/path/to/dist/mac/My App.app\", \"identity\": \"...\"}}"
+ },
+ {
+ "simStepId": "761fca63-a8ef-4e94-a809-4f60ca1b8cdc",
+ "diagramNodeId": "9b685a22-2fd9-4d43-9a60-a02f205df3b7",
+ "simStepLabel": "macOS Flow: Pass Options to Signing Library",
+ "simStepDescription": "The `SignOptions` are passed to the `sign` wrapper function, which interfaces with the underlying `@electron/osx-sign` library.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/app-builder-lib/src/macPackager.ts",
+ "startLine": "478",
+ "endLine": "478",
+ "relevantVariables": [
+ "sign"
+ ]
+ },
+ "inputDataExample": "{\"opts\": {\"app\": \"/path/to/dist/mac/My App.app\", \"identity\": \"...\"}}",
+ "outputDataExample": "{\"opts\": {\"app\": \"/path/to/dist/mac/My App.app\", \"identity\": \"...\"}}"
+ },
+ {
+ "simStepId": "35fc7def-dda5-4e5e-8103-4c2927dd8573",
+ "diagramNodeId": "06fcb9fa-ee67-41e3-9a95-709b4f65b20c",
+ "simStepLabel": "macOS Flow: Execute `codesign` via Library",
+ "simStepDescription": "The `sign` function in `macCodeSign.ts` calls `signAsync` from the `@electron/osx-sign` library. This library is responsible for recursively signing all components of the application bundle by invoking Apple's native `codesign` command-line tool. The operation is wrapped in a retry mechanism to handle transient network errors with timestamp servers.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/app-builder-lib/src/codeSign/macCodeSign.ts",
+ "startLine": "212",
+ "endLine": "221",
+ "relevantVariables": [
+ "sign",
+ "retry",
+ "signAsync"
+ ]
+ },
+ "inputDataExample": "{\"opts\": {\"app\": \"/path/to/dist/mac/My App.app\", \"identity\": \"...\"}}",
+ "outputDataExample": "{\"result\": \"success\"}"
+ }
+ ],
+ "description": "- Code signing is crucial for user trust and avoiding security warnings from the operating system
- Electron-builder automates this complex process
- - For Windows, it integrates with
signtool - exe or Azure Trusted Signing to sign executables and installers
- - For macOS, it handles certificate management within the keychain, signs the app bundle, and can perform notarization
- - This ensures that applications are not blocked by Gatekeeper on macOS or SmartScreen on Windows
- - Implementation can be found in
packages/app-builder-lib/src/codeSign/ and within the sign methods of winPackager - ts and
macPackager - ts
",
+ "simulationNodesAndEdges": {
+ "3b08ebb3-0526-4973-84fe-4ce072a15b9d": {
+ "simStepIds": [
+ "4288fc8b-b291-4fa5-9bc2-1dee9507e0be"
+ ]
+ },
+ "1b4b5157-2e39-4f8a-9cbd-ed1dc0214043": {
+ "simStepIds": [
+ "2d08d950-792c-4739-bc87-37a2a96b867f"
+ ]
+ },
+ "74b87e43-0809-4711-963c-6cbd695cb4e7": {
+ "simStepIds": [
+ "b146ef73-cea7-4625-9ae9-535b6ae48653"
+ ]
+ },
+ "2ff70e5a-9fe9-4d5e-b386-5a13af933d5a": {
+ "simStepIds": [
+ "b6edc4d8-77cf-4961-a541-1fcdd7d0347a"
+ ]
+ },
+ "0ccca601-22f1-4b53-9e3e-531e5754fc2b": {
+ "simStepIds": [
+ "18bd8074-291c-4596-8cf2-3bf6c02c9e9f"
+ ]
+ },
+ "22874821-7199-449c-b0a7-3556d0b42732": {
+ "simStepIds": [
+ "50d2bb50-cee4-401b-b8a7-7fbd146bb349"
+ ]
+ },
+ "c7b24ba6-d237-4472-a014-65d332ded496": {
+ "simStepIds": [
+ "23327905-d34a-4a79-9d63-8922931f6c79"
+ ]
+ },
+ "28c71da0-5e31-4d8d-b009-41257cc99b0a": {
+ "simStepIds": [
+ "97bbd682-da9b-492d-b030-4285b15bd321"
+ ]
+ },
+ "8b8e45bd-f24c-42b3-8e47-416b96196902": {
+ "simStepIds": [
+ "a119fc5e-3525-4cdd-ba24-3a0b7ac93322"
+ ]
+ },
+ "06fcb9fa-ee67-41e3-9a95-709b4f65b20c": {
+ "simStepIds": [
+ "35fc7def-dda5-4e5e-8103-4c2927dd8573"
+ ]
+ },
+ "1dcf9897-7ff7-4f6b-9b73-e209504e2abb": {
+ "simStepIds": [
+ "8a86f3d3-61b9-42b9-b537-52580a09626c"
+ ]
+ },
+ "6dccc7db-69c6-45da-af72-194e9a0ce5a5": {
+ "simStepIds": [
+ "2527dfd9-d18d-48e9-9c70-331e8622cf1c"
+ ]
+ },
+ "20ca941e-4d3e-4d86-8e75-7b8324dc8bde": {
+ "simStepIds": [
+ "f36b28a3-53c0-4e40-b751-a80bf3a331e2"
+ ]
+ },
+ "79435eaa-f540-4ac4-ac0c-d9443c652a7d": {
+ "simStepIds": [
+ "99a550ab-cc26-4fb5-b5aa-535a2b7158e3"
+ ]
+ },
+ "54514d16-ec1d-40b8-a2b8-683260f781fe": {
+ "simStepIds": [
+ "5240ff1b-0201-4f99-ac3f-c903033da0b9"
+ ]
+ },
+ "f8595bd8-1c4d-44ad-ae95-775057e1b6d6": {
+ "simStepIds": [
+ "6a8db384-4dcc-42d9-9027-3060e3b175ae"
+ ]
+ },
+ "c433c0ec-59c7-4b2f-80d7-2e4982a342f7": {
+ "simStepIds": [
+ "4328bbdc-e3fb-4085-9390-84884cd48c9f"
+ ]
+ },
+ "9b685a22-2fd9-4d43-9a60-a02f205df3b7": {
+ "simStepIds": [
+ "761fca63-a8ef-4e94-a809-4f60ca1b8cdc"
+ ]
+ }
+ },
+ "isAIGenerated": true,
+ "keywords": "sign, macCodeSign, windowsCodeSign",
+ "generationPrompt": "Automate code signing for macOS and Windows applications.",
+ "generationKeywords": "sign, macCodeSign, windowsCodeSign"
+ },
+ "Create a wide variety of native installer and package types for each platform.": {
+ "name": "Create a wide variety of native installer and package types for each platform.",
+ "simSteps": [
+ {
+ "simStepId": "c20bbd4c-5d31-417a-86e0-762238818638",
+ "diagramNodeId": "7403828c-0aba-40c6-817f-4af67f25a2c1",
+ "simStepLabel": "Windows NSIS Flow: Create Windows Targets",
+ "simStepDescription": "The build process for Windows starts in the `WinPackager`. It reads the `win` configuration and iterates through the specified targets (e.g., 'nsis', 'msi', 'portable'). For each target, it instantiates the corresponding target handler class.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/app-builder-lib/src/winPackager.ts",
+ "startLine": "77",
+ "endLine": "90",
+ "relevantVariables": [
+ "createTargets",
+ "mapper",
+ "NsisTarget",
+ "WebInstallerTarget",
+ "MsiTarget",
+ "AppXTarget"
+ ]
+ },
+ "inputDataExample": "{\"config\": {\"win\": {\"target\": [\"nsis\"]}, \"productName\": \"My App\", \"appId\": \"com.example.myapp\"}}",
+ "outputDataExample": "{\"targetInstances\": [{\"name\": \"nsis\", \"class\": \"NsisTarget\"}]}"
+ },
+ {
+ "simStepId": "041b2d19-f750-4d0e-8f0f-a91d2d124432",
+ "diagramNodeId": "982b9edd-2167-406b-aeed-af8f1553feb3",
+ "simStepLabel": "Windows NSIS Flow: Instantiate NsisTarget",
+ "simStepDescription": "The `WinPackager` creates a new instance of `NsisTarget`, passing general packaging information, the output directory, the target name ('nsis'), and helper utilities.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/app-builder-lib/src/winPackager.ts",
+ "startLine": "80",
+ "endLine": "80",
+ "relevantVariables": [
+ "NsisTarget"
+ ]
+ },
+ "inputDataExample": "{\"packager\": \"\", \"outDir\": \"/path/to/project/dist\", \"name\": \"nsis\", \"helper\": \"\"}",
+ "outputDataExample": "{\"packager\": \"\", \"outDir\": \"/path/to/project/dist\", \"name\": \"nsis\", \"helper\": \"\"}"
+ },
+ {
+ "simStepId": "1b826f7f-e8d7-4b05-9322-ff4709046fe0",
+ "diagramNodeId": "fe422f63-e4ad-4b1d-aa55-feaeb4eceb96",
+ "simStepLabel": "Windows NSIS Flow: Initialize NsisTarget",
+ "simStepDescription": "The `NsisTarget` constructor is called. It initializes its configuration by merging user-defined options and resolves them globally so other parts of the NSIS build process can access them.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/app-builder-lib/src/targets/nsis/NsisTarget.ts",
+ "startLine": "70",
+ "endLine": "87",
+ "relevantVariables": [
+ "constructor",
+ "this.options",
+ "NsisTargetOptions.resolve"
+ ]
+ },
+ "inputDataExample": "{\"options\": {\"oneClick\": true, \"perMachine\": false, \"allowToChangeInstallationDirectory\": false}}",
+ "outputDataExample": "{\"resolvedOptions\": {\"oneClick\": true, \"perMachine\": false, \"allowToChangeInstallationDirectory\": false}, \"archs\": {}}"
+ },
+ {
+ "simStepId": "d45fcb34-e2dd-47c6-948f-5822293d6ea4",
+ "diagramNodeId": "1d00246f-3364-4904-8681-1ba47e5dd92f",
+ "simStepLabel": "Windows NSIS Flow: Send Build Request",
+ "simStepDescription": "The packager invokes the `build` method on the `NsisTarget` instance for each specified architecture, providing the path to the packaged application directory.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/app-builder-lib/src/targets/nsis/NsisTarget.ts",
+ "startLine": "91",
+ "endLine": "91",
+ "relevantVariables": [
+ "build"
+ ]
+ },
+ "inputDataExample": "{\"appOutDir\": \"/path/to/project/dist/win-unpacked\", \"arch\": \"x64\"}",
+ "outputDataExample": "{\"appOutDir\": \"/path/to/project/dist/win-unpacked\", \"arch\": \"x64\"}"
+ },
+ {
+ "simStepId": "0440be1c-5d63-4394-ab24-ea4b28cc65e7",
+ "diagramNodeId": "495c3478-2ce2-4185-a2be-c5aca27859ec",
+ "simStepLabel": "Windows NSIS Flow: Generate NSIS Script",
+ "simStepDescription": "The `build` method triggers the core logic in `buildInstaller`. This involves creating an `NsisScriptGenerator` instance, which gathers all configuration (e.g., one-click install, languages, license file) and generates a complete `.nsi` script file.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/app-builder-lib/src/targets/nsis/NsisTarget.ts",
+ "startLine": "208",
+ "endLine": "213",
+ "relevantVariables": [
+ "buildInstaller",
+ "NsisScriptGenerator",
+ "scriptGenerator.generate"
+ ]
+ },
+ "inputDataExample": "{\"archs\": {\"x64\": \"/path/to/project/dist/win-unpacked\"}}",
+ "outputDataExample": "{\"nsiScriptPath\": \"/path/to/project/dist/builder-effective-config.nsi\"}"
+ },
+ {
+ "simStepId": "8d9ebb2a-baa9-454e-bccf-5a66b0b77dd8",
+ "diagramNodeId": "05c03c70-1504-4ff7-aeb1-929d4b6e7fa3",
+ "simStepLabel": "Windows NSIS Flow: Pass Script to Compiler",
+ "simStepDescription": "The path to the generated `.nsi` script is passed to the `makensis.exe` compiler, which is downloaded on-demand by electron-builder.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/app-builder-lib/src/targets/nsis/NsisTarget.ts",
+ "startLine": "226",
+ "endLine": "226",
+ "relevantVariables": [
+ "this.executeMakensis"
+ ]
+ },
+ "inputDataExample": "{\"scriptPath\": \"/path/to/project/dist/builder-effective-config.nsi\", \"defines\": {\"MUI_ICON\": \"icon.ico\"}}",
+ "outputDataExample": "{\"scriptPath\": \"/path/to/project/dist/builder-effective-config.nsi\", \"defines\": {\"MUI_ICON\": \"icon.ico\"}}"
+ },
+ {
+ "simStepId": "7af80a58-e2ff-4994-8086-74c150d8e01b",
+ "diagramNodeId": "24c3955a-e236-4460-85b9-be1919149d6d",
+ "simStepLabel": "Windows NSIS Flow: Create Final Installer",
+ "simStepDescription": "The `makensis.exe` process compiles the script, packages the application files into an installer, signs it (if configured), and outputs the final installer `.exe` file.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/app-builder-lib/src/targets/nsis/NsisTarget.ts",
+ "startLine": "237",
+ "endLine": "237",
+ "relevantVariables": [
+ "doExecuteMakensis",
+ "spawn"
+ ]
+ },
+ "inputDataExample": "{\"command\": \"makensis.exe /V4 /INPUTCHARSET UTF8 /O \".../My App Setup 1.0.0.exe\" \".../builder-effective-config.nsi\"\"}",
+ "outputDataExample": "{\"artifactPath\": \"/path/to/project/dist/My App Setup 1.0.0.exe\"}"
+ },
+ {
+ "simStepId": "123a2d8e-40f0-4224-9b92-03e9f597b151",
+ "diagramNodeId": "7c693dce-0d3b-469c-a2cb-303aed172b2d",
+ "simStepLabel": "macOS DMG Flow: Create macOS Targets",
+ "simStepDescription": "The build process for macOS starts in the `MacPackager`. It reads the `mac` configuration and creates target handlers. For the 'dmg' target, it dynamically requires the `DmgTarget` class from the `dmg-builder` package.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/app-builder-lib/src/macPackager.ts",
+ "startLine": "97",
+ "endLine": "101",
+ "relevantVariables": [
+ "createTargets",
+ "DmgTarget",
+ "mapper"
+ ]
+ },
+ "inputDataExample": "{\"config\": {\"mac\": {\"target\": [\"dmg\"]}, \"productName\": \"My App\", \"appId\": \"com.example.myapp\"}}",
+ "outputDataExample": "{\"targetInstances\": [{\"name\": \"dmg\", \"class\": \"DmgTarget\"}]}"
+ },
+ {
+ "simStepId": "5707e597-a404-4a4e-a795-cbbdcb47800c",
+ "diagramNodeId": "2adadbcd-adc4-495c-952d-296a99fccae7",
+ "simStepLabel": "macOS DMG Flow: Instantiate DmgTarget",
+ "simStepDescription": "The `MacPackager` instantiates `DmgTarget`, passing itself as the packager context and specifying the output directory.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/app-builder-lib/src/macPackager.ts",
+ "startLine": "99",
+ "endLine": "99",
+ "relevantVariables": [
+ "DmgTarget"
+ ]
+ },
+ "inputDataExample": "{\"packager\": \"\", \"outDir\": \"/path/to/project/dist\"}",
+ "outputDataExample": "{\"packager\": \"\", \"outDir\": \"/path/to/project/dist\"}"
+ },
+ {
+ "simStepId": "ccde8a63-4634-46d5-b27a-7386cd56aed1",
+ "diagramNodeId": "69e62420-ece1-439c-9797-6ee5747e448d",
+ "simStepLabel": "macOS DMG Flow: Initialize DmgTarget",
+ "simStepDescription": "The `DmgTarget` constructor is called. It retrieves the DMG-specific options from the main build configuration (e.g., background image, icon size, window position).",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/dmg-builder/src/dmg.ts",
+ "startLine": "50",
+ "endLine": "55",
+ "relevantVariables": [
+ "constructor",
+ "this.packager.config.dmg",
+ "this.options"
+ ]
+ },
+ "inputDataExample": "{\"config\": {\"dmg\": {\"background\": \"build/background.png\", \"icon-size\": 80}}}",
+ "outputDataExample": "{\"options\": {\"background\": \"build/background.png\", \"icon-size\": 80}}"
+ },
+ {
+ "simStepId": "e015f28f-5c4a-4082-9f5e-51692004e37c",
+ "diagramNodeId": "0c54dbe6-d777-4bd6-8670-dab093141a01",
+ "simStepLabel": "macOS DMG Flow: Send Build Request",
+ "simStepDescription": "The packager framework calls the `build` method on the `DmgTarget` instance, providing the path to the packaged `.app` bundle and the target architecture.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/dmg-builder/src/dmg.ts",
+ "startLine": "57",
+ "endLine": "57",
+ "relevantVariables": [
+ "build"
+ ]
+ },
+ "inputDataExample": "{\"appPath\": \"/path/to/project/dist/mac/My App.app\", \"arch\": \"x64\"}",
+ "outputDataExample": "{\"appPath\": \"/path/to/project/dist/mac/My App.app\", \"arch\": \"x64\"}"
+ },
+ {
+ "simStepId": "2ebbc873-fff7-458e-8a1f-31664437c8bb",
+ "diagramNodeId": "69416989-dca4-460a-beb1-fd729eef1b8b",
+ "simStepLabel": "macOS DMG Flow: Generate DMG Specification",
+ "simStepDescription": "The `build` method computes the final DMG configuration, including window size, icon positions, and license information. This configuration is formatted into a JSON specification file for the underlying `dmgbuild` tool.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/dmg-builder/src/dmg.ts",
+ "startLine": "59",
+ "endLine": "59",
+ "relevantVariables": [
+ "this.computeDmgOptions"
+ ]
+ },
+ "inputDataExample": "{\"options\": {\"title\": \"My App\", \"contents\": [{\"x\": 100, \"y\": 100, \"type\": \"file\", \"path\": \"/path/to/My App.app\"}]}}",
+ "outputDataExample": "{\"specFilePath\": \"/tmp/dmg-spec-12345.json\", \"spec\": {\"title\": \"My App\", \"window\": {\"size\": {\"width\": 600, \"height\": 400}}, ...}}"
+ },
+ {
+ "simStepId": "1f6d7419-07a9-4531-84f7-848fd0a10104",
+ "diagramNodeId": "5f31e988-7e58-447f-9556-72db1ff78e5f",
+ "simStepLabel": "macOS DMG Flow: Pass Spec to Build Script",
+ "simStepDescription": "The generated specification file and other parameters are passed to the `buildDmg` utility function, which orchestrates the execution of the underlying Python-based `dmgbuild` script.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/dmg-builder/src/dmg.ts",
+ "startLine": "67",
+ "endLine": "67",
+ "relevantVariables": [
+ "buildDmg"
+ ]
+ },
+ "inputDataExample": "{\"specFilePath\": \"/tmp/dmg-spec-12345.json\", \"dmgPath\": \"/path/to/project/dist/My App-1.0.0.dmg\"}",
+ "outputDataExample": "{\"specFilePath\": \"/tmp/dmg-spec-12345.json\", \"dmgPath\": \"/path/to/project/dist/My App-1.0.0.dmg\"}"
+ },
+ {
+ "simStepId": "c4168afd-776c-4d32-938b-21977d48a8ec",
+ "diagramNodeId": "a0fdeb83-ac4d-4aa8-9600-ad4a7e11c3d6",
+ "simStepLabel": "macOS DMG Flow: Create Final DMG",
+ "simStepDescription": "The `dmgbuild` script runs, creating a temporary disk image, copying the application and other files, applying the custom background and icon layout, and compressing it into the final `.dmg` artifact. The DMG is then signed if code signing is configured.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/dmg-builder/src/dmg.ts",
+ "startLine": "60",
+ "endLine": "67",
+ "relevantVariables": [
+ "signDmg",
+ "buildDmg"
+ ]
+ },
+ "inputDataExample": "{\"command\": \"dmgbuild -s /tmp/dmg-spec-12345.json 'My App' '/path/to/My App-1.0.0.dmg'\"}",
+ "outputDataExample": "{\"artifactPath\": \"/path/to/project/dist/My App-1.0.0.dmg\"}"
+ },
+ {
+ "simStepId": "8d9c5dd8-e803-4f89-a44c-99db706e647b",
+ "diagramNodeId": "aa87ed82-537f-472f-a506-e1920a574fd9",
+ "simStepLabel": "Linux AppImage Flow: Create Linux Targets",
+ "simStepDescription": "The `LinuxPackager` initiates the Linux build. It identifies 'appimage' as a target and dynamically requires the `AppImageTarget` class.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/app-builder-lib/src/linuxPackager.ts",
+ "startLine": "44",
+ "endLine": "58",
+ "relevantVariables": [
+ "createTargets",
+ "targetClass",
+ "AppImageTarget"
+ ]
+ },
+ "inputDataExample": "{\"config\": {\"linux\": {\"target\": [\"AppImage\"]}, \"productName\": \"My App\", \"appId\": \"com.example.myapp\"}}",
+ "outputDataExample": "{\"targetInstances\": [{\"name\": \"appimage\", \"class\": \"AppImageTarget\"}]}"
+ },
+ {
+ "simStepId": "a85a4c67-02bf-47df-b864-5af60492135e",
+ "diagramNodeId": "57c52626-9ccb-4a54-9158-87016f335c02",
+ "simStepLabel": "Linux AppImage Flow: Instantiate AppImageTarget",
+ "simStepDescription": "An instance of `AppImageTarget` is created, receiving the packager context, a Linux-specific helper class, and the output directory.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/app-builder-lib/src/linuxPackager.ts",
+ "startLine": "70",
+ "endLine": "70",
+ "relevantVariables": [
+ "targetClass"
+ ]
+ },
+ "inputDataExample": "{\"packager\": \"\", \"helper\": \"\", \"outDir\": \"/path/to/project/dist\"}",
+ "outputDataExample": "{\"packager\": \"\", \"helper\": \"\", \"outDir\": \"/path/to/project/dist\"}"
+ },
+ {
+ "simStepId": "9736c6d2-d7dc-42b1-9755-113d4a532b88",
+ "diagramNodeId": "98d1be17-6dc1-472b-bc92-8d973457024f",
+ "simStepLabel": "Linux AppImage Flow: Initialize AppImageTarget",
+ "simStepDescription": "The `AppImageTarget` constructor is called. It reads AppImage-specific options and sets up a lazy-initialized property for the `.desktop` entry file, which is required for desktop integration.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/app-builder-lib/src/targets/AppImageTarget.ts",
+ "startLine": "18",
+ "endLine": "33",
+ "relevantVariables": [
+ "constructor",
+ "this.options",
+ "this.desktopEntry"
+ ]
+ },
+ "inputDataExample": "{\"options\": {\"category\": \"Utility\", \"license\": \"LICENSE.txt\"}}",
+ "outputDataExample": "{\"options\": {\"category\": \"Utility\", \"license\": \"LICENSE.txt\"}, \"desktopEntry\": \"\"}"
+ },
+ {
+ "simStepId": "e641d563-f23d-43f2-ae48-82b1c266f96c",
+ "diagramNodeId": "a113743d-a410-4bf2-8f3d-8d748b536837",
+ "simStepLabel": "Linux AppImage Flow: Send Build Request",
+ "simStepDescription": "The packager calls the `build` method on the `AppImageTarget` instance, passing the path to the packaged application directory.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/app-builder-lib/src/targets/AppImageTarget.ts",
+ "startLine": "35",
+ "endLine": "35",
+ "relevantVariables": [
+ "build"
+ ]
+ },
+ "inputDataExample": "{\"appOutDir\": \"/path/to/project/dist/linux-unpacked\", \"arch\": \"x64\"}",
+ "outputDataExample": "{\"appOutDir\": \"/path/to/project/dist/linux-unpacked\", \"arch\": \"x64\"}"
+ },
+ {
+ "simStepId": "24830eda-2b3b-438e-bdfb-323fcfe8fb35",
+ "diagramNodeId": "81b53eee-ba91-4e7b-98a8-d3ee9d3d07ea",
+ "simStepLabel": "Linux AppImage Flow: Prepare Staging Directory",
+ "simStepDescription": "The `build` method creates a staging directory. It then copies the application files, the icon, a startup script (`AppRun`), and the generated `.desktop` file into this directory, following the structure required by `appimagetool`.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/app-builder-lib/src/targets/AppImageTarget.ts",
+ "startLine": "38",
+ "endLine": "64",
+ "relevantVariables": [
+ "createStageDir",
+ "helper.copyIcons",
+ "outputFile",
+ "copyFile"
+ ]
+ },
+ "inputDataExample": "{\"appOutDir\": \"/path/to/project/dist/linux-unpacked\"}",
+ "outputDataExample": "{\"stageDir\": \"/tmp/app-image-stage-12345\", \"contents\": [\"usr/\", \"AppRun\", \"myapp.desktop\", \"myapp.png\"]}"
+ },
+ {
+ "simStepId": "b9e64687-ae13-4949-930e-c6e38daec0dc",
+ "diagramNodeId": "a17bd16d-9cea-4c97-8106-fe4886ca8e56",
+ "simStepLabel": "Linux AppImage Flow: Pass Staging Info to App Builder",
+ "simStepDescription": "The path to the completed staging directory and other build options (like compression level) are prepared as arguments for the `app-builder` command-line tool.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/app-builder-lib/src/targets/AppImageTarget.ts",
+ "startLine": "68",
+ "endLine": "73",
+ "relevantVariables": [
+ "args"
+ ]
+ },
+ "inputDataExample": "{\"stageDir\": \"/tmp/app-image-stage-12345\", \"arch\": \"x64\", \"artifactPath\": \"/path/to/project/dist/My App-1.0.0.AppImage\"}",
+ "outputDataExample": "{\"stageDir\": \"/tmp/app-image-stage-12345\", \"arch\": \"x64\", \"artifactPath\": \"/path/to/project/dist/My App-1.0.0.AppImage\"}"
+ },
+ {
+ "simStepId": "5aeb5fa0-51e1-4bf8-bd3c-d84653ad3d95",
+ "diagramNodeId": "3a0d0c85-ec29-4c27-a53b-073051b71759",
+ "simStepLabel": "Linux AppImage Flow: Create Final AppImage",
+ "simStepDescription": "`electron-builder` executes its helper tool, `app-builder`, which in turn calls `appimagetool`. This tool takes the staging directory and packages it into a single, self-contained, executable `.AppImage` file.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/app-builder-lib/src/targets/AppImageTarget.ts",
+ "startLine": "74",
+ "endLine": "74",
+ "relevantVariables": [
+ "executeAppBuilderAsJson"
+ ]
+ },
+ "inputDataExample": "{\"command\": \"app-builder appimage\", \"args\": {\"--stage\": \"/tmp/app-image-stage-12345\", ...}}",
+ "outputDataExample": "{\"artifactPath\": \"/path/to/project/dist/My App-1.0.0.AppImage\"}"
+ }
+ ],
+ "description": "- Beyond a simple executable, electron-builder creates professional, native installation experiences tailored to each operating system
- - For Windows, it builds NSIS installers (including web installers and portable versions), MSI, and AppX packages
- - For macOS, it creates customizable DMG disk images and PKG installers
- - For Linux, it supports universal formats like AppImage and Snap, as well as native package manager formats like deb and rpm
- - This logic is implemented in the
packages/app-builder-lib/src/targets/ directory and related packages like dmg-builder
",
+ "simulationNodesAndEdges": {
+ "7403828c-0aba-40c6-817f-4af67f25a2c1": {
+ "simStepIds": [
+ "c20bbd4c-5d31-417a-86e0-762238818638"
+ ]
+ },
+ "fe422f63-e4ad-4b1d-aa55-feaeb4eceb96": {
+ "simStepIds": [
+ "1b826f7f-e8d7-4b05-9322-ff4709046fe0"
+ ]
+ },
+ "495c3478-2ce2-4185-a2be-c5aca27859ec": {
+ "simStepIds": [
+ "0440be1c-5d63-4394-ab24-ea4b28cc65e7"
+ ]
+ },
+ "24c3955a-e236-4460-85b9-be1919149d6d": {
+ "simStepIds": [
+ "7af80a58-e2ff-4994-8086-74c150d8e01b"
+ ]
+ },
+ "7c693dce-0d3b-469c-a2cb-303aed172b2d": {
+ "simStepIds": [
+ "123a2d8e-40f0-4224-9b92-03e9f597b151"
+ ]
+ },
+ "69e62420-ece1-439c-9797-6ee5747e448d": {
+ "simStepIds": [
+ "ccde8a63-4634-46d5-b27a-7386cd56aed1"
+ ]
+ },
+ "69416989-dca4-460a-beb1-fd729eef1b8b": {
+ "simStepIds": [
+ "2ebbc873-fff7-458e-8a1f-31664437c8bb"
+ ]
+ },
+ "a0fdeb83-ac4d-4aa8-9600-ad4a7e11c3d6": {
+ "simStepIds": [
+ "c4168afd-776c-4d32-938b-21977d48a8ec"
+ ]
+ },
+ "aa87ed82-537f-472f-a506-e1920a574fd9": {
+ "simStepIds": [
+ "8d9c5dd8-e803-4f89-a44c-99db706e647b"
+ ]
+ },
+ "98d1be17-6dc1-472b-bc92-8d973457024f": {
+ "simStepIds": [
+ "9736c6d2-d7dc-42b1-9755-113d4a532b88"
+ ]
+ },
+ "81b53eee-ba91-4e7b-98a8-d3ee9d3d07ea": {
+ "simStepIds": [
+ "24830eda-2b3b-438e-bdfb-323fcfe8fb35"
+ ]
+ },
+ "3a0d0c85-ec29-4c27-a53b-073051b71759": {
+ "simStepIds": [
+ "5aeb5fa0-51e1-4bf8-bd3c-d84653ad3d95"
+ ]
+ },
+ "982b9edd-2167-406b-aeed-af8f1553feb3": {
+ "simStepIds": [
+ "041b2d19-f750-4d0e-8f0f-a91d2d124432"
+ ]
+ },
+ "1d00246f-3364-4904-8681-1ba47e5dd92f": {
+ "simStepIds": [
+ "d45fcb34-e2dd-47c6-948f-5822293d6ea4"
+ ]
+ },
+ "05c03c70-1504-4ff7-aeb1-929d4b6e7fa3": {
+ "simStepIds": [
+ "8d9ebb2a-baa9-454e-bccf-5a66b0b77dd8"
+ ]
+ },
+ "2adadbcd-adc4-495c-952d-296a99fccae7": {
+ "simStepIds": [
+ "5707e597-a404-4a4e-a795-cbbdcb47800c"
+ ]
+ },
+ "0c54dbe6-d777-4bd6-8670-dab093141a01": {
+ "simStepIds": [
+ "e015f28f-5c4a-4082-9f5e-51692004e37c"
+ ]
+ },
+ "5f31e988-7e58-447f-9556-72db1ff78e5f": {
+ "simStepIds": [
+ "1f6d7419-07a9-4531-84f7-848fd0a10104"
+ ]
+ },
+ "57c52626-9ccb-4a54-9158-87016f335c02": {
+ "simStepIds": [
+ "a85a4c67-02bf-47df-b864-5af60492135e"
+ ]
+ },
+ "a113743d-a410-4bf2-8f3d-8d748b536837": {
+ "simStepIds": [
+ "e641d563-f23d-43f2-ae48-82b1c266f96c"
+ ]
+ },
+ "a17bd16d-9cea-4c97-8106-fe4886ca8e56": {
+ "simStepIds": [
+ "b9e64687-ae13-4949-930e-c6e38daec0dc"
+ ]
+ }
+ },
+ "isAIGenerated": true,
+ "keywords": "NsisTarget, DmgTarget, AppImageTarget",
+ "generationPrompt": "Create a wide variety of native installer and package types for each platform.",
+ "generationKeywords": "NsisTarget, DmgTarget, AppImageTarget"
+ },
+ "Generate and apply differential (blockmap) updates to reduce download sizes.": {
+ "name": "Generate and apply differential (blockmap) updates to reduce download sizes.",
+ "simSteps": [
+ {
+ "simStepId": "cbef6d99-0092-44e9-8f7d-a906ed08ee43",
+ "diagramNodeId": "a00f4320-0a01-4719-bc2b-f63e47aca5be",
+ "simStepLabel": "Build: Start Differential Update Info Generation",
+ "simStepDescription": "During the application build process for a target that supports differential updates (like NSIS web installers or AppImage), the builder initiates the creation of blockmap data after packaging the application.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/app-builder-lib/src/targets/nsis/NsisTarget.ts",
+ "startLine": "111",
+ "endLine": "127",
+ "relevantVariables": [
+ "NsisTarget.buildAppPackage",
+ "configureDifferentialAwareArchiveOptions",
+ "appendBlockmap"
+ ]
+ },
+ "inputDataExample": "{\n \"target\": \"nsis-web\",\n \"arch\": \"x64\",\n \"appOutDir\": \"/path/to/project/dist/win-unpacked\"\n}",
+ "outputDataExample": "{\n \"archiveFile\": \"/path/to/project/dist/My App-1.1.0-x64.nsis.7z\"\n}"
+ },
+ {
+ "simStepId": "64d695b2-76c0-4395-a429-e972ea83b1ea",
+ "diagramNodeId": "acb4fe96-2a4f-486e-858e-a48264459d0a",
+ "simStepLabel": "Build: Pass Archive for Blockmap Creation",
+ "simStepDescription": "The path to the newly created application archive is passed to the blockmap generation function.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/app-builder-lib/src/targets/nsis/NsisTarget.ts",
+ "startLine": "121",
+ "endLine": "121",
+ "relevantVariables": [
+ "archiveFile"
+ ]
+ },
+ "inputDataExample": "{\n \"archiveFile\": \"/path/to/project/dist/My App-1.1.0-x64.nsis.7z\"\n}",
+ "outputDataExample": "{\n \"archiveFile\": \"/path/to/project/dist/My App-1.1.0-x64.nsis.7z\"\n}"
+ },
+ {
+ "simStepId": "9522c0b4-daee-4514-bde9-cd4721af3e38",
+ "diagramNodeId": "2f7511dc-15d6-4e25-b5bb-06315e90b41f",
+ "simStepLabel": "Build: Generate and Append Blockmap",
+ "simStepDescription": "The `appendBlockmap` function is called, which in turn executes the `app-builder blockmap` command-line tool. This tool reads the archive file, divides it into blocks, calculates checksums for each block, and appends this blockmap data to the end of the archive file itself.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/app-builder-lib/src/targets/differentialUpdateInfoBuilder.ts",
+ "startLine": "66",
+ "endLine": "69",
+ "relevantVariables": [
+ "appendBlockmap",
+ "executeAppBuilderAsJson"
+ ]
+ },
+ "inputDataExample": "{\n \"file\": \"/path/to/project/dist/My App-1.1.0-x64.nsis.7z\"\n}",
+ "outputDataExample": "{\n \"size\": 5432101, \n \"sha512\": \"...\",\n \"blockMapSize\": 12345\n}"
+ },
+ {
+ "simStepId": "37bfdf5a-4be2-4246-8060-92e5fefa4883",
+ "diagramNodeId": "7910427f-6c29-4c98-9a3b-eb221a158522",
+ "simStepLabel": "Build: Return Blockmap Metadata",
+ "simStepDescription": "The result of the blockmap generation, containing the size of the file, its checksum, and the size of the appended blockmap data, is returned.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/app-builder-lib/src/targets/differentialUpdateInfoBuilder.ts",
+ "startLine": "68",
+ "endLine": "68",
+ "relevantVariables": [
+ "BlockMapDataHolder"
+ ]
+ },
+ "inputDataExample": "{\n \"size\": 5432101, \n \"sha512\": \"...\",\n \"blockMapSize\": 12345\n}",
+ "outputDataExample": "{\n \"size\": 5432101, \n \"sha512\": \"...\",\n \"blockMapSize\": 12345\n}"
+ },
+ {
+ "simStepId": "4ea7d980-dc32-4761-960e-8280a7b4b574",
+ "diagramNodeId": "371ccf87-8f70-439b-8538-2d3d6c216bfe",
+ "simStepLabel": "Build: Create Standalone Blockmap File (Alternative)",
+ "simStepDescription": "For targets that do not embed the blockmap (e.g., standard NSIS installers), the `createBlockmap` function is used instead. It executes `app-builder blockmap` to generate a separate `.blockmap` file alongside the main installer artifact.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/app-builder-lib/src/targets/differentialUpdateInfoBuilder.ts",
+ "startLine": "71",
+ "endLine": "78",
+ "relevantVariables": [
+ "createBlockmap",
+ "executeAppBuilderAsJson"
+ ]
+ },
+ "inputDataExample": "{\n \"file\": \"/path/to/project/dist/My App Setup 1.1.0.exe\",\n \"target\": \"NsisTarget\",\n \"packager\": \"PlatformPackager\",\n \"safeArtifactName\": \"My-App-Setup-1.1.0.exe\"\n}",
+ "outputDataExample": "{\n \"file\": \"/path/to/project/dist/My App Setup 1.1.0.exe.blockmap\",\n \"size\": 5432101, \n \"sha512\": \"...\"\n}"
+ },
+ {
+ "simStepId": "464282fa-182a-4ea7-a7f5-12c0ff6a92ba",
+ "diagramNodeId": "7aeee163-7f35-4481-af78-afe997f2d97c",
+ "simStepLabel": "Update: Start Differential Download",
+ "simStepDescription": "On the client, after an update is detected, the updater logic determines that a differential download is possible and initiates the process.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/electron-updater/src/AppUpdater.ts",
+ "startLine": "800",
+ "endLine": "804",
+ "relevantVariables": [
+ "differentialDownloadInstaller"
+ ]
+ },
+ "inputDataExample": "{\n \"fileInfo\": {\n \"url\": \"https://example.com/My-App-Setup-1.1.0.exe\",\n \"info\": { \"sha512\": \"...\", \"size\": 5432101 }\n },\n \"downloadUpdateOptions\": { ... }\n}",
+ "outputDataExample": "{\n \"fileInfo\": {\n \"url\": \"https://example.com/My-App-Setup-1.1.0.exe\",\n \"info\": { \"sha512\": \"...\", \"size\": 5432101 }\n },\n \"downloadUpdateOptions\": { ... }\n}"
+ },
+ {
+ "simStepId": "b55b8474-d5dc-42ab-a0bc-74c99549ec1e",
+ "diagramNodeId": "8c41f7f5-5ee5-482c-a696-ee03c709cafe",
+ "simStepLabel": "Update: Fetch Blockmap URLs",
+ "simStepDescription": "The updater determines the URLs for both the new version's blockmap and the old version's blockmap. It calls the update provider, which constructs the URLs based on the artifact's file name and version numbers.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/electron-updater/src/AppUpdater.ts",
+ "startLine": "811",
+ "endLine": "816",
+ "relevantVariables": [
+ "provider.getBlockMapFiles"
+ ]
+ },
+ "inputDataExample": "{\n \"fileUrl\": \"https://example.com/My-App-Setup-1.1.0.exe\",\n \"currentVersion\": \"1.0.0\",\n \"newVersion\": \"1.1.0\"\n}",
+ "outputDataExample": "{\n \"blockmapFileUrls\": [\n \"https://example.com/My-App-Setup-1.0.0.exe.blockmap\",\n \"https://example.com/My-App-Setup-1.1.0.exe.blockmap\"\n ]\n}"
+ },
+ {
+ "simStepId": "7179d02e-af40-41d2-a61f-306d459dc742",
+ "diagramNodeId": "5ce4da31-ce3b-4faa-b8f7-d359d8f3a83a",
+ "simStepLabel": "Update: Download Blockmap Files",
+ "simStepDescription": "The URLs for the old and new blockmap files are used to download the blockmap data. The new blockmap is also cached for future updates.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/electron-updater/src/AppUpdater.ts",
+ "startLine": "818",
+ "endLine": "832",
+ "relevantVariables": [
+ "downloadBlockMap",
+ "httpExecutor.downloadToBuffer"
+ ]
+ },
+ "inputDataExample": "{\n \"blockmapFileUrls\": [\n \"https://example.com/My-App-Setup-1.0.0.exe.blockmap\",\n \"https://example.com/My-App-Setup-1.1.0.exe.blockmap\"\n ]\n}",
+ "outputDataExample": "{\n \"oldBlockMapData\": { \"version\": \"2\", \"files\": [...] },\n \"newBlockMapData\": { \"version\": \"2\", \"files\": [...] }\n}"
+ },
+ {
+ "simStepId": "5787a85b-1a5d-42f4-b854-fa7587b8fe52",
+ "diagramNodeId": "f669d111-adca-409b-b133-fb24351cfb69",
+ "simStepLabel": "Update: Initiate Differential Downloader",
+ "simStepDescription": "With both the old and new blockmap data available, a `GenericDifferentialDownloader` instance is created and its `download` method is called to begin comparing the blockmaps and downloading the differences.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/electron-updater/src/AppUpdater.ts",
+ "startLine": "877",
+ "endLine": "877",
+ "relevantVariables": [
+ "GenericDifferentialDownloader.download"
+ ]
+ },
+ "inputDataExample": "{\n \"oldBlockMapData\": { \"version\": \"2\", \"files\": [...] },\n \"newBlockMapData\": { \"version\": \"2\", \"files\": [...] }\n}",
+ "outputDataExample": "{\n \"status\": \"download complete\"\n}"
+ },
+ {
+ "simStepId": "6d01f25e-74b0-4f6e-81d7-f903844d7e5c",
+ "diagramNodeId": "e221f497-d04c-4564-894b-07273c80282b",
+ "simStepLabel": "Update: Pass Blockmaps for Plan Computation",
+ "simStepDescription": "The `download` method of the `GenericDifferentialDownloader` passes the blockmap data to the `doDownload` method, which then calls `computeOperations` to create a download plan.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/electron-updater/src/differentialDownloader/DifferentialDownloader.ts",
+ "startLine": "62",
+ "endLine": "62",
+ "relevantVariables": [
+ "computeOperations"
+ ]
+ },
+ "inputDataExample": "{\n \"oldBlockMap\": { \"version\": \"2\", \"files\": [...] },\n \"newBlockMap\": { \"version\": \"2\", \"files\": [...] }\n}",
+ "outputDataExample": "{\n \"oldBlockMap\": { \"version\": \"2\", \"files\": [...] },\n \"newBlockMap\": { \"version\": \"2\", \"files\": [...] }\n}"
+ },
+ {
+ "simStepId": "b485c578-5b03-457f-a0a8-81b36897cbec",
+ "diagramNodeId": "45e46f31-b8f3-4c13-a82a-23ebddcfd2a5",
+ "simStepLabel": "Update: Compute Download Plan",
+ "simStepDescription": "The `computeOperations` function compares the checksums of the blocks from the old and new blockmaps. It generates a series of operations: `COPY` for blocks that are unchanged (and can be copied from the old local file) and `DOWNLOAD` for blocks that are new or modified.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/electron-updater/src/differentialDownloader/downloadPlanBuilder.ts",
+ "startLine": "19",
+ "endLine": "89",
+ "relevantVariables": [
+ "computeOperations",
+ "buildBlockFileMap",
+ "buildChecksumMap"
+ ]
+ },
+ "inputDataExample": "{\n \"oldBlockMap\": { \"version\": \"2\", \"files\": [...] },\n \"newBlockMap\": { \"version\": \"2\", \"files\": [...] }\n}",
+ "outputDataExample": "{\n \"operations\": [\n { \"kind\": \"COPY\", \"start\": 0, \"end\": 1024 },\n { \"kind\": \"DOWNLOAD\", \"start\": 1024, \"end\": 2048 },\n { \"kind\": \"COPY\", \"start\": 2048, \"end\": 4096 }\n ]\n}"
+ },
+ {
+ "simStepId": "117f9460-0a60-4805-aa60-8bc8da9e3091",
+ "diagramNodeId": "3abf101d-277d-42de-956b-456005a993f0",
+ "simStepLabel": "Update: Transfer Download Plan for Execution",
+ "simStepDescription": "The generated list of operations is passed to the task executor, which will perform the actual file copying and downloading.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/electron-updater/src/differentialDownloader/DifferentialDownloader.ts",
+ "startLine": "55",
+ "endLine": "55",
+ "relevantVariables": [
+ "operations"
+ ]
+ },
+ "inputDataExample": "{\n \"operations\": [\n { \"kind\": \"COPY\", \"start\": 0, \"end\": 1024 },\n { \"kind\": \"DOWNLOAD\", \"start\": 1024, \"end\": 2048 },\n { \"kind\": \"COPY\", \"start\": 2048, \"end\": 4096 }\n ]\n}",
+ "outputDataExample": "{\n \"operations\": [\n { \"kind\": \"COPY\", \"start\": 0, \"end\": 1024 },\n { \"kind\": \"DOWNLOAD\", \"start\": 1024, \"end\": 2048 },\n { \"kind\": \"COPY\", \"start\": 2048, \"end\": 4096 }\n ]\n}"
+ },
+ {
+ "simStepId": "4ea4d3ec-b303-433d-a39f-e8d124940302",
+ "diagramNodeId": "46160220-f24b-4a53-aba5-add01dfa0e49",
+ "simStepLabel": "Update: Execute Download Plan",
+ "simStepDescription": "The `executeTasksUsingMultipleRangeRequests` function processes the operation list. For `DOWNLOAD` operations, it constructs HTTP requests with `Range` headers to download only the specific byte ranges required. For `COPY` operations, it reads the corresponding blocks from the old cached installer file. These pieces are then written in order to assemble the new file.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/electron-updater/src/differentialDownloader/multipleRangeDownloader.ts",
+ "startLine": "8",
+ "endLine": "119",
+ "relevantVariables": [
+ "executeTasksUsingMultipleRangeRequests",
+ "doExecuteTasks",
+ "requestOptions.headers.Range",
+ "copyData"
+ ]
+ },
+ "inputDataExample": "{\n \"tasks\": [\n { \"kind\": \"COPY\", \"start\": 0, \"end\": 1024 },\n { \"kind\": \"DOWNLOAD\", \"start\": 1024, \"end\": 2048 }\n ]\n}",
+ "outputDataExample": "{\n \"status\": \"file chunks processed\",\n \"newFile\": \"/path/to/cache/installer.exe.temp\"\n}"
+ },
+ {
+ "simStepId": "98cef0bb-a14c-43fb-a881-c65c07b3d1ed",
+ "diagramNodeId": "714db195-252c-4625-ba8a-32071a62147c",
+ "simStepLabel": "Update: Return Path of Completed File",
+ "simStepDescription": "Once all operations are complete and the new file is fully assembled, the path to the completed file is returned to the main updater logic.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/electron-updater/src/AppUpdater.ts",
+ "startLine": "796",
+ "endLine": "799",
+ "relevantVariables": [
+ "updateFile",
+ "done"
+ ]
+ },
+ "inputDataExample": "{\n \"downloadedFile\": \"/path/to/cache/My-App-Setup-1.1.0.exe.temp\"\n}",
+ "outputDataExample": "{\n \"downloadedFile\": \"/path/to/cache/My-App-Setup-1.1.0.exe.temp\"\n}"
+ },
+ {
+ "simStepId": "d311b182-c04d-47c3-95af-507dc23a943d",
+ "diagramNodeId": "dd3f58a3-66d7-464a-98f1-a2897db7b71e",
+ "simStepLabel": "Update: Cache New Blockmap",
+ "simStepDescription": "After a successful differential download, the `AppUpdater` copies the newly downloaded blockmap file into the cache directory as `current.blockmap`. This ensures it can be used as the 'old' blockmap for the next subsequent differential update, preventing the need to re-download it.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/electron-updater/src/AppUpdater.ts",
+ "startLine": "749",
+ "endLine": "753",
+ "relevantVariables": [
+ "currentBlockMapFile",
+ "downloadedUpdateHelper.cacheDir",
+ "copyFile"
+ ]
+ },
+ "inputDataExample": "{\n \"downloadedUpdateHelper\": {\n \"cacheDirForPendingUpdate\": \"/path/to/cache/pending\",\n \"cacheDir\": \"/path/to/cache\"\n }\n}",
+ "outputDataExample": "{\n \"status\": \"copied /path/to/cache/pending/current.blockmap to /path/to/cache/current.blockmap\"\n}"
+ }
+ ],
+ "description": "- To improve the user experience and reduce bandwidth costs, the auto-update mechanism supports differential updates
- - Instead of downloading the entire new package, clients download a 'blockmap' file that describes the differences between the old and new versions
- - Only the changed blocks of the file are downloaded, resulting in significantly smaller and faster updates
- - This is supported for NSIS web installers and AppImage builds
- - Key files are
packages/app-builder-lib/src/targets/differentialUpdateInfoBuilder - ts and
packages/electron-updater/src/differentialDownloader/
",
+ "simulationNodesAndEdges": {
+ "a00f4320-0a01-4719-bc2b-f63e47aca5be": {
+ "simStepIds": [
+ "cbef6d99-0092-44e9-8f7d-a906ed08ee43"
+ ]
+ },
+ "2f7511dc-15d6-4e25-b5bb-06315e90b41f": {
+ "simStepIds": [
+ "9522c0b4-daee-4514-bde9-cd4721af3e38"
+ ]
+ },
+ "371ccf87-8f70-439b-8538-2d3d6c216bfe": {
+ "simStepIds": [
+ "4ea7d980-dc32-4761-960e-8280a7b4b574"
+ ]
+ },
+ "8c41f7f5-5ee5-482c-a696-ee03c709cafe": {
+ "simStepIds": [
+ "b55b8474-d5dc-42ab-a0bc-74c99549ec1e"
+ ]
+ },
+ "f669d111-adca-409b-b133-fb24351cfb69": {
+ "simStepIds": [
+ "5787a85b-1a5d-42f4-b854-fa7587b8fe52"
+ ]
+ },
+ "45e46f31-b8f3-4c13-a82a-23ebddcfd2a5": {
+ "simStepIds": [
+ "b485c578-5b03-457f-a0a8-81b36897cbec"
+ ]
+ },
+ "46160220-f24b-4a53-aba5-add01dfa0e49": {
+ "simStepIds": [
+ "4ea4d3ec-b303-433d-a39f-e8d124940302"
+ ]
+ },
+ "dd3f58a3-66d7-464a-98f1-a2897db7b71e": {
+ "simStepIds": [
+ "d311b182-c04d-47c3-95af-507dc23a943d"
+ ]
+ },
+ "acb4fe96-2a4f-486e-858e-a48264459d0a": {
+ "simStepIds": [
+ "64d695b2-76c0-4395-a429-e972ea83b1ea"
+ ]
+ },
+ "7910427f-6c29-4c98-9a3b-eb221a158522": {
+ "simStepIds": [
+ "37bfdf5a-4be2-4246-8060-92e5fefa4883"
+ ]
+ },
+ "7aeee163-7f35-4481-af78-afe997f2d97c": {
+ "simStepIds": [
+ "464282fa-182a-4ea7-a7f5-12c0ff6a92ba"
+ ]
+ },
+ "5ce4da31-ce3b-4faa-b8f7-d359d8f3a83a": {
+ "simStepIds": [
+ "7179d02e-af40-41d2-a61f-306d459dc742"
+ ]
+ },
+ "e221f497-d04c-4564-894b-07273c80282b": {
+ "simStepIds": [
+ "6d01f25e-74b0-4f6e-81d7-f903844d7e5c"
+ ]
+ },
+ "3abf101d-277d-42de-956b-456005a993f0": {
+ "simStepIds": [
+ "117f9460-0a60-4805-aa60-8bc8da9e3091"
+ ]
+ },
+ "714db195-252c-4625-ba8a-32071a62147c": {
+ "simStepIds": [
+ "98cef0bb-a14c-43fb-a881-c65c07b3d1ed"
+ ]
+ }
+ },
+ "isAIGenerated": true,
+ "keywords": "differentialDownload, blockmap, DifferentialDownloader",
+ "generationPrompt": "Generate and apply differential (blockmap) updates to reduce download sizes.",
+ "generationKeywords": "differentialDownload, blockmap, DifferentialDownloader"
+ },
+ "Manage the entire build process via a flexible configuration file.": {
+ "name": "Manage the entire build process via a flexible configuration file.",
+ "simSteps": [
+ {
+ "simStepId": "346d86d2-2683-4a96-b7e9-15d4ddf82a70",
+ "diagramNodeId": "f1529f11-210d-4930-aeca-8c83f7f256ad",
+ "simStepLabel": "Initiate Build Configuration",
+ "simStepDescription": "The build process begins within the `Packager` class's `_init` method. This step prepares to load and consolidate the build configuration from all potential sources, including `package.json`, dedicated config files (e.g., `electron-builder.yml`), and command-line arguments.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/app-builder-lib/src/packager.ts",
+ "startLine": "359",
+ "endLine": "362",
+ "relevantVariables": [
+ "this._init",
+ "getConfig"
+ ]
+ },
+ "inputDataExample": "{\"projectDir\": \"/Users/dev/my-electron-app\", \"configFromOptions\": {\"win\": {\"target\": \"nsis\"}, \"publish\": \"always\"}}",
+ "outputDataExample": "{\"configRequest\": {\"packageKey\": \"build\", \"configFilename\": \"electron-builder\", \"projectDir\": \"/Users/dev/my-electron-app\"}}"
+ },
+ {
+ "simStepId": "649449fe-7787-42de-9a23-fc6baf2fd27f",
+ "diagramNodeId": "366e94f1-af7b-41f0-a4d2-02f73c87e861",
+ "simStepLabel": "Request Configuration Data",
+ "simStepDescription": "The `Packager` calls the `getConfig` utility function, passing the project directory, configuration overrides from CLI options, and a lazy loader for the project's `package.json` metadata.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/app-builder-lib/src/packager.ts",
+ "startLine": "362",
+ "endLine": "362",
+ "relevantVariables": [
+ "getConfig"
+ ]
+ },
+ "inputDataExample": "{\"projectDir\": \"/Users/dev/my-electron-app\", \"configPath\": null, \"configFromOptions\": {\"win\": {\"target\": \"nsis\"}, \"publish\": \"always\"}, \"packageMetadata\": \"Lazy>\"}",
+ "outputDataExample": "{\"projectDir\": \"/Users/dev/my-electron-app\", \"configPath\": null, \"configFromOptions\": {\"win\": {\"target\": \"nsis\"}, \"publish\": \"always\"}, \"packageMetadata\": \"Lazy>\"}"
+ },
+ {
+ "simStepId": "ad4169c7-aac6-473f-84be-98864bc0cf60",
+ "diagramNodeId": "dadc5bd5-20ea-408d-84d6-c8a3ef9a94eb",
+ "simStepLabel": "Load and Merge Configuration Sources",
+ "simStepDescription": "The `getConfig` function loads configuration from disk (e.g., the `build` key in `package.json` or an `electron-builder.yml` file). It recursively handles any parent configurations specified via the `extends` property and then merges them with the configuration provided via command-line options to produce a single, unified configuration object.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/app-builder-lib/src/util/config/config.ts",
+ "startLine": "36",
+ "endLine": "54",
+ "relevantVariables": [
+ "getConfig",
+ "_getConfig",
+ "loadParentConfigsRecursively",
+ "mergePublish"
+ ]
+ },
+ "inputDataExample": "{\"configFromFile\": {\"appId\": \"com.test.app\", \"productName\": \"Test App\", \"mac\": {\"category\": \"public.app-category.developer-tools\"}}, \"configFromOptions\": {\"win\": {\"target\": \"nsis\"}, \"publish\": \"always\"}}",
+ "outputDataExample": "{\"appId\": \"com.test.app\", \"productName\": \"Test App\", \"mac\": {\"category\": \"public.app-category.developer-tools\"}, \"win\": {\"target\": \"nsis\"}, \"publish\": \"always\"}"
+ },
+ {
+ "simStepId": "75f15dc5-68b0-403c-bb25-59e5e6ae61ac",
+ "diagramNodeId": "c27efe07-cf27-488d-9fca-0a181f53779c",
+ "simStepLabel": "Forward Merged Configuration for Validation",
+ "simStepDescription": "The fully merged configuration object is returned to the `Packager`'s initialization flow, where it will now be validated against the official schema.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/app-builder-lib/src/packager.ts",
+ "startLine": "362",
+ "endLine": "362",
+ "relevantVariables": [
+ "configuration"
+ ]
+ },
+ "inputDataExample": "{\"appId\": \"com.test.app\", \"productName\": \"Test App\", \"mac\": {\"category\": \"public.app-category.developer-tools\"}, \"win\": {\"target\": \"nsis\"}, \"publish\": \"always\"}",
+ "outputDataExample": "{\"appId\": \"com.test.app\", \"productName\": \"Test App\", \"mac\": {\"category\": \"public.app-category.developer-tools\"}, \"win\": {\"target\": \"nsis\"}, \"publish\": \"always\"}"
+ },
+ {
+ "simStepId": "123cce99-c309-431e-85b0-ce23fc556959",
+ "diagramNodeId": "58e81f0e-c509-4779-aad7-922abaaa3914",
+ "simStepLabel": "Validate Configuration Schema",
+ "simStepDescription": "The `validateConfiguration` function is called to check the merged configuration against a predefined JSON schema (`scheme.json`). This step ensures that all options are valid, correctly typed, and not misspelled. If validation fails, an `InvalidConfigurationError` is thrown, halting the build process and informing the user of the error.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/app-builder-lib/src/util/config/config.ts",
+ "startLine": "217",
+ "endLine": "259",
+ "relevantVariables": [
+ "validateConfiguration",
+ "validateSchema",
+ "schemeDataPromise",
+ "InvalidConfigurationError"
+ ]
+ },
+ "inputDataExample": "{\"appId\": \"com.test.app\", \"productName\": \"Test App\", \"mac\": {\"category\": \"public.app-category.developer-tools\", \"target\": [\"zip\"]}, \"win\": {\"target\": \"nsis\"}}",
+ "outputDataExample": "{\"appId\": \"com.test.app\", \"productName\": \"Test App\", \"mac\": {\"category\": \"public.app-category.developer-tools\", \"target\": [\"zip\"]}, \"win\": {\"target\": \"nsis\"}}"
+ },
+ {
+ "simStepId": "eba11fa9-b470-43a7-a30d-a9a09acdcdb6",
+ "diagramNodeId": "ef83ad04-d1ae-416d-9c4d-39dbf72b07bc",
+ "simStepLabel": "Return Validated Configuration",
+ "simStepDescription": "After successful validation, the clean and verified configuration object is passed back to the `Packager` instance, confirming it's ready for use.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/app-builder-lib/src/packager.ts",
+ "startLine": "390",
+ "endLine": "390",
+ "relevantVariables": [
+ "validateConfiguration"
+ ]
+ },
+ "inputDataExample": "{\"appId\": \"com.test.app\", \"productName\": \"Test App\", \"mac\": {\"target\": [\"zip\"]}, \"win\": {\"target\": \"nsis\"}, \"directories\": {\"output\": \"dist\", \"buildResources\": \"build\"}}",
+ "outputDataExample": "{\"appId\": \"com.test.app\", \"productName\": \"Test App\", \"mac\": {\"target\": [\"zip\"]}, \"win\": {\"target\": \"nsis\"}, \"directories\": {\"output\": \"dist\", \"buildResources\": \"build\"}}"
+ },
+ {
+ "simStepId": "519355a1-7c7a-46ed-b106-f54dd725749f",
+ "diagramNodeId": "40d32a04-2ac4-4d9e-8a2f-baff4bbe17ac",
+ "simStepLabel": "Finalize and Store Configuration",
+ "simStepDescription": "The `Packager` receives the fully validated configuration and assigns it to an internal property (`this._configuration`). This object now serves as the single source of truth that will direct all subsequent packaging, building, and publishing steps.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/app-builder-lib/src/packager.ts",
+ "startLine": "392",
+ "endLine": "392",
+ "relevantVariables": [
+ "this._configuration"
+ ]
+ },
+ "inputDataExample": "{\"appId\": \"com.test.app\", \"productName\": \"Test App\", \"mac\": {\"target\": [\"zip\"]}, \"win\": {\"target\": \"nsis\"}}",
+ "outputDataExample": "{\"packagerInstance\": {\"_configuration\": {\"appId\": \"com.test.app\", \"productName\": \"Test App\", \"mac\": {\"target\": [\"zip\"]}, \"win\": {\"target\": \"nsis\"}}}}"
+ }
+ ],
+ "description": "- The power of electron-builder lies in its extensive configuration options, allowing developers to customize nearly every aspect of the build process
- - Configuration can be specified in
package - json under the
build key or in dedicated files like electron-builder - yml
- - Provides top-level options and platform-specific overrides (e
- g
- , under
win, mac, linux keys) - - The schema and validation logic are defined in
packages/app-builder-lib/src/configuration - ts and
packages/app-builder-lib/src/util/config/config - ts
",
+ "simulationNodesAndEdges": {
+ "f1529f11-210d-4930-aeca-8c83f7f256ad": {
+ "simStepIds": [
+ "346d86d2-2683-4a96-b7e9-15d4ddf82a70"
+ ]
+ },
+ "dadc5bd5-20ea-408d-84d6-c8a3ef9a94eb": {
+ "simStepIds": [
+ "ad4169c7-aac6-473f-84be-98864bc0cf60"
+ ]
+ },
+ "58e81f0e-c509-4779-aad7-922abaaa3914": {
+ "simStepIds": [
+ "123cce99-c309-431e-85b0-ce23fc556959"
+ ]
+ },
+ "40d32a04-2ac4-4d9e-8a2f-baff4bbe17ac": {
+ "simStepIds": [
+ "519355a1-7c7a-46ed-b106-f54dd725749f"
+ ]
+ },
+ "366e94f1-af7b-41f0-a4d2-02f73c87e861": {
+ "simStepIds": [
+ "649449fe-7787-42de-9a23-fc6baf2fd27f"
+ ]
+ },
+ "c27efe07-cf27-488d-9fca-0a181f53779c": {
+ "simStepIds": [
+ "75f15dc5-68b0-403c-bb25-59e5e6ae61ac"
+ ]
+ },
+ "ef83ad04-d1ae-416d-9c4d-39dbf72b07bc": {
+ "simStepIds": [
+ "eba11fa9-b470-43a7-a30d-a9a09acdcdb6"
+ ]
+ }
+ },
+ "isAIGenerated": true,
+ "keywords": "Configuration, validateConfiguration, getConfig",
+ "generationPrompt": "Manage the entire build process via a flexible configuration file.",
+ "generationKeywords": "Configuration, validateConfiguration, getConfig"
+ },
+ "Build for any target platform (Windows, Linux) from any host OS using Docker.": {
+ "name": "Build for any target platform (Windows, Linux) from any host OS using Docker.",
+ "simSteps": [
+ {
+ "simStepId": "217d27ce-874f-4f3f-bf25-18890c8d9517",
+ "diagramNodeId": "f622f8c1-0980-41bd-a9d5-90109b9efd97",
+ "simStepLabel": "User Initiates Build in Docker Container",
+ "simStepDescription": "A developer on a non-Windows host (e.g., macOS/Linux) uses a Docker command to start a container with a pre-configured build environment (like `electronuserland/builder:wine`) and runs the build command inside it.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "pages/multi-platform-build.md",
+ "startLine": "162",
+ "endLine": "172",
+ "relevantVariables": [
+ "docker run",
+ "electronuserland/builder:wine"
+ ]
+ },
+ "inputDataExample": "{\"command\": \"docker run --rm -ti --env-file <(env | grep -iE 'CSC_') -v ${PWD}:/project -v ~/.cache/electron:/root/.cache/electron -v ~/.cache/electron-builder:/root/.cache/electron-builder electronuserland/builder:wine /bin/bash -c \\\"yarn && yarn dist --win\\\"\"}",
+ "outputDataExample": "{\"status\": \"Build process started inside container\"}"
+ },
+ {
+ "simStepId": "6e3e83f7-6a52-40d0-bbd0-4c96e847a695",
+ "diagramNodeId": "842a8051-19c8-45a8-a70b-fce9cc272d19",
+ "simStepLabel": "Build Command Dispatched",
+ "simStepDescription": "The `electron-builder` CLI, running inside the container, parses the command-line arguments (`--win`) and the project's configuration. It then invokes the main `build` function, which identifies the target platform and delegates the task to the `WinPackager`.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/electron-builder/src/builder.ts",
+ "startLine": "43",
+ "endLine": "65",
+ "relevantVariables": [
+ "build",
+ "normalizeOptions",
+ "Packager"
+ ]
+ },
+ "inputDataExample": "{\"cliArgs\": [\"--win\"], \"config\": {\"appId\": \"com.example.myapp\", \"productName\": \"MyApp\", \"win\": {\"target\": \"nsis\"}}}",
+ "outputDataExample": "{\"cliArgs\": [\"--win\"], \"config\": {\"appId\": \"com.example.myapp\", \"productName\": \"MyApp\", \"win\": {\"target\": \"nsis\"}}}"
+ },
+ {
+ "simStepId": "e231944b-0774-43f9-9d86-562f7ee9cde9",
+ "diagramNodeId": "e1fe7eb2-de29-4d5a-a022-603bf2b6c508",
+ "simStepLabel": "WinPackager Selects VM Manager for Cross-Compilation",
+ "simStepDescription": "The `WinPackager` detects it's running on a non-Windows OS (Linux inside the Docker container). It lazily initializes a `VmManager` to handle the execution of Windows-specific tools. The `getWindowsVm` utility function is called to find a suitable environment like Wine.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/app-builder-lib/src/winPackager.ts",
+ "startLine": "31",
+ "endLine": "31",
+ "relevantVariables": [
+ "vm",
+ "getWindowsVm"
+ ]
+ },
+ "inputDataExample": "{\"currentOS\": \"linux\"}",
+ "outputDataExample": "{\"selectedVmManager\": \"Lazy\"}"
+ },
+ {
+ "simStepId": "6d6a977d-78e7-4739-b867-bcfc40386efc",
+ "diagramNodeId": "5a0ec9d1-2590-4d06-969f-16ae2b9316c6",
+ "simStepLabel": "Probing for Available VM Environments",
+ "simStepDescription": "The `getWindowsVm` function checks for available execution environments. Inside the `electronuserland/builder:wine` Docker container, it will find that the `wine` command is available, while others like Parallels are not.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/app-builder-lib/src/vm/vm.ts",
+ "startLine": "34",
+ "endLine": "52",
+ "relevantVariables": [
+ "getWindowsVm",
+ "parseVmList",
+ "isPwshAvailable",
+ "isWineAvailable"
+ ]
+ },
+ "inputDataExample": "{\"probes\": [\"ParallelsVm\", \"PwshVmManager\", \"isWineAvailable\"]}",
+ "outputDataExample": "{\"isWineAvailable\": true, \"isPwshAvailable\": false, \"vmList\": []}"
+ },
+ {
+ "simStepId": "69918668-639b-4f01-aadf-00c01814fee8",
+ "diagramNodeId": "3c333efc-5417-4bd4-8a13-b2a5fb63d807",
+ "simStepLabel": "Wine Environment Detected and `WineVmManager` Instantiated",
+ "simStepDescription": "Since `wine` is available in the Docker container, it's chosen as the execution environment. For specific targets like MSI, the `MsiTarget` class directly instantiates `WineVmManager` to manage the execution of the WiX toolset via Wine.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/app-builder-lib/src/targets/MsiTarget.ts",
+ "startLine": "20",
+ "endLine": "20",
+ "relevantVariables": [
+ "vm",
+ "VmManager",
+ "WineVmManager"
+ ]
+ },
+ "inputDataExample": "{\"hostPlatform\": \"linux\", \"targetPlatform\": \"win\"}",
+ "outputDataExample": "{\"vmInstance\": \"WineVmManager\"}"
+ },
+ {
+ "simStepId": "cc62fc8d-60bd-42b0-823c-fab44646d43b",
+ "diagramNodeId": "de47c536-8845-4625-9e9a-95021f34a150",
+ "simStepLabel": "Transmitting Windows Tool Command to `WineVmManager`",
+ "simStepDescription": "A Windows-specific command, such as executing `rcedit.exe` to modify an executable's resources (e.g., setting the icon), is formulated and passed to the active `VmManager` (`WineVmManager`) for execution.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/app-builder-lib/src/winPackager.ts",
+ "startLine": "207",
+ "endLine": "207",
+ "relevantVariables": [
+ "execWine",
+ "vendorPath",
+ "args"
+ ]
+ },
+ "inputDataExample": "{\"tool\": \"rcedit\", \"args\": [\"/project/dist/win-unpacked/my-app.exe\", \"--set-icon\", \"/project/build/icon.ico\"]}",
+ "outputDataExample": "{\"tool\": \"rcedit\", \"args\": [\"/project/dist/win-unpacked/my-app.exe\", \"--set-icon\", \"/project/build/icon.ico\"]}"
+ },
+ {
+ "simStepId": "af3018f7-2d3f-4e11-a3cd-49e2804312c6",
+ "diagramNodeId": "2e9057c9-f5aa-425b-8d7e-9c6857f37ff7",
+ "simStepLabel": "Executing Windows Tool using Wine",
+ "simStepDescription": "`WineVmManager` delegates the execution to the `execWine` function. This function constructs the final command by prepending `wine` and its arguments and then executes it in a child process, effectively running the Windows tool on the Linux host within the container.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/app-builder-lib/src/vm/WineVm.ts",
+ "startLine": "12",
+ "endLine": "15",
+ "relevantVariables": [
+ "exec",
+ "execWine"
+ ]
+ },
+ "inputDataExample": "{\"file\": \"/root/.cache/electron-builder/win/rcedit/rcedit-x64.exe\", \"args\": [\"/project/dist/win-unpacked/my-app.exe\", \"--set-icon\", \"/project/build/icon.ico\"], \"options\": {}}",
+ "outputDataExample": "{\"command\": \"wine /root/.cache/electron-builder/win/rcedit/rcedit-x64.exe /project/dist/win-unpacked/my-app.exe --set-icon /project/build/icon.ico\"}"
+ },
+ {
+ "simStepId": "0f9eba69-7f69-40d1-a824-6050d9b14616",
+ "diagramNodeId": "2bb0eaa9-6e46-443d-8142-0a4e21d607b0",
+ "simStepLabel": "Returning Tool Execution Result",
+ "simStepDescription": "The output from the executed Wine command, including stdout and any errors, is captured and returned to the calling function (e.g., `WinPackager`) for further processing or error handling.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/builder-util/src/util.ts",
+ "startLine": "123",
+ "endLine": "148",
+ "relevantVariables": [
+ "execFile",
+ "resolve",
+ "reject",
+ "stdout",
+ "stderr"
+ ]
+ },
+ "inputDataExample": "{\"stdout\": \"\", \"stderr\": \"\"}",
+ "outputDataExample": "{\"stdout\": \"\", \"stderr\": \"\"}"
+ },
+ {
+ "simStepId": "3f1e5eeb-3ad0-4f9e-9eb1-68d60efe6153",
+ "diagramNodeId": "bc648cdd-4d43-4139-b795-2ed09ccfc0cb",
+ "simStepLabel": "Final Artifact Generated in Shared Volume",
+ "simStepDescription": "After all necessary Windows-specific tools (like `rcedit`, `osslsigncode`, and `makensis`) have been executed via Wine, the final build artifact (e.g., an `.exe` installer) is assembled. Because the project directory is mounted as a Docker volume, the generated artifact is immediately available on the host machine's file system.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/app-builder-lib/src/targets/nsis/NsisTarget.ts",
+ "startLine": "135",
+ "endLine": "157",
+ "relevantVariables": [
+ "build",
+ "executeMakensis",
+ "sign",
+ "this.packager.dispatchArtifactCreated"
+ ]
+ },
+ "inputDataExample": "{\"buildStatus\": \"success\", \"artifactPathInContainer\": \"/project/dist/my-app-setup-1.0.0.exe\"}",
+ "outputDataExample": "{\"artifactPathOnHost\": \"/Users/developer/my-project/dist/my-app-setup-1.0.0.exe\"}"
+ }
+ ],
+ "description": "- Electron-builder enables cross-platform builds, a major convenience for developers and CI/CD systems
- - It can build Windows packages from a macOS or Linux host by leveraging Wine and specific build tools
- - It provides Docker images that contain all necessary dependencies to build for Linux or Windows on any host machine
- - This eliminates the need to maintain separate physical or virtual machines for each target OS
- - The core logic is referenced in the
docker/ directory and files like packages/app-builder-lib/src/vm/vm - ts and
packages/app-builder-lib/src/wine - ts
",
+ "simulationNodesAndEdges": {
+ "f622f8c1-0980-41bd-a9d5-90109b9efd97": {
+ "simStepIds": [
+ "217d27ce-874f-4f3f-bf25-18890c8d9517"
+ ]
+ },
+ "e1fe7eb2-de29-4d5a-a022-603bf2b6c508": {
+ "simStepIds": [
+ "e231944b-0774-43f9-9d86-562f7ee9cde9"
+ ]
+ },
+ "3c333efc-5417-4bd4-8a13-b2a5fb63d807": {
+ "simStepIds": [
+ "69918668-639b-4f01-aadf-00c01814fee8"
+ ]
+ },
+ "2e9057c9-f5aa-425b-8d7e-9c6857f37ff7": {
+ "simStepIds": [
+ "af3018f7-2d3f-4e11-a3cd-49e2804312c6"
+ ]
+ },
+ "bc648cdd-4d43-4139-b795-2ed09ccfc0cb": {
+ "simStepIds": [
+ "3f1e5eeb-3ad0-4f9e-9eb1-68d60efe6153"
+ ]
+ },
+ "842a8051-19c8-45a8-a70b-fce9cc272d19": {
+ "simStepIds": [
+ "6e3e83f7-6a52-40d0-bbd0-4c96e847a695"
+ ]
+ },
+ "5a0ec9d1-2590-4d06-969f-16ae2b9316c6": {
+ "simStepIds": [
+ "6d6a977d-78e7-4739-b867-bcfc40386efc"
+ ]
+ },
+ "de47c536-8845-4625-9e9a-95021f34a150": {
+ "simStepIds": [
+ "cc62fc8d-60bd-42b0-823c-fab44646d43b"
+ ]
+ },
+ "2bb0eaa9-6e46-443d-8142-0a4e21d607b0": {
+ "simStepIds": [
+ "0f9eba69-7f69-40d1-a824-6050d9b14616"
+ ]
+ }
+ },
+ "isAIGenerated": true,
+ "keywords": "docker, VmManager, wine",
+ "generationPrompt": "Build for any target platform (Windows, Linux) from any host OS using Docker.",
+ "generationKeywords": "docker, VmManager, wine"
+ },
+ "Automatically rebuild native Node.js modules against the correct Electron version.": {
+ "name": "Automatically rebuild native Node.js modules against the correct Electron version.",
+ "simSteps": [
+ {
+ "simStepId": "724e64ce-c2d5-4ead-b9dd-ce0e8aa55636",
+ "diagramNodeId": "5b8dd99f-2760-4848-93ca-26e19be71cf1",
+ "simStepLabel": "Build Process Initialization",
+ "simStepDescription": "The user initiates the application build process via the command line. Electron-builder's `Packager` class is instantiated, loading the build configuration from `package.json` or a config file. This configuration specifies that native modules should be rebuilt using `node-gyp` by setting `nodeGypRebuild` to `true`.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/app-builder-lib/src/packager.ts",
+ "startLine": "80",
+ "endLine": "80",
+ "relevantVariables": [
+ "Packager"
+ ]
+ },
+ "inputDataExample": "{\n \"commandLineArgs\": [\n \"build\",\n \"--win\",\n \"--x64\",\n \"-c.nodeGypRebuild=true\"\n ]\n}",
+ "outputDataExample": "{\n \"config\": {\n \"appId\": \"com.example.app\",\n \"productName\": \"My Electron App\",\n \"nodeGypRebuild\": true,\n \"directories\": {\n \"output\": \"dist\"\n }\n },\n \"platform\": \"win32\",\n \"arch\": \"x64\"\n}"
+ },
+ {
+ "simStepId": "ca6b1a93-51f2-4438-acaa-c361ead109f9",
+ "diagramNodeId": "c6b08084-5b40-4851-85d1-36771aa72864",
+ "simStepLabel": "Configuration Transfer",
+ "simStepDescription": "The loaded configuration and target platform details are passed to the packager's internal build logic to prepare for dependency management.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/app-builder-lib/src/packager.ts",
+ "startLine": "573",
+ "endLine": "573",
+ "relevantVariables": [
+ "config"
+ ]
+ },
+ "inputDataExample": "{\n \"config\": {\n \"appId\": \"com.example.app\",\n \"productName\": \"My Electron App\",\n \"nodeGypRebuild\": true,\n \"directories\": {\n \"output\": \"dist\"\n }\n },\n \"platform\": \"win32\",\n \"arch\": \"x64\"\n}",
+ "outputDataExample": "{\n \"config\": {\n \"appId\": \"com.example.app\",\n \"productName\": \"My Electron App\",\n \"nodeGypRebuild\": true,\n \"directories\": {\n \"output\": \"dist\"\n }\n },\n \"platform\": \"win32\",\n \"arch\": \"x64\"\n}"
+ },
+ {
+ "simStepId": "01f7f263-4b72-4d87-83ab-a7a08cbf2040",
+ "diagramNodeId": "293941b3-97fd-46d3-91c4-219a31b08d2e",
+ "simStepLabel": "Check Rebuild Configuration",
+ "simStepDescription": "During the packaging process, the builder checks the configuration to see if `nodeGypRebuild` is set to `true`. This flag instructs the builder to recompile any native Node.js modules. The default behavior is controlled by `npmRebuild`, which is `true` by default.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/app-builder-lib/src/packager.ts",
+ "startLine": "574",
+ "endLine": "576",
+ "relevantVariables": [
+ "config.nodeGypRebuild"
+ ]
+ },
+ "inputDataExample": "{\n \"config\": {\n \"nodeGypRebuild\": true\n }\n}",
+ "outputDataExample": "{\n \"rebuildAction\": \"nodeGypRebuild\",\n \"parameters\": {\n \"platform\": \"win32\",\n \"arch\": \"x64\",\n \"frameworkInfo\": {\n \"version\": \"28.0.0\",\n \"useCustomDist\": true\n }\n }\n}"
+ },
+ {
+ "simStepId": "be13f802-049f-4c12-9948-87f5d07d9bb4",
+ "diagramNodeId": "868f1053-dacf-4fe7-97cf-84c2023c903b",
+ "simStepLabel": "Invoke Native Module Rebuild",
+ "simStepDescription": "Since the `nodeGypRebuild` flag is true, the `nodeGypRebuild` utility function is called with the target platform, architecture, and Electron version information.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/app-builder-lib/src/packager.ts",
+ "startLine": "575",
+ "endLine": "575",
+ "relevantVariables": [
+ "nodeGypRebuild"
+ ]
+ },
+ "inputDataExample": "{\n \"platform\": \"win32\",\n \"arch\": \"x64\",\n \"frameworkInfo\": {\n \"version\": \"28.0.0\",\n \"useCustomDist\": true\n }\n}",
+ "outputDataExample": "{\n \"platform\": \"win32\",\n \"arch\": \"x64\",\n \"frameworkInfo\": {\n \"version\": \"28.0.0\",\n \"useCustomDist\": true\n }\n}"
+ },
+ {
+ "simStepId": "11fcae61-be38-4abd-989d-e789257d2e03",
+ "diagramNodeId": "1968fa1d-36e1-4dab-bb94-046e8f6a1f17",
+ "simStepLabel": "Execute node-gyp Rebuild Command",
+ "simStepDescription": "The `nodeGypRebuild` function executes the `node-gyp rebuild` command. It sets up the necessary environment variables (`GYP_DEFINES`) so that `node-gyp` downloads the correct headers for the target Electron version and compiles the native modules against them.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/app-builder-lib/src/util/yarn.ts",
+ "startLine": "113",
+ "endLine": "129",
+ "relevantVariables": [
+ "nodeGypRebuild",
+ "nodeGyp",
+ "spawn",
+ "getGypEnv"
+ ]
+ },
+ "inputDataExample": "{\n \"platform\": \"win32\",\n \"arch\": \"x64\",\n \"frameworkInfo\": {\n \"version\": \"28.0.0\",\n \"useCustomDist\": true\n }\n}",
+ "outputDataExample": "{\n \"command\": \"node-gyp rebuild --force-process-config\",\n \"exitCode\": 0,\n \"log\": \"gyp info ... native module compiled successfully.\"\n}"
+ }
+ ],
+ "description": "- Electron apps with native Node
- js dependencies require them to be compiled against the specific version of Node
- js used by Electron, which is a common source of errors
- - Electron-builder automates this process through its
install-app-deps command - - It ensures that native modules are correctly rebuilt during the packaging process, preventing runtime errors in the final application
- - This logic is found in files like
packages/app-builder-lib/src/util/yarn - ts and invoked by the
Packager
",
+ "simulationNodesAndEdges": {
+ "5b8dd99f-2760-4848-93ca-26e19be71cf1": {
+ "simStepIds": [
+ "724e64ce-c2d5-4ead-b9dd-ce0e8aa55636"
+ ]
+ },
+ "293941b3-97fd-46d3-91c4-219a31b08d2e": {
+ "simStepIds": [
+ "01f7f263-4b72-4d87-83ab-a7a08cbf2040"
+ ]
+ },
+ "1968fa1d-36e1-4dab-bb94-046e8f6a1f17": {
+ "simStepIds": [
+ "11fcae61-be38-4abd-989d-e789257d2e03"
+ ]
+ },
+ "c6b08084-5b40-4851-85d1-36771aa72864": {
+ "simStepIds": [
+ "ca6b1a93-51f2-4438-acaa-c361ead109f9"
+ ]
+ },
+ "868f1053-dacf-4fe7-97cf-84c2023c903b": {
+ "simStepIds": [
+ "be13f802-049f-4c12-9948-87f5d07d9bb4"
+ ]
+ }
+ },
+ "isAIGenerated": true,
+ "keywords": "installAppDeps, nodeGypRebuild, npmRebuild",
+ "generationPrompt": "Automatically rebuild native Node.js modules against the correct Electron version.",
+ "generationKeywords": "installAppDeps, nodeGypRebuild, npmRebuild"
+ },
+ "Customize the build lifecycle with user-defined hooks.": {
+ "name": "Customize the build lifecycle with user-defined hooks.",
+ "simSteps": [
+ {
+ "simStepId": "17c81f38-7358-4164-bb3a-6bc15aea391f",
+ "diagramNodeId": "4986bc36-c623-406f-adbb-f8240d0d6dff",
+ "simStepLabel": "Config: Define Build Hooks",
+ "simStepDescription": "A developer specifies custom scripts or functions for various build lifecycle stages in the `electron-builder` configuration. These hooks, such as `beforePack`, `afterPack`, and `afterSign`, allow for injecting custom logic into the packaging process.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/app-builder-lib/src/configuration.ts",
+ "startLine": "293",
+ "endLine": "328",
+ "relevantVariables": [
+ "Hooks",
+ "beforePack",
+ "afterExtract",
+ "afterPack",
+ "afterSign"
+ ]
+ },
+ "inputDataExample": "{\n \"build\": {\n \"appId\": \"com.example.myapp\",\n \"productName\": \"MyElectronApp\",\n \"files\": [\"dist/**/*\"],\n \"mac\": {\n \"category\": \"public.app-category.developer-tools\"\n },\n \"beforePack\": \"./hooks/beforePack.js\",\n \"afterPack\": \"./hooks/afterPack.js\",\n \"afterSign\": \"./hooks/afterSign.js\"\n }\n}",
+ "outputDataExample": "{\n \"appId\": \"com.example.myapp\",\n \"productName\": \"MyElectronApp\",\n \"files\": [\"dist/**/*\"],\n \"mac\": {\n \"category\": \"public.app-category.developer-tools\"\n },\n \"beforePack\": \"./hooks/beforePack.js\",\n \"afterPack\": \"./hooks/afterPack.js\",\n \"afterSign\": \"./hooks/afterSign.js\"\n}"
+ },
+ {
+ "simStepId": "62a8bc1e-e029-4899-98a6-8df9f141f8bc",
+ "diagramNodeId": "a503a103-cf40-4e40-8cb5-4bba9a612a61",
+ "simStepLabel": "Data Flow: Configuration to Packager",
+ "simStepDescription": "The build configuration, including the paths to the user-defined hook scripts, is loaded and passed to the main Packager instance to set up the build environment.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/app-builder-lib/src/packager.ts",
+ "startLine": "360",
+ "endLine": "366",
+ "relevantVariables": [
+ "getConfig",
+ "configuration"
+ ]
+ },
+ "inputDataExample": "{\n \"appId\": \"com.example.myapp\",\n \"productName\": \"MyElectronApp\",\n \"files\": [\"dist/**/*\"],\n \"mac\": {\n \"category\": \"public.app-category.developer-tools\"\n },\n \"beforePack\": \"./hooks/beforePack.js\",\n \"afterPack\": \"./hooks/afterPack.js\",\n \"afterSign\": \"./hooks/afterSign.js\"\n}",
+ "outputDataExample": "{\n \"appId\": \"com.example.myapp\",\n \"productName\": \"MyElectronApp\",\n \"files\": [\"dist/**/*\"],\n \"mac\": {\n \"category\": \"public.app-category.developer-tools\"\n },\n \"beforePack\": \"./hooks/beforePack.js\",\n \"afterPack\": \"./hooks/afterPack.js\",\n \"afterSign\": \"./hooks/afterSign.js\"\n}"
+ },
+ {
+ "simStepId": "de69b967-e195-4697-8ba6-cc2939062c1b",
+ "diagramNodeId": "1ffe25f0-e13b-4bd6-b50f-18a070f87b15",
+ "simStepLabel": "Event Registration: Register Hooks",
+ "simStepDescription": "The Packager resolves the hook paths from the configuration into executable functions and registers them as listeners on an internal event emitter. Each hook corresponds to a specific event in the build lifecycle.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/app-builder-lib/src/packager.ts",
+ "startLine": "273",
+ "endLine": "276",
+ "relevantVariables": [
+ "this.eventEmitter.on",
+ "resolveFunction",
+ "this.config.beforePack",
+ "this.config.afterPack",
+ "this.config.afterSign",
+ "this.config.afterExtract"
+ ]
+ },
+ "inputDataExample": "{\n \"config\": {\n \"beforePack\": \"./hooks/beforePack.js\",\n \"afterPack\": \"./hooks/afterPack.js\",\n \"afterSign\": \"./hooks/afterSign.js\"\n }\n}",
+ "outputDataExample": "{\n \"eventEmitter\": {\n \"listeners\": {\n \"beforePack\": [\"\"],\n \"afterPack\": [\"\"],\n \"afterSign\": [\"\"],\n \"afterExtract\": [\"\"]\n }\n }\n}"
+ },
+ {
+ "simStepId": "c2623ec4-a837-49aa-b3ba-9bb3a343496b",
+ "diagramNodeId": "5a127ce2-5190-4486-9a2e-0e5233d98390",
+ "simStepLabel": "Data Flow: BeforePack Context Creation",
+ "simStepDescription": "Before the application's source files are packed, a context object is created containing details about the current build, such as output directories, platform, and architecture. This object is prepared for the `beforePack` hook.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/app-builder-lib/src/platformPackager.ts",
+ "startLine": "288",
+ "endLine": "295",
+ "relevantVariables": [
+ "packContext"
+ ]
+ },
+ "inputDataExample": "{}",
+ "outputDataExample": "{\n \"appOutDir\": \"/Users/dev/my-project/dist/mac-arm64/MyElectronApp.app\",\n \"outDir\": \"/Users/dev/my-project/dist\",\n \"arch\": \"arm64\",\n \"targets\": [\n {\n \"name\": \"zip\",\n \"arch\": \"arm64\"\n }\n ]\n}"
+ },
+ {
+ "simStepId": "71b031b2-a8cb-4b43-b306-5d49ea0d2c70",
+ "diagramNodeId": "b46fad74-5ff4-4571-b418-c7d2536bcce3",
+ "simStepLabel": "Lifecycle Hook: Trigger `beforePack`",
+ "simStepDescription": "The `beforePack` event is emitted, triggering the user-defined hook. This allows the developer to perform custom actions on the source files before they are bundled into an ASAR archive or copied to the final app structure.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/app-builder-lib/src/packager.ts",
+ "startLine": "333",
+ "endLine": "335",
+ "relevantVariables": [
+ "emitBeforePack",
+ "this.eventEmitter.emit"
+ ]
+ },
+ "inputDataExample": "{\n \"appOutDir\": \"/Users/dev/my-project/dist/mac-arm64/MyElectronApp.app\",\n \"outDir\": \"/Users/dev/my-project/dist\",\n \"arch\": \"arm64\",\n \"targets\": [\n {\n \"name\": \"zip\",\n \"arch\": \"arm64\"\n }\n ]\n}",
+ "outputDataExample": "null"
+ },
+ {
+ "simStepId": "2fcf3eb6-dab0-4ad8-83eb-e2da3c97fefc",
+ "diagramNodeId": "e2c928ac-7e66-42bf-b994-e439001e30b5",
+ "simStepLabel": "Data Flow: AfterPack Context Transmission",
+ "simStepDescription": "After the application files are processed and packed, the same context object is passed along the build pipeline. It now represents the state of the application after initial packaging.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/app-builder-lib/src/platformPackager.ts",
+ "startLine": "288",
+ "endLine": "295",
+ "relevantVariables": [
+ "packContext"
+ ]
+ },
+ "inputDataExample": "{\n \"appOutDir\": \"/Users/dev/my-project/dist/mac-arm64/MyElectronApp.app\",\n \"outDir\": \"/Users/dev/my-project/dist\",\n \"arch\": \"arm64\",\n \"targets\": [\n {\n \"name\": \"zip\",\n \"arch\": \"arm64\"\n }\n ]\n}",
+ "outputDataExample": "{\n \"appOutDir\": \"/Users/dev/my-project/dist/mac-arm64/MyElectronApp.app\",\n \"outDir\": \"/Users/dev/my-project/dist\",\n \"arch\": \"arm64\",\n \"targets\": [\n {\n \"name\": \"zip\",\n \"arch\": \"arm64\"\n }\n ]\n}"
+ },
+ {
+ "simStepId": "c03732e0-42f1-4b10-a9fe-03b2c4627b11",
+ "diagramNodeId": "d94fab9d-a42f-4c51-a325-285d556164eb",
+ "simStepLabel": "Lifecycle Hook: Trigger `afterPack`",
+ "simStepDescription": "The `afterPack` event is emitted, executing the user's script. This is a common point to modify the contents of the packaged application, for example, by removing or adding files before code signing and creating the final distributable.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/app-builder-lib/src/platformPackager.ts",
+ "startLine": "341",
+ "endLine": "341",
+ "relevantVariables": [
+ "this.info.emitAfterPack",
+ "packContext"
+ ]
+ },
+ "inputDataExample": "{\n \"appOutDir\": \"/Users/dev/my-project/dist/mac-arm64/MyElectronApp.app\",\n \"outDir\": \"/Users/dev/my-project/dist\",\n \"arch\": \"arm64\",\n \"targets\": [\n {\n \"name\": \"zip\",\n \"arch\": \"arm64\"\n }\n ]\n}",
+ "outputDataExample": "null"
+ },
+ {
+ "simStepId": "b42f4566-68d0-4a13-ab40-948791f9feb5",
+ "diagramNodeId": "a5a16231-984f-440c-80b4-dd87f0bcf391",
+ "simStepLabel": "Data Flow: Post-Signing Context Transmission",
+ "simStepDescription": "If code signing is enabled and completes successfully, the build context is forwarded to the `afterSign` hook.",
+ "isEdge": 1,
+ "sourceCodeMapping": {
+ "filePath": "packages/app-builder-lib/src/platformPackager.ts",
+ "startLine": "437",
+ "endLine": "440",
+ "relevantVariables": [
+ "didSign",
+ "this.signApp",
+ "this.info.emitAfterSign"
+ ]
+ },
+ "inputDataExample": "{\n \"appOutDir\": \"/Users/dev/my-project/dist/mac-arm64/MyElectronApp.app\",\n \"outDir\": \"/Users/dev/my-project/dist\",\n \"arch\": \"arm64\",\n \"targets\": [\n {\n \"name\": \"zip\",\n \"arch\": \"arm64\"\n }\n ]\n}",
+ "outputDataExample": "{\n \"appOutDir\": \"/Users/dev/my-project/dist/mac-arm64/MyElectronApp.app\",\n \"outDir\": \"/Users/dev/my-project/dist\",\n \"arch\": \"arm64\",\n \"targets\": [\n {\n \"name\": \"zip\",\n \"arch\": \"arm64\"\n }\n ]\n}"
+ },
+ {
+ "simStepId": "d425d6c7-ee61-4fba-9346-c190ce7e4f4d",
+ "diagramNodeId": "63f8931d-862c-492b-9df0-37f5ccdac0ce",
+ "simStepLabel": "Lifecycle Hook: Trigger `afterSign`",
+ "simStepDescription": "The `afterSign` event is emitted. The corresponding user script is executed, providing an opportunity to perform actions after the application package has been signed, such as notarization on macOS or other verification steps.",
+ "isEdge": 0,
+ "sourceCodeMapping": {
+ "filePath": "packages/app-builder-lib/src/packager.ts",
+ "startLine": "337",
+ "endLine": "339",
+ "relevantVariables": [
+ "emitAfterSign",
+ "this.eventEmitter.emit"
+ ]
+ },
+ "inputDataExample": "{\n \"appOutDir\": \"/Users/dev/my-project/dist/mac-arm64/MyElectronApp.app\",\n \"outDir\": \"/Users/dev/my-project/dist\",\n \"arch\": \"arm64\",\n \"targets\": [\n {\n \"name\": \"zip\",\n \"arch\": \"arm64\"\n }\n ]\n}",
+ "outputDataExample": "null"
+ }
+ ],
+ "description": "- For advanced use cases, developers can inject custom logic into various stages of the packaging process
- - Hooks like
beforePack, afterPack, and afterSign allow running custom scripts or functions - - This provides an extension point for tasks that are not covered by the standard configuration options, such as custom asset manipulation or integration with other build tools
- - The hook definitions are in
packages/app-builder-lib/src/configuration - ts, and they are triggered within
packages/app-builder-lib/src/packager - ts
",
+ "simulationNodesAndEdges": {
+ "4986bc36-c623-406f-adbb-f8240d0d6dff": {
+ "simStepIds": [
+ "17c81f38-7358-4164-bb3a-6bc15aea391f"
+ ]
+ },
+ "1ffe25f0-e13b-4bd6-b50f-18a070f87b15": {
+ "simStepIds": [
+ "de69b967-e195-4697-8ba6-cc2939062c1b"
+ ]
+ },
+ "b46fad74-5ff4-4571-b418-c7d2536bcce3": {
+ "simStepIds": [
+ "71b031b2-a8cb-4b43-b306-5d49ea0d2c70"
+ ]
+ },
+ "d94fab9d-a42f-4c51-a325-285d556164eb": {
+ "simStepIds": [
+ "c03732e0-42f1-4b10-a9fe-03b2c4627b11"
+ ]
+ },
+ "63f8931d-862c-492b-9df0-37f5ccdac0ce": {
+ "simStepIds": [
+ "d425d6c7-ee61-4fba-9346-c190ce7e4f4d"
+ ]
+ },
+ "a503a103-cf40-4e40-8cb5-4bba9a612a61": {
+ "simStepIds": [
+ "62a8bc1e-e029-4899-98a6-8df9f141f8bc"
+ ]
+ },
+ "5a127ce2-5190-4486-9a2e-0e5233d98390": {
+ "simStepIds": [
+ "c2623ec4-a837-49aa-b3ba-9bb3a343496b"
+ ]
+ },
+ "e2c928ac-7e66-42bf-b994-e439001e30b5": {
+ "simStepIds": [
+ "2fcf3eb6-dab0-4ad8-83eb-e2da3c97fefc"
+ ]
+ },
+ "a5a16231-984f-440c-80b4-dd87f0bcf391": {
+ "simStepIds": [
+ "b42f4566-68d0-4a13-ab40-948791f9feb5"
+ ]
+ }
+ },
+ "isAIGenerated": true,
+ "keywords": "beforePack, afterPack, afterSign",
+ "generationPrompt": "Customize the build lifecycle with user-defined hooks.",
+ "generationKeywords": "beforePack, afterPack, afterSign"
+ }
+ },
+ "cellToPath": {
+ "d5418ff7-b1a6-479c-a52b-e5f2e91b13fa": "packages",
+ "84084089-74d2-4645-af77-b9b140599300": "packages/electron-builder",
+ "2891eb25-9935-441b-9f57-b482162903d6": "packages/app-builder-lib",
+ "e2e3b351-35eb-4f1b-b92d-671e45ebb9d2": "packages/electron-builder/src",
+ "982b473a-6412-45cf-90f3-295e887d683e": "packages/app-builder-lib/src",
+ "c69f1f1e-2d8b-45e0-af82-44c7b443f5b4": "packages/electron-builder/src/index.ts",
+ "a11025ce-9b7e-432d-b898-ecd76cbd1f32": "packages/app-builder-lib/src/packager.ts",
+ "e5f7319d-ce48-4427-a671-7d3569ae78a3": "packages/app-builder-lib/src/platformPackager.ts",
+ "6285f9fe-25dd-4f8d-8034-98284badf9e5": "packages/app-builder-lib/src/targets",
+ "972e5a36-b69f-4b63-98d7-6fd32be116ef": "packages/app-builder-lib/src/publish",
+ "a54cccdf-6869-486d-b756-ccda8fa8354a": "packages/app-builder-lib/src/targets/nsis",
+ "db1190c9-5034-43dc-810f-42f00aefb5d9": "packages/app-builder-lib/src/publish/PublishManager.ts",
+ "319ffa48-579d-4eaf-a2fd-ab726f6256f8": "packages/app-builder-lib/src/publish/updateInfoBuilder.ts",
+ "2c78fa58-8fb6-4f94-a2a4-a2263e70cfcf": "packages/app-builder-lib/src/targets/nsis/NsisTarget.ts",
+ "2557e9f0-0617-4e2b-84a0-bc0182ab76b9": "packages/electron-builder/src/index.ts-simstep-37c61fda-3ac3-48c6-ac1b-2d3d16a1ba50",
+ "705abe8c-1ac1-4649-bb74-24a448b4dfba": "packages/app-builder-lib/src/packager.ts-simstep-74e73870-fc93-4b72-a2fb-047f42786fb8",
+ "54abc9cf-725a-4fa4-8542-7bd2d55bfd23": "packages/app-builder-lib/src/platformPackager.ts-simstep-6f93e673-993e-4d8c-86fd-3d1a86dc70e9",
+ "992f3600-6b95-433c-b47f-8d8b849b3e16": "packages/app-builder-lib/src/targets/nsis/NsisTarget.ts-simstep-616cbbb4-dc8b-4538-a6c9-45caa1aeac6f",
+ "2fbac7c8-0210-4aef-b507-907d1cd6e882": "packages/app-builder-lib/src/publish/PublishManager.ts-simstep-44835141-b351-4eb4-a88f-06557b593f98",
+ "96eb9f2f-8b1b-4c41-99fa-867c620cd1a3": "packages/app-builder-lib/src/publish/updateInfoBuilder.ts-simstep-5363a185-f79a-4ffb-aa2d-0310373ec057",
+ "0e901318-3bc4-41a6-bfed-96b043833417": "packages/app-builder-lib/src/publish/PublishManager.ts-simstep-56c1408f-4203-4d94-a7eb-0753aabca35f",
+ "85d2b0a5-983c-406e-8c8a-d4a661aab363": "generated-edge-simstep-702d6e11-c8aa-4e1e-af83-f2b235f3c4f8-85d2b0a5-983c-406e-8c8a-d4a661aab363",
+ "999dcb27-f18c-45e1-9222-cf828446818c": "generated-edge-simstep-a63d8e43-c4d4-424c-bb20-dde919b22a5c-999dcb27-f18c-45e1-9222-cf828446818c",
+ "8d5a2659-6d65-4733-9e82-486a55b88da4": "generated-edge-simstep-14d6b2f2-9e48-462a-a88c-de3a0bbc3341-8d5a2659-6d65-4733-9e82-486a55b88da4",
+ "13048108-491b-4a4e-818e-3de71a5823b5": "generated-edge-simstep-b376a2a9-8f4f-4578-a752-59ad5fc8a6a7-13048108-491b-4a4e-818e-3de71a5823b5",
+ "c694f719-f97f-48f2-afb5-06c77fbe1961": "generated-edge-simstep-40fa827b-4dcb-4b93-88d7-3050399d9434-c694f719-f97f-48f2-afb5-06c77fbe1961",
+ "bc893a4e-3dff-49db-a75d-53e8dbe96686": "generated-edge-simstep-01ec3ea7-6fee-4c31-9bfc-e6b32c3f414b-bc893a4e-3dff-49db-a75d-53e8dbe96686",
+ "da0ff881-3cac-42f6-8426-951d2d89040a": "test",
+ "0c82a2c5-631f-4077-ae7a-21089348d97a": "packages/electron-updater",
+ "d53b9401-2021-4574-85da-d7e82a75c18e": "test/fixtures",
+ "68aede06-2d8b-46a7-8cbe-78f2aed3541e": "packages/electron-updater/src",
+ "04753233-82d5-44e6-b3dd-e436ed2c723d": "test/fixtures/test-app",
+ "2270c0f9-b1e3-4aeb-b8fd-8144ef5254ae": "packages/electron-updater/src/main.ts",
+ "ab16d105-df22-4acb-9ff7-d8abdcfb8d67": "packages/electron-updater/src/AppUpdater.ts",
+ "2201bf8e-5b0b-4ef4-bf2d-7f24f9671757": "packages/electron-updater/src/providers",
+ "2789fe8a-9b4c-4d4d-9474-7c74e9b3af29": "packages/electron-updater/src/BaseUpdater.ts",
+ "4a23c4b0-a29d-426d-8995-31646cdfbfa8": "test/fixtures/test-app/app",
+ "aa871f28-88c7-4981-90b5-fa12a3734be1": "packages/electron-updater/src/providers/GenericProvider.ts",
+ "f528ac8c-81e8-4565-a2d3-c8a8bcf5a29d": "test/fixtures/test-app/app/index.js",
+ "1e9daf90-8f5b-44ec-a967-99c383ad32b9": "packages/electron-updater/src/main.ts-simstep-74d951fa-b26b-4419-9820-2610d732a2cb",
+ "bedcfb08-7d16-4775-a826-1f285fc5db15": "packages/electron-updater/src/AppUpdater.ts-simstep-3bfbefce-7c30-49ec-8639-e675734f7eac",
+ "be339346-d3f5-4ff2-b5dd-dad0552de606": "packages/electron-updater/src/providers/GenericProvider.ts-simstep-4f03a31a-697e-4611-b943-e0e59053a7eb",
+ "1ff908e3-215d-4c43-a3c1-c9860ae3e253": "packages/electron-updater/src/AppUpdater.ts-simstep-8e15b5d0-9308-4f92-be9a-4589f787888b",
+ "41f8a620-78b8-496e-99c5-ff04e474a517": "packages/electron-updater/src/AppUpdater.ts-simstep-c6f3a286-6ef4-425f-b2c3-80f17caa8c3f",
+ "9e535902-5e87-4b32-ab48-32386af3ff89": "packages/electron-updater/src/BaseUpdater.ts-simstep-4dee9b52-2d29-4068-88a1-68df85d796be",
+ "9f0eb48a-f102-4db5-ae48-a891dcf4ee36": "packages/electron-updater/src/BaseUpdater.ts-simstep-847a4db6-b5da-41a5-a612-95c61446ff2b",
+ "8f49e2dc-7c02-49ca-a46f-4a6aec595b5d": "generated-edge-simstep-1e5474c6-6a14-4255-a3e8-70f28a8d19be-8f49e2dc-7c02-49ca-a46f-4a6aec595b5d",
+ "b982a95b-1e48-4fe5-b8b9-f12e797771ab": "generated-edge-simstep-f4a0a232-dc79-4e63-849a-a148000736f8-b982a95b-1e48-4fe5-b8b9-f12e797771ab",
+ "8745e811-9a81-40a8-b1e1-256959f3c8d3": "generated-edge-simstep-8d9cec1b-f071-4a21-8252-e1c5fff37cdd-8745e811-9a81-40a8-b1e1-256959f3c8d3",
+ "b96d2ef2-d920-481e-b4e6-de4eafffd4a3": "generated-edge-simstep-5d104e19-4eab-4e46-a6ca-aebe26e32b81-b96d2ef2-d920-481e-b4e6-de4eafffd4a3",
+ "614a57c4-c79d-4c9b-be78-201da18766cd": "generated-edge-simstep-e8350c5a-c7ff-49cf-ab97-7dfec2af63ef-614a57c4-c79d-4c9b-be78-201da18766cd",
+ "bf619bd7-f6c0-4d44-8f95-908c4bf499d5": "generated-edge-simstep-3bf78573-19d3-458e-a3a1-ab1beb3cb2a4-bf619bd7-f6c0-4d44-8f95-908c4bf499d5",
+ "f34fce8c-b0c7-4006-9404-2e1bdcd755c1": "packages/electron-publish",
+ "3b244d04-ba40-4ad0-9a7c-33eccbbe17cd": "packages/electron-publish/src",
+ "1e80829f-3c8a-4ef7-a966-0adf84de2fee": "packages/app-builder-lib/src/index.ts",
+ "6f9d1a1d-f477-41b4-97c2-696bf1f2df0f": "packages/electron-publish/src/gitHubPublisher.ts",
+ "1adfa7ab-c1c6-4a12-ad2b-231bdeb9132b": "packages/app-builder-lib/src/index.ts-simstep-f35d4a9e-ffec-4d0b-b35f-90850fbb9130",
+ "187c76f4-215b-4c46-a48d-66a046a23316": "packages/app-builder-lib/src/publish/PublishManager.ts-simstep-419f3e16-41c0-45a1-aa50-0767e8f54fea",
+ "f9d28546-2567-4a0b-86ea-2dd7f40c5b39": "packages/app-builder-lib/src/publish/PublishManager.ts-simstep-4ddcfbb7-69d1-45b5-8011-d82c032acae3",
+ "5aa288ec-1d85-4b29-bdf6-4b84a550b798": "packages/electron-publish/src/gitHubPublisher.ts-simstep-a6549131-20b8-4199-aaba-db87a8583448",
+ "60f61b0c-a485-4cfa-99e8-cd72712caf67": "packages/app-builder-lib/src/index.ts-simstep-5c7b9901-1af2-4f22-8d08-5cf415c1174b",
+ "69b16248-e13f-4d05-b7bf-7cd94ff00fbf": "generated-edge-simstep-f1baa282-c373-4951-b822-b12cc4592654-69b16248-e13f-4d05-b7bf-7cd94ff00fbf",
+ "0e8da646-3b25-4881-a8f2-b419d23286c4": "generated-edge-simstep-c2603129-b4ab-4ce8-9198-8e72e3e6fa3a-0e8da646-3b25-4881-a8f2-b419d23286c4",
+ "397cfc71-aa3e-4b21-a55e-e1ff6f0ff54c": "generated-edge-simstep-5035ffb6-ea57-4421-891f-e67b6b62c678-397cfc71-aa3e-4b21-a55e-e1ff6f0ff54c",
+ "435362ea-1737-4682-ab3a-73135c41418c": "generated-edge-simstep-e133fa6a-f9d9-4ec0-9669-f3fb5acdf20a-435362ea-1737-4682-ab3a-73135c41418c",
+ "04404c1a-e259-4e18-948a-2852349ec863": "packages/app-builder-lib/src/winPackager.ts",
+ "ed5543b9-a205-40b0-8857-c0f6bf3a7c49": "packages/app-builder-lib/src/codeSign",
+ "340d83a2-b574-4e1d-a7a9-c0738bd3d5c1": "packages/app-builder-lib/src/macPackager.ts",
+ "b597f07c-989b-4cd3-a032-b7a5c39ec61c": "packages/app-builder-lib/src/codeSign/windowsCodeSign.ts",
+ "8a0576a3-34ee-433b-adfd-ace42b748af9": "packages/app-builder-lib/src/codeSign/windowsSignToolManager.ts",
+ "f076f1cf-81bf-4684-9870-98ebaeb8e876": "packages/app-builder-lib/src/codeSign/macCodeSign.ts",
+ "3b08ebb3-0526-4973-84fe-4ce072a15b9d": "packages/app-builder-lib/src/winPackager.ts-simstep-4288fc8b-b291-4fa5-9bc2-1dee9507e0be",
+ "1b4b5157-2e39-4f8a-9cbd-ed1dc0214043": "packages/app-builder-lib/src/winPackager.ts-simstep-2d08d950-792c-4739-bc87-37a2a96b867f",
+ "74b87e43-0809-4711-963c-6cbd695cb4e7": "packages/app-builder-lib/src/winPackager.ts-simstep-b146ef73-cea7-4625-9ae9-535b6ae48653",
+ "2ff70e5a-9fe9-4d5e-b386-5a13af933d5a": "packages/app-builder-lib/src/codeSign/windowsSignToolManager.ts-simstep-b6edc4d8-77cf-4961-a541-1fcdd7d0347a",
+ "0ccca601-22f1-4b53-9e3e-531e5754fc2b": "packages/app-builder-lib/src/codeSign/windowsSignToolManager.ts-simstep-18bd8074-291c-4596-8cf2-3bf6c02c9e9f",
+ "22874821-7199-449c-b0a7-3556d0b42732": "packages/app-builder-lib/src/macPackager.ts-simstep-50d2bb50-cee4-401b-b8a7-7fbd146bb349",
+ "c7b24ba6-d237-4472-a014-65d332ded496": "packages/app-builder-lib/src/codeSign/macCodeSign.ts-simstep-23327905-d34a-4a79-9d63-8922931f6c79",
+ "28c71da0-5e31-4d8d-b009-41257cc99b0a": "packages/app-builder-lib/src/macPackager.ts-simstep-97bbd682-da9b-492d-b030-4285b15bd321",
+ "8b8e45bd-f24c-42b3-8e47-416b96196902": "packages/app-builder-lib/src/macPackager.ts-simstep-a119fc5e-3525-4cdd-ba24-3a0b7ac93322",
+ "06fcb9fa-ee67-41e3-9a95-709b4f65b20c": "packages/app-builder-lib/src/codeSign/macCodeSign.ts-simstep-35fc7def-dda5-4e5e-8103-4c2927dd8573",
+ "1dcf9897-7ff7-4f6b-9b73-e209504e2abb": "generated-edge-simstep-8a86f3d3-61b9-42b9-b537-52580a09626c-1dcf9897-7ff7-4f6b-9b73-e209504e2abb",
+ "6dccc7db-69c6-45da-af72-194e9a0ce5a5": "generated-edge-simstep-2527dfd9-d18d-48e9-9c70-331e8622cf1c-6dccc7db-69c6-45da-af72-194e9a0ce5a5",
+ "20ca941e-4d3e-4d86-8e75-7b8324dc8bde": "generated-edge-simstep-f36b28a3-53c0-4e40-b751-a80bf3a331e2-20ca941e-4d3e-4d86-8e75-7b8324dc8bde",
+ "79435eaa-f540-4ac4-ac0c-d9443c652a7d": "generated-edge-simstep-99a550ab-cc26-4fb5-b5aa-535a2b7158e3-79435eaa-f540-4ac4-ac0c-d9443c652a7d",
+ "54514d16-ec1d-40b8-a2b8-683260f781fe": "generated-edge-simstep-5240ff1b-0201-4f99-ac3f-c903033da0b9-54514d16-ec1d-40b8-a2b8-683260f781fe",
+ "f8595bd8-1c4d-44ad-ae95-775057e1b6d6": "generated-edge-simstep-6a8db384-4dcc-42d9-9027-3060e3b175ae-f8595bd8-1c4d-44ad-ae95-775057e1b6d6",
+ "c433c0ec-59c7-4b2f-80d7-2e4982a342f7": "generated-edge-simstep-4328bbdc-e3fb-4085-9390-84884cd48c9f-c433c0ec-59c7-4b2f-80d7-2e4982a342f7",
+ "9b685a22-2fd9-4d43-9a60-a02f205df3b7": "generated-edge-simstep-761fca63-a8ef-4e94-a809-4f60ca1b8cdc-9b685a22-2fd9-4d43-9a60-a02f205df3b7",
+ "7018df2a-066a-40e7-b304-c22f7f521877": "packages/dmg-builder",
+ "3b580427-bf76-40c8-a710-9ad421d02136": "packages/dmg-builder/src",
+ "1d4c0740-477c-43b5-9ba1-a657e615182e": "packages/app-builder-lib/src/linuxPackager.ts",
+ "0b853e26-5b3b-421d-bf67-853e533e354b": "packages/dmg-builder/src/dmg.ts",
+ "3a3082f3-48cc-4c7d-9603-bb161d1d0989": "packages/app-builder-lib/src/targets/AppImageTarget.ts",
+ "7403828c-0aba-40c6-817f-4af67f25a2c1": "packages/app-builder-lib/src/winPackager.ts-simstep-c20bbd4c-5d31-417a-86e0-762238818638",
+ "fe422f63-e4ad-4b1d-aa55-feaeb4eceb96": "packages/app-builder-lib/src/targets/nsis/NsisTarget.ts-simstep-1b826f7f-e8d7-4b05-9322-ff4709046fe0",
+ "495c3478-2ce2-4185-a2be-c5aca27859ec": "packages/app-builder-lib/src/targets/nsis/NsisTarget.ts-simstep-0440be1c-5d63-4394-ab24-ea4b28cc65e7",
+ "24c3955a-e236-4460-85b9-be1919149d6d": "packages/app-builder-lib/src/targets/nsis/NsisTarget.ts-simstep-7af80a58-e2ff-4994-8086-74c150d8e01b",
+ "7c693dce-0d3b-469c-a2cb-303aed172b2d": "packages/app-builder-lib/src/macPackager.ts-simstep-123a2d8e-40f0-4224-9b92-03e9f597b151",
+ "69e62420-ece1-439c-9797-6ee5747e448d": "packages/dmg-builder/src/dmg.ts-simstep-ccde8a63-4634-46d5-b27a-7386cd56aed1",
+ "69416989-dca4-460a-beb1-fd729eef1b8b": "packages/dmg-builder/src/dmg.ts-simstep-2ebbc873-fff7-458e-8a1f-31664437c8bb",
+ "a0fdeb83-ac4d-4aa8-9600-ad4a7e11c3d6": "packages/dmg-builder/src/dmg.ts-simstep-c4168afd-776c-4d32-938b-21977d48a8ec",
+ "aa87ed82-537f-472f-a506-e1920a574fd9": "packages/app-builder-lib/src/linuxPackager.ts-simstep-8d9c5dd8-e803-4f89-a44c-99db706e647b",
+ "98d1be17-6dc1-472b-bc92-8d973457024f": "packages/app-builder-lib/src/targets/AppImageTarget.ts-simstep-9736c6d2-d7dc-42b1-9755-113d4a532b88",
+ "81b53eee-ba91-4e7b-98a8-d3ee9d3d07ea": "packages/app-builder-lib/src/targets/AppImageTarget.ts-simstep-24830eda-2b3b-438e-bdfb-323fcfe8fb35",
+ "3a0d0c85-ec29-4c27-a53b-073051b71759": "packages/app-builder-lib/src/targets/AppImageTarget.ts-simstep-5aeb5fa0-51e1-4bf8-bd3c-d84653ad3d95",
+ "982b9edd-2167-406b-aeed-af8f1553feb3": "generated-edge-simstep-041b2d19-f750-4d0e-8f0f-a91d2d124432-982b9edd-2167-406b-aeed-af8f1553feb3",
+ "1d00246f-3364-4904-8681-1ba47e5dd92f": "generated-edge-simstep-d45fcb34-e2dd-47c6-948f-5822293d6ea4-1d00246f-3364-4904-8681-1ba47e5dd92f",
+ "05c03c70-1504-4ff7-aeb1-929d4b6e7fa3": "generated-edge-simstep-8d9ebb2a-baa9-454e-bccf-5a66b0b77dd8-05c03c70-1504-4ff7-aeb1-929d4b6e7fa3",
+ "2adadbcd-adc4-495c-952d-296a99fccae7": "generated-edge-simstep-5707e597-a404-4a4e-a795-cbbdcb47800c-2adadbcd-adc4-495c-952d-296a99fccae7",
+ "0c54dbe6-d777-4bd6-8670-dab093141a01": "generated-edge-simstep-e015f28f-5c4a-4082-9f5e-51692004e37c-0c54dbe6-d777-4bd6-8670-dab093141a01",
+ "5f31e988-7e58-447f-9556-72db1ff78e5f": "generated-edge-simstep-1f6d7419-07a9-4531-84f7-848fd0a10104-5f31e988-7e58-447f-9556-72db1ff78e5f",
+ "57c52626-9ccb-4a54-9158-87016f335c02": "generated-edge-simstep-a85a4c67-02bf-47df-b864-5af60492135e-57c52626-9ccb-4a54-9158-87016f335c02",
+ "a113743d-a410-4bf2-8f3d-8d748b536837": "generated-edge-simstep-e641d563-f23d-43f2-ae48-82b1c266f96c-a113743d-a410-4bf2-8f3d-8d748b536837",
+ "a17bd16d-9cea-4c97-8106-fe4886ca8e56": "generated-edge-simstep-b9e64687-ae13-4949-930e-c6e38daec0dc-a17bd16d-9cea-4c97-8106-fe4886ca8e56",
+ "961a4a5f-dbd2-4376-8149-5ed6d9501595": "packages/electron-updater/src/differentialDownloader",
+ "0850be83-b674-4749-a67c-98b7736d578c": "packages/app-builder-lib/src/targets/differentialUpdateInfoBuilder.ts",
+ "b569585b-3d08-4b24-8dab-5693c7467270": "packages/electron-updater/src/differentialDownloader/DifferentialDownloader.ts",
+ "e5d82326-fe46-455c-911e-d9df10103132": "packages/electron-updater/src/differentialDownloader/downloadPlanBuilder.ts",
+ "543156d6-0a81-4ba0-a747-724fd337239b": "packages/electron-updater/src/differentialDownloader/multipleRangeDownloader.ts",
+ "a00f4320-0a01-4719-bc2b-f63e47aca5be": "packages/app-builder-lib/src/targets/nsis/NsisTarget.ts-simstep-cbef6d99-0092-44e9-8f7d-a906ed08ee43",
+ "2f7511dc-15d6-4e25-b5bb-06315e90b41f": "packages/app-builder-lib/src/targets/differentialUpdateInfoBuilder.ts-simstep-9522c0b4-daee-4514-bde9-cd4721af3e38",
+ "371ccf87-8f70-439b-8538-2d3d6c216bfe": "packages/app-builder-lib/src/targets/differentialUpdateInfoBuilder.ts-simstep-4ea7d980-dc32-4761-960e-8280a7b4b574",
+ "8c41f7f5-5ee5-482c-a696-ee03c709cafe": "packages/electron-updater/src/AppUpdater.ts-simstep-b55b8474-d5dc-42ab-a0bc-74c99549ec1e",
+ "f669d111-adca-409b-b133-fb24351cfb69": "packages/electron-updater/src/AppUpdater.ts-simstep-5787a85b-1a5d-42f4-b854-fa7587b8fe52",
+ "45e46f31-b8f3-4c13-a82a-23ebddcfd2a5": "packages/electron-updater/src/differentialDownloader/downloadPlanBuilder.ts-simstep-b485c578-5b03-457f-a0a8-81b36897cbec",
+ "46160220-f24b-4a53-aba5-add01dfa0e49": "packages/electron-updater/src/differentialDownloader/multipleRangeDownloader.ts-simstep-4ea4d3ec-b303-433d-a39f-e8d124940302",
+ "dd3f58a3-66d7-464a-98f1-a2897db7b71e": "packages/electron-updater/src/AppUpdater.ts-simstep-d311b182-c04d-47c3-95af-507dc23a943d",
+ "acb4fe96-2a4f-486e-858e-a48264459d0a": "generated-edge-simstep-64d695b2-76c0-4395-a429-e972ea83b1ea-acb4fe96-2a4f-486e-858e-a48264459d0a",
+ "7910427f-6c29-4c98-9a3b-eb221a158522": "generated-edge-simstep-37bfdf5a-4be2-4246-8060-92e5fefa4883-7910427f-6c29-4c98-9a3b-eb221a158522",
+ "7aeee163-7f35-4481-af78-afe997f2d97c": "generated-edge-simstep-464282fa-182a-4ea7-a7f5-12c0ff6a92ba-7aeee163-7f35-4481-af78-afe997f2d97c",
+ "5ce4da31-ce3b-4faa-b8f7-d359d8f3a83a": "generated-edge-simstep-7179d02e-af40-41d2-a61f-306d459dc742-5ce4da31-ce3b-4faa-b8f7-d359d8f3a83a",
+ "e221f497-d04c-4564-894b-07273c80282b": "generated-edge-simstep-6d01f25e-74b0-4f6e-81d7-f903844d7e5c-e221f497-d04c-4564-894b-07273c80282b",
+ "3abf101d-277d-42de-956b-456005a993f0": "generated-edge-simstep-117f9460-0a60-4805-aa60-8bc8da9e3091-3abf101d-277d-42de-956b-456005a993f0",
+ "714db195-252c-4625-ba8a-32071a62147c": "generated-edge-simstep-98cef0bb-a14c-43fb-a881-c65c07b3d1ed-714db195-252c-4625-ba8a-32071a62147c",
+ "0eb64763-d37f-47ee-940f-f78b3d443f15": "packages/app-builder-lib/src/util",
+ "315d2b1f-34de-415f-99ed-3d126b0d7d93": "packages/app-builder-lib/src/util/config",
+ "c216db25-e131-436a-bd4a-3ef896778e38": "packages/app-builder-lib/src/util/config/config.ts",
+ "f1529f11-210d-4930-aeca-8c83f7f256ad": "packages/app-builder-lib/src/packager.ts-simstep-346d86d2-2683-4a96-b7e9-15d4ddf82a70",
+ "dadc5bd5-20ea-408d-84d6-c8a3ef9a94eb": "packages/app-builder-lib/src/util/config/config.ts-simstep-ad4169c7-aac6-473f-84be-98864bc0cf60",
+ "58e81f0e-c509-4779-aad7-922abaaa3914": "packages/app-builder-lib/src/util/config/config.ts-simstep-123cce99-c309-431e-85b0-ce23fc556959",
+ "40d32a04-2ac4-4d9e-8a2f-baff4bbe17ac": "packages/app-builder-lib/src/packager.ts-simstep-519355a1-7c7a-46ed-b106-f54dd725749f",
+ "366e94f1-af7b-41f0-a4d2-02f73c87e861": "generated-edge-simstep-649449fe-7787-42de-9a23-fc6baf2fd27f-366e94f1-af7b-41f0-a4d2-02f73c87e861",
+ "c27efe07-cf27-488d-9fca-0a181f53779c": "generated-edge-simstep-75f15dc5-68b0-403c-bb25-59e5e6ae61ac-c27efe07-cf27-488d-9fca-0a181f53779c",
+ "ef83ad04-d1ae-416d-9c4d-39dbf72b07bc": "generated-edge-simstep-eba11fa9-b470-43a7-a30d-a9a09acdcdb6-ef83ad04-d1ae-416d-9c4d-39dbf72b07bc",
+ "ac2ca802-6c8a-4cff-815c-2901b6bcd7c9": "pages",
+ "53d6212c-8fb2-410a-b890-ba030586a0fe": "pages/multi-platform-build.md",
+ "4c579761-1617-46fe-8a72-49578728b548": "packages/builder-util",
+ "f6003686-8db7-4713-8cb3-84b29dc88da5": "packages/builder-util/src",
+ "4794a3d2-0469-4617-8dfa-e4e29f10efa5": "packages/electron-builder/src/builder.ts",
+ "d5ee7a07-bdbd-4a26-a5e4-405ed32c144d": "packages/app-builder-lib/src/vm",
+ "b177908f-31cd-4327-9c7b-c28ab7c7446d": "packages/builder-util/src/util.ts",
+ "dc6c11b5-5e97-4d58-8c38-baa4e65f884a": "packages/app-builder-lib/src/vm/vm.ts",
+ "e1ed70af-7f97-405f-8ecd-cf6af46891fc": "packages/app-builder-lib/src/vm/WineVm.ts",
+ "81b90a80-c03f-4aa8-ba03-317fa22fac46": "packages/app-builder-lib/src/targets/MsiTarget.ts",
+ "f622f8c1-0980-41bd-a9d5-90109b9efd97": "pages/multi-platform-build.md-simstep-217d27ce-874f-4f3f-bf25-18890c8d9517",
+ "e1fe7eb2-de29-4d5a-a022-603bf2b6c508": "packages/app-builder-lib/src/winPackager.ts-simstep-e231944b-0774-43f9-9d86-562f7ee9cde9",
+ "3c333efc-5417-4bd4-8a13-b2a5fb63d807": "packages/app-builder-lib/src/targets/MsiTarget.ts-simstep-69918668-639b-4f01-aadf-00c01814fee8",
+ "2e9057c9-f5aa-425b-8d7e-9c6857f37ff7": "packages/app-builder-lib/src/vm/WineVm.ts-simstep-af3018f7-2d3f-4e11-a3cd-49e2804312c6",
+ "bc648cdd-4d43-4139-b795-2ed09ccfc0cb": "packages/app-builder-lib/src/targets/nsis/NsisTarget.ts-simstep-3f1e5eeb-3ad0-4f9e-9eb1-68d60efe6153",
+ "842a8051-19c8-45a8-a70b-fce9cc272d19": "generated-edge-simstep-6e3e83f7-6a52-40d0-bbd0-4c96e847a695-842a8051-19c8-45a8-a70b-fce9cc272d19",
+ "5a0ec9d1-2590-4d06-969f-16ae2b9316c6": "generated-edge-simstep-6d6a977d-78e7-4739-b867-bcfc40386efc-5a0ec9d1-2590-4d06-969f-16ae2b9316c6",
+ "de47c536-8845-4625-9e9a-95021f34a150": "generated-edge-simstep-cc62fc8d-60bd-42b0-823c-fab44646d43b-de47c536-8845-4625-9e9a-95021f34a150",
+ "2bb0eaa9-6e46-443d-8142-0a4e21d607b0": "generated-edge-simstep-0f9eba69-7f69-40d1-a824-6050d9b14616-2bb0eaa9-6e46-443d-8142-0a4e21d607b0",
+ "ca036926-48ee-4551-bbad-0ea2eb67dae1": "packages/app-builder-lib/src/util/yarn.ts",
+ "5b8dd99f-2760-4848-93ca-26e19be71cf1": "packages/app-builder-lib/src/packager.ts-simstep-724e64ce-c2d5-4ead-b9dd-ce0e8aa55636",
+ "293941b3-97fd-46d3-91c4-219a31b08d2e": "packages/app-builder-lib/src/packager.ts-simstep-01f7f263-4b72-4d87-83ab-a7a08cbf2040",
+ "1968fa1d-36e1-4dab-bb94-046e8f6a1f17": "packages/app-builder-lib/src/util/yarn.ts-simstep-11fcae61-be38-4abd-989d-e789257d2e03",
+ "c6b08084-5b40-4851-85d1-36771aa72864": "generated-edge-simstep-ca6b1a93-51f2-4438-acaa-c361ead109f9-c6b08084-5b40-4851-85d1-36771aa72864",
+ "868f1053-dacf-4fe7-97cf-84c2023c903b": "generated-edge-simstep-be13f802-049f-4c12-9948-87f5d07d9bb4-868f1053-dacf-4fe7-97cf-84c2023c903b",
+ "ca25ebdf-8524-4d0f-8503-6a5f90e69b86": "packages/app-builder-lib/src/configuration.ts",
+ "4986bc36-c623-406f-adbb-f8240d0d6dff": "packages/app-builder-lib/src/configuration.ts-simstep-17c81f38-7358-4164-bb3a-6bc15aea391f",
+ "1ffe25f0-e13b-4bd6-b50f-18a070f87b15": "packages/app-builder-lib/src/packager.ts-simstep-de69b967-e195-4697-8ba6-cc2939062c1b",
+ "b46fad74-5ff4-4571-b418-c7d2536bcce3": "packages/app-builder-lib/src/packager.ts-simstep-71b031b2-a8cb-4b43-b306-5d49ea0d2c70",
+ "d94fab9d-a42f-4c51-a325-285d556164eb": "packages/app-builder-lib/src/platformPackager.ts-simstep-c03732e0-42f1-4b10-a9fe-03b2c4627b11",
+ "63f8931d-862c-492b-9df0-37f5ccdac0ce": "packages/app-builder-lib/src/packager.ts-simstep-d425d6c7-ee61-4fba-9346-c190ce7e4f4d",
+ "a503a103-cf40-4e40-8cb5-4bba9a612a61": "generated-edge-simstep-62a8bc1e-e029-4899-98a6-8df9f141f8bc-a503a103-cf40-4e40-8cb5-4bba9a612a61",
+ "5a127ce2-5190-4486-9a2e-0e5233d98390": "generated-edge-simstep-c2623ec4-a837-49aa-b3ba-9bb3a343496b-5a127ce2-5190-4486-9a2e-0e5233d98390",
+ "e2c928ac-7e66-42bf-b994-e439001e30b5": "generated-edge-simstep-2fcf3eb6-dab0-4ad8-83eb-e2da3c97fefc-e2c928ac-7e66-42bf-b994-e439001e30b5",
+ "a5a16231-984f-440c-80b4-dd87f0bcf391": "generated-edge-simstep-b42f4566-68d0-4a13-ab40-948791f9feb5-a5a16231-984f-440c-80b4-dd87f0bcf391"
+ }
+}
\ No newline at end of file
From 15424f78cbf7d7502cdeb4ad65b53a7b65887b04 Mon Sep 17 00:00:00 2001
From: Nasser <42423897+Abdulnaser97@users.noreply.github.com>
Date: Thu, 30 Oct 2025 15:49:42 -0400
Subject: [PATCH 2/3] Add CodeCanvas diagram to README
---
README.md | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/README.md b/README.md
index b7acbb213c6..b5835eaa05d 100644
--- a/README.md
+++ b/README.md
@@ -95,6 +95,15 @@ See the full documentation on [electron.build](https://www.electron.build).
| “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) |
+
+### How does `electron-builder` work under the hood?
+
+Check out this interactive walkthrough of the `electron-builder` codebase on CodeCanvas [here](https://www.code-canvas.com/?session=unauthenticatedGithub&repo=electron-builder&owner=electron-userland&branch=master&OnboardingTutorial=true).
+
+To refine existing dataflow simulation or create new ones, follow the quick tutorial [here](https://docs.code-canvas.com/updating-diagram).
+
+
+
## Installation
[Yarn](http://yarnpkg.com/) is [strongly](https://github.com/electron-userland/electron-builder/issues/1147#issuecomment-276284477) recommended instead of npm.
From 599ba4f4c6dcb7305a1080de79c8d1d675cda54a Mon Sep 17 00:00:00 2001
From: Nasser <42423897+Abdulnaser97@users.noreply.github.com>
Date: Thu, 30 Oct 2025 16:07:53 -0400
Subject: [PATCH 3/3] Update README with new screenshot for the diagram
Update README with new screenshot for the diagram
---
README.md | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/README.md b/README.md
index b5835eaa05d..7c79b81bacc 100644
--- a/README.md
+++ b/README.md
@@ -100,9 +100,7 @@ See the full documentation on [electron.build](https://www.electron.build).
Check out this interactive walkthrough of the `electron-builder` codebase on CodeCanvas [here](https://www.code-canvas.com/?session=unauthenticatedGithub&repo=electron-builder&owner=electron-userland&branch=master&OnboardingTutorial=true).
-To refine existing dataflow simulation or create new ones, follow the quick tutorial [here](https://docs.code-canvas.com/updating-diagram).
-
-
+
## Installation
[Yarn](http://yarnpkg.com/) is [strongly](https://github.com/electron-userland/electron-builder/issues/1147#issuecomment-276284477) recommended instead of npm.