@runfusion/fusion 0.53.0 → 0.53.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bin.js +146 -152
- package/dist/client/.vite/manifest.json +228 -228
- package/dist/client/assets/{AgentDetailView-CHSaiBNh.js → AgentDetailView-DYiAlisV.js} +1 -1
- package/dist/client/assets/{AgentPermissionPolicyEditor-Bfy55DIO.js → AgentPermissionPolicyEditor-CMtzKP_x.js} +1 -1
- package/dist/client/assets/{AgentsView-CMB_7xly.js → AgentsView-YfJlxZoN.js} +3 -3
- package/dist/client/assets/{ChatView-IwWaNSeS.js → ChatView-Diuc5LOe.js} +1 -1
- package/dist/client/assets/{CommandCenter-B84TXfg6.js → CommandCenter-CIwFDUKg.js} +1 -1
- package/dist/client/assets/{DevServerView-B9QEJETp.js → DevServerView-DDRHfATy.js} +1 -1
- package/dist/client/assets/{DirectoryPicker-BnaH1pb_.js → DirectoryPicker-C6HRGnSQ.js} +1 -1
- package/dist/client/assets/{DocumentsView-Cvm4OBRl.js → DocumentsView-C5RTxVSE.js} +1 -1
- package/dist/client/assets/{EvalsView-BpgA1nvW.js → EvalsView-B9DCS8sV.js} +1 -1
- package/dist/client/assets/{ExperimentalAgentOnboardingModal-D4Z1IAW2.js → ExperimentalAgentOnboardingModal-DGmpwghz.js} +1 -1
- package/dist/client/assets/{GoalsView-ui2CM549.js → GoalsView-B2hr3p6f.js} +1 -1
- package/dist/client/assets/{InsightsView-qdJ5GhE_.js → InsightsView-DM3eYN2S.js} +1 -1
- package/dist/client/assets/{MemoryView-Csc-90G0.js → MemoryView-8Yg8r9qS.js} +1 -1
- package/dist/client/assets/{PiExtensionsManager-Dbm3IpQW.js → PiExtensionsManager-DbZ5qtAF.js} +1 -1
- package/dist/client/assets/{PluginManager-B_zgRoI8.js → PluginManager-C1YuxOWu.js} +1 -1
- package/dist/client/assets/{PullRequestView-CB6L4vJw.js → PullRequestView-CMVvVGaP.js} +1 -1
- package/dist/client/assets/{ResearchView-CRtoNtCn.js → ResearchView-BjvgxMjL.js} +1 -1
- package/dist/client/assets/{SecretsView-JB0lfuzZ.js → SecretsView-gChNSW57.js} +1 -1
- package/dist/client/assets/{SessionTerminal-CnxWsHxS.js → SessionTerminal-BSeQ5i5F.js} +1 -1
- package/dist/client/assets/{SettingsModal-D7ArHi7z.js → SettingsModal-CQuHnNXu.js} +3 -3
- package/dist/client/assets/{SettingsModal-CS1-kUSO.js → SettingsModal-_04cEhgW.js} +1 -1
- package/dist/client/assets/{SetupWizardModal-PYaS5VB9.js → SetupWizardModal-Dk9VO68p.js} +2 -2
- package/dist/client/assets/{ShadcnColorPicker-Tl1Xu-G4.js → ShadcnColorPicker-DyPMec2U.js} +1 -1
- package/dist/client/assets/{SkillsView-CWVVQ3y_.js → SkillsView-BAMinq2_.js} +1 -1
- package/dist/client/assets/{TodoView-CCloQhKG.js → TodoView-DaXGwdTQ.js} +1 -1
- package/dist/client/assets/{WorkflowNodeEditor-Dz8TU3is.js → WorkflowNodeEditor-DmJI-3Qp.js} +1 -1
- package/dist/client/assets/{agentSkills-CFiw3LtX.js → agentSkills-B_n4hPLc.js} +1 -1
- package/dist/{desktop/client/assets/architectureDiagram-3BPJPVTR-MtAzQYUn.js → client/assets/architectureDiagram-3BPJPVTR-DysoZtiI.js} +1 -1
- package/dist/client/assets/{blockDiagram-GPEHLZMM-CRyxRdCJ.js → blockDiagram-GPEHLZMM-DpwJlK7i.js} +1 -1
- package/dist/client/assets/{c4Diagram-AAUBKEIU-CFjMzS7o.js → c4Diagram-AAUBKEIU-DV115Z4B.js} +1 -1
- package/dist/client/assets/channel-BgnsK1mp.js +1 -0
- package/dist/client/assets/{chunk-2J33WTMH-BMvR_yYt.js → chunk-2J33WTMH-B5BtZWCx.js} +1 -1
- package/dist/client/assets/{chunk-4BX2VUAB-BUPHOpQy.js → chunk-4BX2VUAB-CJvgQM9e.js} +1 -1
- package/dist/client/assets/{chunk-55IACEB6-C1paNu5q.js → chunk-55IACEB6-ClrKLhVZ.js} +1 -1
- package/dist/client/assets/{chunk-727SXJPM-CG4hnjZD.js → chunk-727SXJPM-DhfUMdP5.js} +1 -1
- package/dist/{desktop/client/assets/chunk-AQP2D5EJ-whMl1uk-.js → client/assets/chunk-AQP2D5EJ-CGKqiWfs.js} +1 -1
- package/dist/client/assets/{chunk-FMBD7UC4-CY6d36wo.js → chunk-FMBD7UC4-sLs4-jLA.js} +1 -1
- package/dist/client/assets/{chunk-ND2GUHAM-cbKdnrGz.js → chunk-ND2GUHAM-BaptHWZM.js} +1 -1
- package/dist/client/assets/{chunk-QZHKN3VN-BPenWytO.js → chunk-QZHKN3VN-CArEOzHE.js} +1 -1
- package/dist/client/assets/classDiagram-4FO5ZUOK-ZkHxi9su.js +1 -0
- package/dist/client/assets/classDiagram-v2-Q7XG4LA2-ZkHxi9su.js +1 -0
- package/dist/client/assets/{cose-bilkent-S5V4N54A-BCFGTolm.js → cose-bilkent-S5V4N54A-DZ4jAfQc.js} +1 -1
- package/dist/client/assets/{dagre-BM42HDAG-yVhB-t2h.js → dagre-BM42HDAG-CMhtRslH.js} +1 -1
- package/dist/client/assets/{dashboard-view-DHb5D1Hc.js → dashboard-view-Bc5cz2DG.js} +1 -1
- package/dist/client/assets/{dashboard-view-C9dPtr0u.js → dashboard-view-Buq7raMZ.js} +1 -1
- package/dist/{desktop/client/assets/diagram-2AECGRRQ-DDUjym9F.js → client/assets/diagram-2AECGRRQ-6uVCJGM-.js} +1 -1
- package/dist/client/assets/{diagram-5GNKFQAL-DwwRRghJ.js → diagram-5GNKFQAL-fRigQDqm.js} +1 -1
- package/dist/{desktop/client/assets/diagram-KO2AKTUF-CFABtl0k.js → client/assets/diagram-KO2AKTUF-DeLeKk1C.js} +1 -1
- package/dist/client/assets/{diagram-LMA3HP47-C_AszN6R.js → diagram-LMA3HP47-BVRY5C4e.js} +1 -1
- package/dist/client/assets/{diagram-OG6HWLK6-C-n05SOC.js → diagram-OG6HWLK6-DdP1xMRM.js} +1 -1
- package/dist/client/assets/{erDiagram-TEJ5UH35-B-9edACX.js → erDiagram-TEJ5UH35-BU5DG9IX.js} +1 -1
- package/dist/{desktop/client/assets/flowDiagram-I6XJVG4X-BCa7HuJ3.js → client/assets/flowDiagram-I6XJVG4X-CFSihB_T.js} +1 -1
- package/dist/client/assets/{folder-open-DLACu19m.js → folder-open-CV5ek-IV.js} +1 -1
- package/dist/client/assets/{ganttDiagram-6RSMTGT7-DaqvxM8Q.js → ganttDiagram-6RSMTGT7-BFVLXtHC.js} +1 -1
- package/dist/client/assets/{gitGraphDiagram-PVQCEYII-CfWhxq7Y.js → gitGraphDiagram-PVQCEYII-TiwSURa4.js} +1 -1
- package/dist/client/assets/{index-JlBzf2ck.js → index-CEUULqTR.js} +18 -18
- package/dist/client/assets/{infoDiagram-5YYISTIA-BjDZFy9D.js → infoDiagram-5YYISTIA-Drkf3o26.js} +1 -1
- package/dist/client/assets/{ishikawaDiagram-YF4QCWOH-BoMTizU1.js → ishikawaDiagram-YF4QCWOH-a9ZSlbx2.js} +1 -1
- package/dist/client/assets/{journeyDiagram-JHISSGLW-BozwtvCa.js → journeyDiagram-JHISSGLW-DF_3fPPW.js} +1 -1
- package/dist/client/assets/{kanban-definition-UN3LZRKU-CvrpmIXn.js → kanban-definition-UN3LZRKU-B6dXVyXh.js} +1 -1
- package/dist/client/assets/{mermaid.core-KeGuTimD.js → mermaid.core-BGFpwAba.js} +4 -4
- package/dist/client/assets/{mindmap-definition-RKZ34NQL-DMjY04EF.js → mindmap-definition-RKZ34NQL-D5bZ0zCy.js} +1 -1
- package/dist/client/assets/{pieDiagram-4H26LBE5-r_9L-pQr.js → pieDiagram-4H26LBE5-Dh6rUd7R.js} +1 -1
- package/dist/client/assets/{quadrantDiagram-W4KKPZXB-CcZKANsw.js → quadrantDiagram-W4KKPZXB-D9Fy6Nl1.js} +1 -1
- package/dist/client/assets/{requirementDiagram-4Y6WPE33-kqu_zuS5.js → requirementDiagram-4Y6WPE33-Bky271Dr.js} +1 -1
- package/dist/{desktop/client/assets/sankeyDiagram-5OEKKPKP-DLGaZ5Gy.js → client/assets/sankeyDiagram-5OEKKPKP-Cs9Bx7N3.js} +1 -1
- package/dist/client/assets/{sequenceDiagram-3UESZ5HK-DAKxqBlR.js → sequenceDiagram-3UESZ5HK-BV7DAI0_.js} +1 -1
- package/dist/{desktop/client/assets/shield-alert-D-Fxd0Va.js → client/assets/shield-alert-BEwCrI8k.js} +1 -1
- package/dist/client/assets/{stateDiagram-AJRCARHV-RJ2xY2-p.js → stateDiagram-AJRCARHV-CTvWoU00.js} +1 -1
- package/dist/client/assets/{stateDiagram-v2-BHNVJYJU-BzhgwjfG.js → stateDiagram-v2-BHNVJYJU-ZSZ46LWU.js} +1 -1
- package/dist/{desktop/client/assets/timeline-definition-PNZ67QCA-DHzoutyf.js → client/assets/timeline-definition-PNZ67QCA-DSJscSa7.js} +1 -1
- package/dist/client/assets/{upload-B4v89B2G.js → upload-CNW5goS6.js} +1 -1
- package/dist/{desktop/client/assets/users-DuxdQK9U.js → client/assets/users-BhzdPkLN.js} +1 -1
- package/dist/{desktop/client/assets/vennDiagram-CIIHVFJN-CKB5IBNU.js → client/assets/vennDiagram-CIIHVFJN-CziD-NoU.js} +1 -1
- package/dist/client/assets/{wardley-L42UT6IY-_KOTjC_D.js → wardley-L42UT6IY-Bt1vdMb3.js} +1 -1
- package/dist/client/assets/{wardleyDiagram-YWT4CUSO-D16g9VQZ.js → wardleyDiagram-YWT4CUSO-B_Dlx683.js} +1 -1
- package/dist/client/assets/{xychartDiagram-2RQKCTM6-CMIdike8.js → xychartDiagram-2RQKCTM6-cYDRrhyM.js} +1 -1
- package/dist/client/index.html +1 -1
- package/dist/client/version.json +1 -1
- package/dist/desktop/client/.vite/manifest.json +337 -335
- package/dist/desktop/client/assets/AgentDetailView-BzSyldiW.css +1 -0
- package/dist/desktop/client/assets/AgentDetailView-SJpg9JA5.js +18 -0
- package/dist/desktop/client/assets/AgentPermissionPolicyEditor-KMUDm0nu.js +6 -0
- package/dist/desktop/client/assets/AgentPermissionPolicyEditor-TpdlOWZW.css +1 -0
- package/dist/desktop/client/assets/AgentsView-CITigHGD.js +24 -0
- package/dist/desktop/client/assets/ChatView-D_2wBIIx.css +1 -0
- package/dist/desktop/client/assets/ChatView-EeFLKmZB.js +6 -0
- package/dist/desktop/client/assets/CommandCenter-B9q-zM9p.css +1 -0
- package/dist/desktop/client/assets/CommandCenter-DmqJyMvs.js +71 -0
- package/dist/desktop/client/assets/{DevServerView-CnEZI8Ax.js → DevServerView-Ckhpio_x.js} +1 -1
- package/dist/desktop/client/assets/{DirectoryPicker-BUIZKLgl.js → DirectoryPicker-j-rxo0kC.js} +1 -1
- package/dist/desktop/client/assets/{DocumentsView-BFq47DE7.js → DocumentsView-DCS-N7cU.js} +1 -1
- package/dist/desktop/client/assets/{EvalsView-BEiGrFFa.js → EvalsView-Dd26ipFU.js} +1 -1
- package/dist/desktop/client/assets/{ExperimentalAgentOnboardingModal-WzGxsxku.js → ExperimentalAgentOnboardingModal-BqgWIa9n.js} +1 -1
- package/dist/desktop/client/assets/{GoalsView-CUh8JBnJ.css → GoalsView-4-eEOeqw.css} +1 -1
- package/dist/desktop/client/assets/GoalsView-C5gWzKqI.js +2 -0
- package/dist/desktop/client/assets/{InsightsView-C14VGuty.js → InsightsView-2SPZDH3m.js} +1 -1
- package/dist/desktop/client/assets/{MemoryView--XlaBNzQ.js → MemoryView-D2OAkbGv.js} +1 -1
- package/dist/desktop/client/assets/{PiExtensionsManager-BaQnu6IY.js → PiExtensionsManager-DLrKJDwr.js} +1 -1
- package/dist/desktop/client/assets/{PluginManager-DqnMI_Zm.js → PluginManager-B0CMG4RR.js} +1 -1
- package/dist/desktop/client/assets/PullRequestView-DhTrKHeu.js +6 -0
- package/dist/desktop/client/assets/PullRequestView-NkeImY1n.css +1 -0
- package/dist/desktop/client/assets/{ResearchView-OlGNDmqI.js → ResearchView-BQwV9L4h.js} +1 -1
- package/dist/desktop/client/assets/{SecretsView-vHezddkt.js → SecretsView-Boby9tkU.js} +1 -1
- package/dist/desktop/client/assets/SessionTerminal-CT_DUO7z.js +2 -0
- package/dist/desktop/client/assets/{SettingsModal-CvbiSIHS.css → SettingsModal-BzZNPNIh.css} +1 -1
- package/dist/desktop/client/assets/SettingsModal-CaE4JYxi.css +1 -0
- package/dist/desktop/client/assets/{SettingsModal-EWTm15Fk.js → SettingsModal-CvsRQchW.js} +1 -1
- package/dist/desktop/client/assets/SettingsModal-Dijfj3cb.js +21 -0
- package/dist/desktop/client/assets/{SetupWizardModal-DsBTXY7k.js → SetupWizardModal-BIiJIXkh.js} +2 -2
- package/dist/desktop/client/assets/ShadcnColorPicker-0ZZqsOqD.js +11 -0
- package/dist/desktop/client/assets/ShadcnColorPicker-3OgfenMo.css +1 -0
- package/dist/desktop/client/assets/SkillsView-Pzo5lSju.js +1 -0
- package/dist/desktop/client/assets/SkillsView-tAW7TTCz.css +1 -0
- package/dist/desktop/client/assets/{TodoView-CIsL_uvQ.css → TodoView--YoVYWvw.css} +1 -1
- package/dist/desktop/client/assets/{TodoView-CV7ma8AL.js → TodoView-ClCgLTmi.js} +1 -1
- package/dist/desktop/client/assets/WorkflowNodeEditor-8XHmq-V2.js +8 -0
- package/dist/desktop/client/assets/WorkflowNodeEditor-Df-_206_.css +1 -0
- package/dist/desktop/client/assets/{agentSkills-BQzMaofj.js → agentSkills-D5osLOR5.js} +1 -1
- package/dist/desktop/client/assets/app-5S4z84u5.js +13 -0
- package/dist/desktop/client/assets/app-B1VYocx2.js +13 -0
- package/dist/desktop/client/assets/app-BhtYYxin.js +13 -0
- package/dist/desktop/client/assets/app-Cts0__Vx.js +13 -0
- package/dist/desktop/client/assets/app-DczBmsP4.js +13 -0
- package/dist/desktop/client/assets/app-_GFUqcMK.js +13 -0
- package/dist/{client/assets/architectureDiagram-3BPJPVTR-DGp4hfr1.js → desktop/client/assets/architectureDiagram-3BPJPVTR-CrjMDhPI.js} +1 -1
- package/dist/desktop/client/assets/{blockDiagram-GPEHLZMM-zelYfqn3.js → blockDiagram-GPEHLZMM-CTQo88ZR.js} +1 -1
- package/dist/desktop/client/assets/{c4Diagram-AAUBKEIU-D3hNx0Hv.js → c4Diagram-AAUBKEIU-YjMRExC0.js} +1 -1
- package/dist/desktop/client/assets/channel-ByWi0lfq.js +1 -0
- package/dist/desktop/client/assets/{chunk-2J33WTMH-B9IKEZ0p.js → chunk-2J33WTMH-O2741OpT.js} +1 -1
- package/dist/desktop/client/assets/{chunk-4BX2VUAB-Dd7FeAwm.js → chunk-4BX2VUAB-E8A3umbR.js} +1 -1
- package/dist/desktop/client/assets/{chunk-55IACEB6-DbzB46sJ.js → chunk-55IACEB6-B052cwdC.js} +1 -1
- package/dist/desktop/client/assets/{chunk-727SXJPM-CDmlBZKV.js → chunk-727SXJPM-BKI0HQTP.js} +1 -1
- package/dist/{client/assets/chunk-AQP2D5EJ-Dm2nZ5Sz.js → desktop/client/assets/chunk-AQP2D5EJ-DegV3EMW.js} +1 -1
- package/dist/desktop/client/assets/{chunk-FMBD7UC4-E1WzORFR.js → chunk-FMBD7UC4-B7tLsOki.js} +1 -1
- package/dist/desktop/client/assets/{chunk-ND2GUHAM-e0FuVXk6.js → chunk-ND2GUHAM-2xF-Tg95.js} +1 -1
- package/dist/desktop/client/assets/{chunk-QZHKN3VN-B6q2GrbB.js → chunk-QZHKN3VN-DUl8dvkQ.js} +1 -1
- package/dist/desktop/client/assets/classDiagram-4FO5ZUOK-C6nL18EV.js +1 -0
- package/dist/desktop/client/assets/classDiagram-v2-Q7XG4LA2-C6nL18EV.js +1 -0
- package/dist/desktop/client/assets/{cose-bilkent-S5V4N54A-BjSZ5UKD.js → cose-bilkent-S5V4N54A-DWz6vuMa.js} +1 -1
- package/dist/desktop/client/assets/{dagre-BM42HDAG-DxMH6moD.js → dagre-BM42HDAG-GgO-3j8E.js} +1 -1
- package/dist/desktop/client/assets/{dashboard-view-BW8tRppT.js → dashboard-view-CosTtyxo.js} +1 -1
- package/dist/desktop/client/assets/{dashboard-view-L_H47lEp.js → dashboard-view-Cw1KM3Az.js} +1633 -1633
- package/dist/{client/assets/diagram-2AECGRRQ-DtV2x39G.js → desktop/client/assets/diagram-2AECGRRQ-BZQIXBBG.js} +1 -1
- package/dist/desktop/client/assets/{diagram-5GNKFQAL-nEqF7CSb.js → diagram-5GNKFQAL-B1pdxoln.js} +1 -1
- package/dist/{client/assets/diagram-KO2AKTUF-JLrDx8k8.js → desktop/client/assets/diagram-KO2AKTUF-B2lApC5l.js} +1 -1
- package/dist/desktop/client/assets/{diagram-LMA3HP47-ButXw1gy.js → diagram-LMA3HP47-BRqKMh4D.js} +1 -1
- package/dist/desktop/client/assets/{diagram-OG6HWLK6-CA17ZRZI.js → diagram-OG6HWLK6-Dl7BJ0tE.js} +1 -1
- package/dist/desktop/client/assets/{erDiagram-TEJ5UH35-DmROZaa0.js → erDiagram-TEJ5UH35-DS6QZa9s.js} +1 -1
- package/dist/{client/assets/flowDiagram-I6XJVG4X-D5ThlzTR.js → desktop/client/assets/flowDiagram-I6XJVG4X-Zk7IzQc2.js} +1 -1
- package/dist/desktop/client/assets/{folder-open-G_6UGFyI.js → folder-open-BhDX2lOd.js} +1 -1
- package/dist/desktop/client/assets/{ganttDiagram-6RSMTGT7-BeAYpPxh.js → ganttDiagram-6RSMTGT7-CJuYCcjE.js} +1 -1
- package/dist/desktop/client/assets/{gitGraphDiagram-PVQCEYII-BLwp2lCj.js → gitGraphDiagram-PVQCEYII-BmCm6tvH.js} +1 -1
- package/dist/desktop/client/assets/index-BCe5TILt.css +1 -0
- package/dist/desktop/client/assets/index-CoS-MsCg.js +1336 -0
- package/dist/desktop/client/assets/{infoDiagram-5YYISTIA-DF-q3NMx.js → infoDiagram-5YYISTIA-Ds6lrlTh.js} +1 -1
- package/dist/desktop/client/assets/{ishikawaDiagram-YF4QCWOH-CKYDbUiH.js → ishikawaDiagram-YF4QCWOH-D3deq-vb.js} +1 -1
- package/dist/desktop/client/assets/{journeyDiagram-JHISSGLW-BgkdCr6Q.js → journeyDiagram-JHISSGLW-BuHVkT2m.js} +1 -1
- package/dist/desktop/client/assets/{kanban-definition-UN3LZRKU-B9V97j0D.js → kanban-definition-UN3LZRKU-DdoE5oU5.js} +1 -1
- package/dist/desktop/client/assets/{linear-dXivciGL.js → linear-CwI45w2t.js} +1 -1
- package/dist/desktop/client/assets/{mermaid.core-BBN7poU5.js → mermaid.core-_nbzHc5D.js} +4 -4
- package/dist/desktop/client/assets/{mindmap-definition-RKZ34NQL-C2_Jhjnr.js → mindmap-definition-RKZ34NQL-Bq-XuCz_.js} +1 -1
- package/dist/desktop/client/assets/{pieDiagram-4H26LBE5-DOrO8u2b.js → pieDiagram-4H26LBE5-BgcfpW6J.js} +1 -1
- package/dist/desktop/client/assets/{quadrantDiagram-W4KKPZXB-D4xxkMPR.js → quadrantDiagram-W4KKPZXB-Xys80jUW.js} +1 -1
- package/dist/desktop/client/assets/{requirementDiagram-4Y6WPE33-BuyUaAlW.js → requirementDiagram-4Y6WPE33-C8S5lJeA.js} +1 -1
- package/dist/{client/assets/sankeyDiagram-5OEKKPKP-BLbamdKk.js → desktop/client/assets/sankeyDiagram-5OEKKPKP-B_3GGQyd.js} +1 -1
- package/dist/desktop/client/assets/{sequenceDiagram-3UESZ5HK-B3xhIZnf.js → sequenceDiagram-3UESZ5HK-DIu6iwmX.js} +1 -1
- package/dist/{client/assets/shield-alert-BdoEg9Yo.js → desktop/client/assets/shield-alert-BHWZI_om.js} +1 -1
- package/dist/desktop/client/assets/{stateDiagram-AJRCARHV-3C2cVTwx.js → stateDiagram-AJRCARHV-CnaR2a9t.js} +1 -1
- package/dist/desktop/client/assets/{stateDiagram-v2-BHNVJYJU-uyCHbCJn.js → stateDiagram-v2-BHNVJYJU-VHc1xbe0.js} +1 -1
- package/dist/desktop/client/assets/{time-DoDTxsna.js → time-Ckmi30gH.js} +1 -1
- package/dist/{client/assets/timeline-definition-PNZ67QCA-CT9ZQc6n.js → desktop/client/assets/timeline-definition-PNZ67QCA-BrtDAg8s.js} +1 -1
- package/dist/desktop/client/assets/{upload-Cv9kGgTr.js → upload-DOLP3Bv3.js} +1 -1
- package/dist/{client/assets/users-vuVXnTg0.js → desktop/client/assets/users-2kEJQeOu.js} +1 -1
- package/dist/desktop/client/assets/{vendor-reactflow-Bg-Qjzh8.js → vendor-reactflow-CnI7NMXG.js} +1 -1
- package/dist/{client/assets/vennDiagram-CIIHVFJN-DCcEEtaE.js → desktop/client/assets/vennDiagram-CIIHVFJN-CVjr2RxJ.js} +1 -1
- package/dist/desktop/client/assets/{wardley-L42UT6IY-DUw_nnW7.js → wardley-L42UT6IY-CVstgB5f.js} +1 -1
- package/dist/desktop/client/assets/{wardleyDiagram-YWT4CUSO-CgWLugtp.js → wardleyDiagram-YWT4CUSO-Da3szr-D.js} +1 -1
- package/dist/desktop/client/assets/{xychartDiagram-2RQKCTM6-BWpeCtlX.js → xychartDiagram-2RQKCTM6-B0o0ggVt.js} +1 -1
- package/dist/desktop/client/index.html +8 -8
- package/dist/desktop/client/theme-data.css +296 -0
- package/dist/desktop/client/version.json +1 -1
- package/dist/desktop/main.js +21 -15519
- package/dist/desktop/main.js.map +4 -4
- package/dist/droid-cli/package.json +1 -1
- package/dist/extension.js +123 -123
- package/dist/pi-claude-cli/package.json +1 -1
- package/dist/plugins/fusion-plugin-acp-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-cli-printing-press/package.json +1 -1
- package/dist/plugins/fusion-plugin-compound-engineering/package.json +1 -1
- package/dist/plugins/fusion-plugin-cursor-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-dependency-graph/package.json +1 -1
- package/dist/plugins/fusion-plugin-droid-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-hermes-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-openclaw-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-paperclip-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-reports/package.json +1 -1
- package/dist/plugins/fusion-plugin-roadmap/package.json +1 -1
- package/dist/plugins/fusion-plugin-whatsapp-chat/package.json +1 -1
- package/package.json +1 -1
- package/dist/client/assets/channel-C9LQN4ee.js +0 -1
- package/dist/client/assets/classDiagram-4FO5ZUOK-C5TeEr7c.js +0 -1
- package/dist/client/assets/classDiagram-v2-Q7XG4LA2-C5TeEr7c.js +0 -1
- package/dist/desktop/client/assets/AgentDetailView-CVv4BoTE.js +0 -18
- package/dist/desktop/client/assets/AgentDetailView-CgbB51Iw.css +0 -1
- package/dist/desktop/client/assets/AgentPermissionPolicyEditor-CGxjOr6G.css +0 -1
- package/dist/desktop/client/assets/AgentPermissionPolicyEditor-CQLNC_-O.js +0 -6
- package/dist/desktop/client/assets/AgentsView-DybRxzuI.js +0 -29
- package/dist/desktop/client/assets/ChatView-BtjkE0V7.css +0 -1
- package/dist/desktop/client/assets/ChatView-D_byETJX.js +0 -19
- package/dist/desktop/client/assets/CommandCenter-DDjpYkPe.css +0 -1
- package/dist/desktop/client/assets/CommandCenter-DEXoC2F7.js +0 -71
- package/dist/desktop/client/assets/GoalsView-C6Qsc-VS.js +0 -2
- package/dist/desktop/client/assets/PullRequestView-C8kBQljB.js +0 -6
- package/dist/desktop/client/assets/PullRequestView-CpdE3Yo_.css +0 -1
- package/dist/desktop/client/assets/SessionTerminal-ClbvT_Fb.js +0 -2
- package/dist/desktop/client/assets/SettingsModal-CL4GS1q-.js +0 -21
- package/dist/desktop/client/assets/SettingsModal-ino68pI2.css +0 -1
- package/dist/desktop/client/assets/ShadcnColorPicker-BciIe8Ls.js +0 -11
- package/dist/desktop/client/assets/ShadcnColorPicker-pqVWCC5-.css +0 -1
- package/dist/desktop/client/assets/SkillsView-CJ8snrma.css +0 -1
- package/dist/desktop/client/assets/SkillsView-UyhBA4_r.js +0 -1
- package/dist/desktop/client/assets/WorkflowNodeEditor-BOouksjw.css +0 -1
- package/dist/desktop/client/assets/WorkflowNodeEditor-ThUL4msx.js +0 -8
- package/dist/desktop/client/assets/app-BJGkp7Tt.js +0 -13
- package/dist/desktop/client/assets/app-BKLUvvm8.js +0 -13
- package/dist/desktop/client/assets/app-BaoNC9zg.js +0 -13
- package/dist/desktop/client/assets/app-CZQ_fFNf.js +0 -13
- package/dist/desktop/client/assets/app-DAu3AzsS.js +0 -13
- package/dist/desktop/client/assets/app-DgezOJub.js +0 -13
- package/dist/desktop/client/assets/channel-Dj1-27Yg.js +0 -1
- package/dist/desktop/client/assets/classDiagram-4FO5ZUOK-36LCOV5F.js +0 -1
- package/dist/desktop/client/assets/classDiagram-v2-Q7XG4LA2-36LCOV5F.js +0 -1
- package/dist/desktop/client/assets/index-CSVe-MIA.css +0 -1
- package/dist/desktop/client/assets/index-DIURDjTF.js +0 -1301
package/dist/desktop/main.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../../node_modules/.pnpm/universalify@2.0.1/node_modules/universalify/index.js", "../../../node_modules/.pnpm/graceful-fs@4.2.11/node_modules/graceful-fs/polyfills.js", "../../../node_modules/.pnpm/graceful-fs@4.2.11/node_modules/graceful-fs/legacy-streams.js", "../../../node_modules/.pnpm/graceful-fs@4.2.11/node_modules/graceful-fs/clone.js", "../../../node_modules/.pnpm/graceful-fs@4.2.11/node_modules/graceful-fs/graceful-fs.js", "../../../node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/fs/index.js", "../../../node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/mkdirs/utils.js", "../../../node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/mkdirs/make-dir.js", "../../../node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/mkdirs/index.js", "../../../node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/path-exists/index.js", "../../../node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/util/utimes.js", "../../../node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/util/stat.js", "../../../node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/copy/copy.js", "../../../node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/copy/copy-sync.js", "../../../node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/copy/index.js", "../../../node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/remove/rimraf.js", "../../../node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/remove/index.js", "../../../node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/empty/index.js", "../../../node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/ensure/file.js", "../../../node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/ensure/link.js", "../../../node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/ensure/symlink-paths.js", "../../../node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/ensure/symlink-type.js", "../../../node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/ensure/symlink.js", "../../../node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/ensure/index.js", "../../../node_modules/.pnpm/jsonfile@6.2.0/node_modules/jsonfile/utils.js", "../../../node_modules/.pnpm/jsonfile@6.2.0/node_modules/jsonfile/index.js", "../../../node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/json/jsonfile.js", "../../../node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/output-file/index.js", "../../../node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/json/output-json.js", "../../../node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/json/output-json-sync.js", "../../../node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/json/index.js", "../../../node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/move/move.js", "../../../node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/move/move-sync.js", "../../../node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/move/index.js", "../../../node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/index.js", "../../../node_modules/.pnpm/builder-util-runtime@9.5.1/node_modules/builder-util-runtime/src/CancellationToken.ts", "../../../node_modules/.pnpm/builder-util-runtime@9.5.1/node_modules/builder-util-runtime/src/error.ts", "../../../node_modules/.pnpm/ms@2.1.3/node_modules/ms/index.js", "../../../node_modules/.pnpm/debug@4.4.3/node_modules/debug/src/common.js", "../../../node_modules/.pnpm/debug@4.4.3/node_modules/debug/src/browser.js", "../../../node_modules/.pnpm/has-flag@4.0.0/node_modules/has-flag/index.js", "../../../node_modules/.pnpm/supports-color@7.2.0/node_modules/supports-color/index.js", "../../../node_modules/.pnpm/debug@4.4.3/node_modules/debug/src/node.js", "../../../node_modules/.pnpm/debug@4.4.3/node_modules/debug/src/index.js", "../../../node_modules/.pnpm/builder-util-runtime@9.5.1/node_modules/builder-util-runtime/src/ProgressCallbackTransform.ts", "../../../node_modules/.pnpm/builder-util-runtime@9.5.1/node_modules/builder-util-runtime/src/httpExecutor.ts", "../../../node_modules/.pnpm/builder-util-runtime@9.5.1/node_modules/builder-util-runtime/src/MemoLazy.ts", "../../../node_modules/.pnpm/builder-util-runtime@9.5.1/node_modules/builder-util-runtime/src/publishOptions.ts", "../../../node_modules/.pnpm/builder-util-runtime@9.5.1/node_modules/builder-util-runtime/src/retry.ts", "../../../node_modules/.pnpm/builder-util-runtime@9.5.1/node_modules/builder-util-runtime/src/rfc2253Parser.ts", "../../../node_modules/.pnpm/builder-util-runtime@9.5.1/node_modules/builder-util-runtime/src/uuid.ts", "../../../node_modules/.pnpm/sax@1.6.0/node_modules/sax/lib/sax.js", "../../../node_modules/.pnpm/builder-util-runtime@9.5.1/node_modules/builder-util-runtime/src/xml.ts", "../../../node_modules/.pnpm/builder-util-runtime@9.5.1/node_modules/builder-util-runtime/src/index.ts", "../../../node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/lib/common.js", "../../../node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/lib/exception.js", "../../../node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/lib/snippet.js", "../../../node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/lib/type.js", "../../../node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/lib/schema.js", "../../../node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/lib/type/str.js", "../../../node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/lib/type/seq.js", "../../../node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/lib/type/map.js", "../../../node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/lib/schema/failsafe.js", "../../../node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/lib/type/null.js", "../../../node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/lib/type/bool.js", "../../../node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/lib/type/int.js", "../../../node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/lib/type/float.js", "../../../node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/lib/schema/json.js", "../../../node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/lib/schema/core.js", "../../../node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/lib/type/timestamp.js", "../../../node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/lib/type/merge.js", "../../../node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/lib/type/binary.js", "../../../node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/lib/type/omap.js", "../../../node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/lib/type/pairs.js", "../../../node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/lib/type/set.js", "../../../node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/lib/schema/default.js", "../../../node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/lib/loader.js", "../../../node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/lib/dumper.js", "../../../node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/index.js", "../../../node_modules/.pnpm/lazy-val@1.0.5/node_modules/lazy-val/src/main.ts", "../../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/internal/constants.js", "../../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/internal/debug.js", "../../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/internal/re.js", "../../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/internal/parse-options.js", "../../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/internal/identifiers.js", "../../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/classes/semver.js", "../../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/parse.js", "../../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/valid.js", "../../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/clean.js", "../../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/inc.js", "../../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/diff.js", "../../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/major.js", "../../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/minor.js", "../../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/patch.js", "../../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/prerelease.js", "../../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/compare.js", "../../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/rcompare.js", "../../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/compare-loose.js", "../../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/compare-build.js", "../../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/sort.js", "../../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/rsort.js", "../../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/gt.js", "../../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/lt.js", "../../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/eq.js", "../../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/neq.js", "../../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/gte.js", "../../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/lte.js", "../../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/cmp.js", "../../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/coerce.js", "../../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/internal/lrucache.js", "../../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/classes/range.js", "../../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/classes/comparator.js", "../../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/satisfies.js", "../../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/ranges/to-comparators.js", "../../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/ranges/max-satisfying.js", "../../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/ranges/min-satisfying.js", "../../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/ranges/min-version.js", "../../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/ranges/valid.js", "../../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/ranges/outside.js", "../../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/ranges/gtr.js", "../../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/ranges/ltr.js", "../../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/ranges/intersects.js", "../../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/ranges/simplify.js", "../../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/ranges/subset.js", "../../../node_modules/.pnpm/semver@7.7.4/node_modules/semver/index.js", "../../../node_modules/.pnpm/lodash.isequal@4.5.0/node_modules/lodash.isequal/index.js", "../../../node_modules/.pnpm/electron-updater@6.8.3/node_modules/electron-updater/src/DownloadedUpdateHelper.ts", "../../../node_modules/.pnpm/electron-updater@6.8.3/node_modules/electron-updater/src/AppAdapter.ts", "../../../node_modules/.pnpm/electron-updater@6.8.3/node_modules/electron-updater/src/ElectronAppAdapter.ts", "../../../node_modules/.pnpm/electron-updater@6.8.3/node_modules/electron-updater/src/electronHttpExecutor.ts", "../../../node_modules/.pnpm/electron-updater@6.8.3/node_modules/electron-updater/src/util.ts", "../../../node_modules/.pnpm/lodash.escaperegexp@4.1.2/node_modules/lodash.escaperegexp/index.js", "../../../node_modules/.pnpm/electron-updater@6.8.3/node_modules/electron-updater/src/providers/Provider.ts", "../../../node_modules/.pnpm/electron-updater@6.8.3/node_modules/electron-updater/src/providers/GenericProvider.ts", "../../../node_modules/.pnpm/electron-updater@6.8.3/node_modules/electron-updater/src/providers/BitbucketProvider.ts", "../../../node_modules/.pnpm/electron-updater@6.8.3/node_modules/electron-updater/src/providers/GitHubProvider.ts", "../../../node_modules/.pnpm/electron-updater@6.8.3/node_modules/electron-updater/src/providers/GitLabProvider.ts", "../../../node_modules/.pnpm/electron-updater@6.8.3/node_modules/electron-updater/src/providers/KeygenProvider.ts", "../../../node_modules/.pnpm/electron-updater@6.8.3/node_modules/electron-updater/src/providers/PrivateGitHubProvider.ts", "../../../node_modules/.pnpm/electron-updater@6.8.3/node_modules/electron-updater/src/providerFactory.ts", "../../../node_modules/.pnpm/electron-updater@6.8.3/node_modules/electron-updater/src/differentialDownloader/downloadPlanBuilder.ts", "../../../node_modules/.pnpm/electron-updater@6.8.3/node_modules/electron-updater/src/differentialDownloader/DataSplitter.ts", "../../../node_modules/.pnpm/electron-updater@6.8.3/node_modules/electron-updater/src/differentialDownloader/multipleRangeDownloader.ts", "../../../node_modules/.pnpm/electron-updater@6.8.3/node_modules/electron-updater/src/differentialDownloader/ProgressDifferentialDownloadCallbackTransform.ts", "../../../node_modules/.pnpm/electron-updater@6.8.3/node_modules/electron-updater/src/differentialDownloader/DifferentialDownloader.ts", "../../../node_modules/.pnpm/electron-updater@6.8.3/node_modules/electron-updater/src/differentialDownloader/GenericDifferentialDownloader.ts", "../../../node_modules/.pnpm/electron-updater@6.8.3/node_modules/electron-updater/src/types.ts", "../../../node_modules/.pnpm/electron-updater@6.8.3/node_modules/electron-updater/src/AppUpdater.ts", "../../../node_modules/.pnpm/electron-updater@6.8.3/node_modules/electron-updater/src/BaseUpdater.ts", "../../../node_modules/.pnpm/electron-updater@6.8.3/node_modules/electron-updater/src/differentialDownloader/FileWithEmbeddedBlockMapDifferentialDownloader.ts", "../../../node_modules/.pnpm/electron-updater@6.8.3/node_modules/electron-updater/src/AppImageUpdater.ts", "../../../node_modules/.pnpm/electron-updater@6.8.3/node_modules/electron-updater/src/LinuxUpdater.ts", "../../../node_modules/.pnpm/electron-updater@6.8.3/node_modules/electron-updater/src/DebUpdater.ts", "../../../node_modules/.pnpm/electron-updater@6.8.3/node_modules/electron-updater/src/PacmanUpdater.ts", "../../../node_modules/.pnpm/electron-updater@6.8.3/node_modules/electron-updater/src/RpmUpdater.ts", "../../../node_modules/.pnpm/electron-updater@6.8.3/node_modules/electron-updater/src/MacUpdater.ts", "../../../node_modules/.pnpm/electron-updater@6.8.3/node_modules/electron-updater/src/windowsExecutableCodeSignatureVerifier.ts", "../../../node_modules/.pnpm/electron-updater@6.8.3/node_modules/electron-updater/src/NsisUpdater.ts", "../../../node_modules/.pnpm/electron-updater@6.8.3/node_modules/electron-updater/src/main.ts", "../src/main.ts", "../src/deep-link.ts", "../src/ipc.ts", "../src/native.ts", "../src/tray.ts", "../src/shell-settings.ts", "../src/menu.ts", "../src/renderer.ts", "../src/local-runtime.ts", "../src/engine-runtime.ts"],
|
|
4
|
-
"sourcesContent": ["'use strict'\n\nexports.fromCallback = function (fn) {\n return Object.defineProperty(function (...args) {\n if (typeof args[args.length - 1] === 'function') fn.apply(this, args)\n else {\n return new Promise((resolve, reject) => {\n args.push((err, res) => (err != null) ? reject(err) : resolve(res))\n fn.apply(this, args)\n })\n }\n }, 'name', { value: fn.name })\n}\n\nexports.fromPromise = function (fn) {\n return Object.defineProperty(function (...args) {\n const cb = args[args.length - 1]\n if (typeof cb !== 'function') return fn.apply(this, args)\n else {\n args.pop()\n fn.apply(this, args).then(r => cb(null, r), cb)\n }\n }, 'name', { value: fn.name })\n}\n", "var constants = require('constants')\n\nvar origCwd = process.cwd\nvar cwd = null\n\nvar platform = process.env.GRACEFUL_FS_PLATFORM || process.platform\n\nprocess.cwd = function() {\n if (!cwd)\n cwd = origCwd.call(process)\n return cwd\n}\ntry {\n process.cwd()\n} catch (er) {}\n\n// This check is needed until node.js 12 is required\nif (typeof process.chdir === 'function') {\n var chdir = process.chdir\n process.chdir = function (d) {\n cwd = null\n chdir.call(process, d)\n }\n if (Object.setPrototypeOf) Object.setPrototypeOf(process.chdir, chdir)\n}\n\nmodule.exports = patch\n\nfunction patch (fs) {\n // (re-)implement some things that are known busted or missing.\n\n // lchmod, broken prior to 0.6.2\n // back-port the fix here.\n if (constants.hasOwnProperty('O_SYMLINK') &&\n process.version.match(/^v0\\.6\\.[0-2]|^v0\\.5\\./)) {\n patchLchmod(fs)\n }\n\n // lutimes implementation, or no-op\n if (!fs.lutimes) {\n patchLutimes(fs)\n }\n\n // https://github.com/isaacs/node-graceful-fs/issues/4\n // Chown should not fail on einval or eperm if non-root.\n // It should not fail on enosys ever, as this just indicates\n // that a fs doesn't support the intended operation.\n\n fs.chown = chownFix(fs.chown)\n fs.fchown = chownFix(fs.fchown)\n fs.lchown = chownFix(fs.lchown)\n\n fs.chmod = chmodFix(fs.chmod)\n fs.fchmod = chmodFix(fs.fchmod)\n fs.lchmod = chmodFix(fs.lchmod)\n\n fs.chownSync = chownFixSync(fs.chownSync)\n fs.fchownSync = chownFixSync(fs.fchownSync)\n fs.lchownSync = chownFixSync(fs.lchownSync)\n\n fs.chmodSync = chmodFixSync(fs.chmodSync)\n fs.fchmodSync = chmodFixSync(fs.fchmodSync)\n fs.lchmodSync = chmodFixSync(fs.lchmodSync)\n\n fs.stat = statFix(fs.stat)\n fs.fstat = statFix(fs.fstat)\n fs.lstat = statFix(fs.lstat)\n\n fs.statSync = statFixSync(fs.statSync)\n fs.fstatSync = statFixSync(fs.fstatSync)\n fs.lstatSync = statFixSync(fs.lstatSync)\n\n // if lchmod/lchown do not exist, then make them no-ops\n if (fs.chmod && !fs.lchmod) {\n fs.lchmod = function (path, mode, cb) {\n if (cb) process.nextTick(cb)\n }\n fs.lchmodSync = function () {}\n }\n if (fs.chown && !fs.lchown) {\n fs.lchown = function (path, uid, gid, cb) {\n if (cb) process.nextTick(cb)\n }\n fs.lchownSync = function () {}\n }\n\n // on Windows, A/V software can lock the directory, causing this\n // to fail with an EACCES or EPERM if the directory contains newly\n // created files. Try again on failure, for up to 60 seconds.\n\n // Set the timeout this long because some Windows Anti-Virus, such as Parity\n // bit9, may lock files for up to a minute, causing npm package install\n // failures. Also, take care to yield the scheduler. Windows scheduling gives\n // CPU to a busy looping process, which can cause the program causing the lock\n // contention to be starved of CPU by node, so the contention doesn't resolve.\n if (platform === \"win32\") {\n fs.rename = typeof fs.rename !== 'function' ? fs.rename\n : (function (fs$rename) {\n function rename (from, to, cb) {\n var start = Date.now()\n var backoff = 0;\n fs$rename(from, to, function CB (er) {\n if (er\n && (er.code === \"EACCES\" || er.code === \"EPERM\" || er.code === \"EBUSY\")\n && Date.now() - start < 60000) {\n setTimeout(function() {\n fs.stat(to, function (stater, st) {\n if (stater && stater.code === \"ENOENT\")\n fs$rename(from, to, CB);\n else\n cb(er)\n })\n }, backoff)\n if (backoff < 100)\n backoff += 10;\n return;\n }\n if (cb) cb(er)\n })\n }\n if (Object.setPrototypeOf) Object.setPrototypeOf(rename, fs$rename)\n return rename\n })(fs.rename)\n }\n\n // if read() returns EAGAIN, then just try it again.\n fs.read = typeof fs.read !== 'function' ? fs.read\n : (function (fs$read) {\n function read (fd, buffer, offset, length, position, callback_) {\n var callback\n if (callback_ && typeof callback_ === 'function') {\n var eagCounter = 0\n callback = function (er, _, __) {\n if (er && er.code === 'EAGAIN' && eagCounter < 10) {\n eagCounter ++\n return fs$read.call(fs, fd, buffer, offset, length, position, callback)\n }\n callback_.apply(this, arguments)\n }\n }\n return fs$read.call(fs, fd, buffer, offset, length, position, callback)\n }\n\n // This ensures `util.promisify` works as it does for native `fs.read`.\n if (Object.setPrototypeOf) Object.setPrototypeOf(read, fs$read)\n return read\n })(fs.read)\n\n fs.readSync = typeof fs.readSync !== 'function' ? fs.readSync\n : (function (fs$readSync) { return function (fd, buffer, offset, length, position) {\n var eagCounter = 0\n while (true) {\n try {\n return fs$readSync.call(fs, fd, buffer, offset, length, position)\n } catch (er) {\n if (er.code === 'EAGAIN' && eagCounter < 10) {\n eagCounter ++\n continue\n }\n throw er\n }\n }\n }})(fs.readSync)\n\n function patchLchmod (fs) {\n fs.lchmod = function (path, mode, callback) {\n fs.open( path\n , constants.O_WRONLY | constants.O_SYMLINK\n , mode\n , function (err, fd) {\n if (err) {\n if (callback) callback(err)\n return\n }\n // prefer to return the chmod error, if one occurs,\n // but still try to close, and report closing errors if they occur.\n fs.fchmod(fd, mode, function (err) {\n fs.close(fd, function(err2) {\n if (callback) callback(err || err2)\n })\n })\n })\n }\n\n fs.lchmodSync = function (path, mode) {\n var fd = fs.openSync(path, constants.O_WRONLY | constants.O_SYMLINK, mode)\n\n // prefer to return the chmod error, if one occurs,\n // but still try to close, and report closing errors if they occur.\n var threw = true\n var ret\n try {\n ret = fs.fchmodSync(fd, mode)\n threw = false\n } finally {\n if (threw) {\n try {\n fs.closeSync(fd)\n } catch (er) {}\n } else {\n fs.closeSync(fd)\n }\n }\n return ret\n }\n }\n\n function patchLutimes (fs) {\n if (constants.hasOwnProperty(\"O_SYMLINK\") && fs.futimes) {\n fs.lutimes = function (path, at, mt, cb) {\n fs.open(path, constants.O_SYMLINK, function (er, fd) {\n if (er) {\n if (cb) cb(er)\n return\n }\n fs.futimes(fd, at, mt, function (er) {\n fs.close(fd, function (er2) {\n if (cb) cb(er || er2)\n })\n })\n })\n }\n\n fs.lutimesSync = function (path, at, mt) {\n var fd = fs.openSync(path, constants.O_SYMLINK)\n var ret\n var threw = true\n try {\n ret = fs.futimesSync(fd, at, mt)\n threw = false\n } finally {\n if (threw) {\n try {\n fs.closeSync(fd)\n } catch (er) {}\n } else {\n fs.closeSync(fd)\n }\n }\n return ret\n }\n\n } else if (fs.futimes) {\n fs.lutimes = function (_a, _b, _c, cb) { if (cb) process.nextTick(cb) }\n fs.lutimesSync = function () {}\n }\n }\n\n function chmodFix (orig) {\n if (!orig) return orig\n return function (target, mode, cb) {\n return orig.call(fs, target, mode, function (er) {\n if (chownErOk(er)) er = null\n if (cb) cb.apply(this, arguments)\n })\n }\n }\n\n function chmodFixSync (orig) {\n if (!orig) return orig\n return function (target, mode) {\n try {\n return orig.call(fs, target, mode)\n } catch (er) {\n if (!chownErOk(er)) throw er\n }\n }\n }\n\n\n function chownFix (orig) {\n if (!orig) return orig\n return function (target, uid, gid, cb) {\n return orig.call(fs, target, uid, gid, function (er) {\n if (chownErOk(er)) er = null\n if (cb) cb.apply(this, arguments)\n })\n }\n }\n\n function chownFixSync (orig) {\n if (!orig) return orig\n return function (target, uid, gid) {\n try {\n return orig.call(fs, target, uid, gid)\n } catch (er) {\n if (!chownErOk(er)) throw er\n }\n }\n }\n\n function statFix (orig) {\n if (!orig) return orig\n // Older versions of Node erroneously returned signed integers for\n // uid + gid.\n return function (target, options, cb) {\n if (typeof options === 'function') {\n cb = options\n options = null\n }\n function callback (er, stats) {\n if (stats) {\n if (stats.uid < 0) stats.uid += 0x100000000\n if (stats.gid < 0) stats.gid += 0x100000000\n }\n if (cb) cb.apply(this, arguments)\n }\n return options ? orig.call(fs, target, options, callback)\n : orig.call(fs, target, callback)\n }\n }\n\n function statFixSync (orig) {\n if (!orig) return orig\n // Older versions of Node erroneously returned signed integers for\n // uid + gid.\n return function (target, options) {\n var stats = options ? orig.call(fs, target, options)\n : orig.call(fs, target)\n if (stats) {\n if (stats.uid < 0) stats.uid += 0x100000000\n if (stats.gid < 0) stats.gid += 0x100000000\n }\n return stats;\n }\n }\n\n // ENOSYS means that the fs doesn't support the op. Just ignore\n // that, because it doesn't matter.\n //\n // if there's no getuid, or if getuid() is something other\n // than 0, and the error is EINVAL or EPERM, then just ignore\n // it.\n //\n // This specific case is a silent failure in cp, install, tar,\n // and most other unix tools that manage permissions.\n //\n // When running as root, or if other types of errors are\n // encountered, then it's strict.\n function chownErOk (er) {\n if (!er)\n return true\n\n if (er.code === \"ENOSYS\")\n return true\n\n var nonroot = !process.getuid || process.getuid() !== 0\n if (nonroot) {\n if (er.code === \"EINVAL\" || er.code === \"EPERM\")\n return true\n }\n\n return false\n }\n}\n", "var Stream = require('stream').Stream\n\nmodule.exports = legacy\n\nfunction legacy (fs) {\n return {\n ReadStream: ReadStream,\n WriteStream: WriteStream\n }\n\n function ReadStream (path, options) {\n if (!(this instanceof ReadStream)) return new ReadStream(path, options);\n\n Stream.call(this);\n\n var self = this;\n\n this.path = path;\n this.fd = null;\n this.readable = true;\n this.paused = false;\n\n this.flags = 'r';\n this.mode = 438; /*=0666*/\n this.bufferSize = 64 * 1024;\n\n options = options || {};\n\n // Mixin options into this\n var keys = Object.keys(options);\n for (var index = 0, length = keys.length; index < length; index++) {\n var key = keys[index];\n this[key] = options[key];\n }\n\n if (this.encoding) this.setEncoding(this.encoding);\n\n if (this.start !== undefined) {\n if ('number' !== typeof this.start) {\n throw TypeError('start must be a Number');\n }\n if (this.end === undefined) {\n this.end = Infinity;\n } else if ('number' !== typeof this.end) {\n throw TypeError('end must be a Number');\n }\n\n if (this.start > this.end) {\n throw new Error('start must be <= end');\n }\n\n this.pos = this.start;\n }\n\n if (this.fd !== null) {\n process.nextTick(function() {\n self._read();\n });\n return;\n }\n\n fs.open(this.path, this.flags, this.mode, function (err, fd) {\n if (err) {\n self.emit('error', err);\n self.readable = false;\n return;\n }\n\n self.fd = fd;\n self.emit('open', fd);\n self._read();\n })\n }\n\n function WriteStream (path, options) {\n if (!(this instanceof WriteStream)) return new WriteStream(path, options);\n\n Stream.call(this);\n\n this.path = path;\n this.fd = null;\n this.writable = true;\n\n this.flags = 'w';\n this.encoding = 'binary';\n this.mode = 438; /*=0666*/\n this.bytesWritten = 0;\n\n options = options || {};\n\n // Mixin options into this\n var keys = Object.keys(options);\n for (var index = 0, length = keys.length; index < length; index++) {\n var key = keys[index];\n this[key] = options[key];\n }\n\n if (this.start !== undefined) {\n if ('number' !== typeof this.start) {\n throw TypeError('start must be a Number');\n }\n if (this.start < 0) {\n throw new Error('start must be >= zero');\n }\n\n this.pos = this.start;\n }\n\n this.busy = false;\n this._queue = [];\n\n if (this.fd === null) {\n this._open = fs.open;\n this._queue.push([this._open, this.path, this.flags, this.mode, undefined]);\n this.flush();\n }\n }\n}\n", "'use strict'\n\nmodule.exports = clone\n\nvar getPrototypeOf = Object.getPrototypeOf || function (obj) {\n return obj.__proto__\n}\n\nfunction clone (obj) {\n if (obj === null || typeof obj !== 'object')\n return obj\n\n if (obj instanceof Object)\n var copy = { __proto__: getPrototypeOf(obj) }\n else\n var copy = Object.create(null)\n\n Object.getOwnPropertyNames(obj).forEach(function (key) {\n Object.defineProperty(copy, key, Object.getOwnPropertyDescriptor(obj, key))\n })\n\n return copy\n}\n", "var fs = require('fs')\nvar polyfills = require('./polyfills.js')\nvar legacy = require('./legacy-streams.js')\nvar clone = require('./clone.js')\n\nvar util = require('util')\n\n/* istanbul ignore next - node 0.x polyfill */\nvar gracefulQueue\nvar previousSymbol\n\n/* istanbul ignore else - node 0.x polyfill */\nif (typeof Symbol === 'function' && typeof Symbol.for === 'function') {\n gracefulQueue = Symbol.for('graceful-fs.queue')\n // This is used in testing by future versions\n previousSymbol = Symbol.for('graceful-fs.previous')\n} else {\n gracefulQueue = '___graceful-fs.queue'\n previousSymbol = '___graceful-fs.previous'\n}\n\nfunction noop () {}\n\nfunction publishQueue(context, queue) {\n Object.defineProperty(context, gracefulQueue, {\n get: function() {\n return queue\n }\n })\n}\n\nvar debug = noop\nif (util.debuglog)\n debug = util.debuglog('gfs4')\nelse if (/\\bgfs4\\b/i.test(process.env.NODE_DEBUG || ''))\n debug = function() {\n var m = util.format.apply(util, arguments)\n m = 'GFS4: ' + m.split(/\\n/).join('\\nGFS4: ')\n console.error(m)\n }\n\n// Once time initialization\nif (!fs[gracefulQueue]) {\n // This queue can be shared by multiple loaded instances\n var queue = global[gracefulQueue] || []\n publishQueue(fs, queue)\n\n // Patch fs.close/closeSync to shared queue version, because we need\n // to retry() whenever a close happens *anywhere* in the program.\n // This is essential when multiple graceful-fs instances are\n // in play at the same time.\n fs.close = (function (fs$close) {\n function close (fd, cb) {\n return fs$close.call(fs, fd, function (err) {\n // This function uses the graceful-fs shared queue\n if (!err) {\n resetQueue()\n }\n\n if (typeof cb === 'function')\n cb.apply(this, arguments)\n })\n }\n\n Object.defineProperty(close, previousSymbol, {\n value: fs$close\n })\n return close\n })(fs.close)\n\n fs.closeSync = (function (fs$closeSync) {\n function closeSync (fd) {\n // This function uses the graceful-fs shared queue\n fs$closeSync.apply(fs, arguments)\n resetQueue()\n }\n\n Object.defineProperty(closeSync, previousSymbol, {\n value: fs$closeSync\n })\n return closeSync\n })(fs.closeSync)\n\n if (/\\bgfs4\\b/i.test(process.env.NODE_DEBUG || '')) {\n process.on('exit', function() {\n debug(fs[gracefulQueue])\n require('assert').equal(fs[gracefulQueue].length, 0)\n })\n }\n}\n\nif (!global[gracefulQueue]) {\n publishQueue(global, fs[gracefulQueue]);\n}\n\nmodule.exports = patch(clone(fs))\nif (process.env.TEST_GRACEFUL_FS_GLOBAL_PATCH && !fs.__patched) {\n module.exports = patch(fs)\n fs.__patched = true;\n}\n\nfunction patch (fs) {\n // Everything that references the open() function needs to be in here\n polyfills(fs)\n fs.gracefulify = patch\n\n fs.createReadStream = createReadStream\n fs.createWriteStream = createWriteStream\n var fs$readFile = fs.readFile\n fs.readFile = readFile\n function readFile (path, options, cb) {\n if (typeof options === 'function')\n cb = options, options = null\n\n return go$readFile(path, options, cb)\n\n function go$readFile (path, options, cb, startTime) {\n return fs$readFile(path, options, function (err) {\n if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n enqueue([go$readFile, [path, options, cb], err, startTime || Date.now(), Date.now()])\n else {\n if (typeof cb === 'function')\n cb.apply(this, arguments)\n }\n })\n }\n }\n\n var fs$writeFile = fs.writeFile\n fs.writeFile = writeFile\n function writeFile (path, data, options, cb) {\n if (typeof options === 'function')\n cb = options, options = null\n\n return go$writeFile(path, data, options, cb)\n\n function go$writeFile (path, data, options, cb, startTime) {\n return fs$writeFile(path, data, options, function (err) {\n if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n enqueue([go$writeFile, [path, data, options, cb], err, startTime || Date.now(), Date.now()])\n else {\n if (typeof cb === 'function')\n cb.apply(this, arguments)\n }\n })\n }\n }\n\n var fs$appendFile = fs.appendFile\n if (fs$appendFile)\n fs.appendFile = appendFile\n function appendFile (path, data, options, cb) {\n if (typeof options === 'function')\n cb = options, options = null\n\n return go$appendFile(path, data, options, cb)\n\n function go$appendFile (path, data, options, cb, startTime) {\n return fs$appendFile(path, data, options, function (err) {\n if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n enqueue([go$appendFile, [path, data, options, cb], err, startTime || Date.now(), Date.now()])\n else {\n if (typeof cb === 'function')\n cb.apply(this, arguments)\n }\n })\n }\n }\n\n var fs$copyFile = fs.copyFile\n if (fs$copyFile)\n fs.copyFile = copyFile\n function copyFile (src, dest, flags, cb) {\n if (typeof flags === 'function') {\n cb = flags\n flags = 0\n }\n return go$copyFile(src, dest, flags, cb)\n\n function go$copyFile (src, dest, flags, cb, startTime) {\n return fs$copyFile(src, dest, flags, function (err) {\n if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n enqueue([go$copyFile, [src, dest, flags, cb], err, startTime || Date.now(), Date.now()])\n else {\n if (typeof cb === 'function')\n cb.apply(this, arguments)\n }\n })\n }\n }\n\n var fs$readdir = fs.readdir\n fs.readdir = readdir\n var noReaddirOptionVersions = /^v[0-5]\\./\n function readdir (path, options, cb) {\n if (typeof options === 'function')\n cb = options, options = null\n\n var go$readdir = noReaddirOptionVersions.test(process.version)\n ? function go$readdir (path, options, cb, startTime) {\n return fs$readdir(path, fs$readdirCallback(\n path, options, cb, startTime\n ))\n }\n : function go$readdir (path, options, cb, startTime) {\n return fs$readdir(path, options, fs$readdirCallback(\n path, options, cb, startTime\n ))\n }\n\n return go$readdir(path, options, cb)\n\n function fs$readdirCallback (path, options, cb, startTime) {\n return function (err, files) {\n if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n enqueue([\n go$readdir,\n [path, options, cb],\n err,\n startTime || Date.now(),\n Date.now()\n ])\n else {\n if (files && files.sort)\n files.sort()\n\n if (typeof cb === 'function')\n cb.call(this, err, files)\n }\n }\n }\n }\n\n if (process.version.substr(0, 4) === 'v0.8') {\n var legStreams = legacy(fs)\n ReadStream = legStreams.ReadStream\n WriteStream = legStreams.WriteStream\n }\n\n var fs$ReadStream = fs.ReadStream\n if (fs$ReadStream) {\n ReadStream.prototype = Object.create(fs$ReadStream.prototype)\n ReadStream.prototype.open = ReadStream$open\n }\n\n var fs$WriteStream = fs.WriteStream\n if (fs$WriteStream) {\n WriteStream.prototype = Object.create(fs$WriteStream.prototype)\n WriteStream.prototype.open = WriteStream$open\n }\n\n Object.defineProperty(fs, 'ReadStream', {\n get: function () {\n return ReadStream\n },\n set: function (val) {\n ReadStream = val\n },\n enumerable: true,\n configurable: true\n })\n Object.defineProperty(fs, 'WriteStream', {\n get: function () {\n return WriteStream\n },\n set: function (val) {\n WriteStream = val\n },\n enumerable: true,\n configurable: true\n })\n\n // legacy names\n var FileReadStream = ReadStream\n Object.defineProperty(fs, 'FileReadStream', {\n get: function () {\n return FileReadStream\n },\n set: function (val) {\n FileReadStream = val\n },\n enumerable: true,\n configurable: true\n })\n var FileWriteStream = WriteStream\n Object.defineProperty(fs, 'FileWriteStream', {\n get: function () {\n return FileWriteStream\n },\n set: function (val) {\n FileWriteStream = val\n },\n enumerable: true,\n configurable: true\n })\n\n function ReadStream (path, options) {\n if (this instanceof ReadStream)\n return fs$ReadStream.apply(this, arguments), this\n else\n return ReadStream.apply(Object.create(ReadStream.prototype), arguments)\n }\n\n function ReadStream$open () {\n var that = this\n open(that.path, that.flags, that.mode, function (err, fd) {\n if (err) {\n if (that.autoClose)\n that.destroy()\n\n that.emit('error', err)\n } else {\n that.fd = fd\n that.emit('open', fd)\n that.read()\n }\n })\n }\n\n function WriteStream (path, options) {\n if (this instanceof WriteStream)\n return fs$WriteStream.apply(this, arguments), this\n else\n return WriteStream.apply(Object.create(WriteStream.prototype), arguments)\n }\n\n function WriteStream$open () {\n var that = this\n open(that.path, that.flags, that.mode, function (err, fd) {\n if (err) {\n that.destroy()\n that.emit('error', err)\n } else {\n that.fd = fd\n that.emit('open', fd)\n }\n })\n }\n\n function createReadStream (path, options) {\n return new fs.ReadStream(path, options)\n }\n\n function createWriteStream (path, options) {\n return new fs.WriteStream(path, options)\n }\n\n var fs$open = fs.open\n fs.open = open\n function open (path, flags, mode, cb) {\n if (typeof mode === 'function')\n cb = mode, mode = null\n\n return go$open(path, flags, mode, cb)\n\n function go$open (path, flags, mode, cb, startTime) {\n return fs$open(path, flags, mode, function (err, fd) {\n if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n enqueue([go$open, [path, flags, mode, cb], err, startTime || Date.now(), Date.now()])\n else {\n if (typeof cb === 'function')\n cb.apply(this, arguments)\n }\n })\n }\n }\n\n return fs\n}\n\nfunction enqueue (elem) {\n debug('ENQUEUE', elem[0].name, elem[1])\n fs[gracefulQueue].push(elem)\n retry()\n}\n\n// keep track of the timeout between retry() calls\nvar retryTimer\n\n// reset the startTime and lastTime to now\n// this resets the start of the 60 second overall timeout as well as the\n// delay between attempts so that we'll retry these jobs sooner\nfunction resetQueue () {\n var now = Date.now()\n for (var i = 0; i < fs[gracefulQueue].length; ++i) {\n // entries that are only a length of 2 are from an older version, don't\n // bother modifying those since they'll be retried anyway.\n if (fs[gracefulQueue][i].length > 2) {\n fs[gracefulQueue][i][3] = now // startTime\n fs[gracefulQueue][i][4] = now // lastTime\n }\n }\n // call retry to make sure we're actively processing the queue\n retry()\n}\n\nfunction retry () {\n // clear the timer and remove it to help prevent unintended concurrency\n clearTimeout(retryTimer)\n retryTimer = undefined\n\n if (fs[gracefulQueue].length === 0)\n return\n\n var elem = fs[gracefulQueue].shift()\n var fn = elem[0]\n var args = elem[1]\n // these items may be unset if they were added by an older graceful-fs\n var err = elem[2]\n var startTime = elem[3]\n var lastTime = elem[4]\n\n // if we don't have a startTime we have no way of knowing if we've waited\n // long enough, so go ahead and retry this item now\n if (startTime === undefined) {\n debug('RETRY', fn.name, args)\n fn.apply(null, args)\n } else if (Date.now() - startTime >= 60000) {\n // it's been more than 60 seconds total, bail now\n debug('TIMEOUT', fn.name, args)\n var cb = args.pop()\n if (typeof cb === 'function')\n cb.call(null, err)\n } else {\n // the amount of time between the last attempt and right now\n var sinceAttempt = Date.now() - lastTime\n // the amount of time between when we first tried, and when we last tried\n // rounded up to at least 1\n var sinceStart = Math.max(lastTime - startTime, 1)\n // backoff. wait longer than the total time we've been retrying, but only\n // up to a maximum of 100ms\n var desiredDelay = Math.min(sinceStart * 1.2, 100)\n // it's been long enough since the last retry, do it again\n if (sinceAttempt >= desiredDelay) {\n debug('RETRY', fn.name, args)\n fn.apply(null, args.concat([startTime]))\n } else {\n // if we can't do this job yet, push it to the end of the queue\n // and let the next iteration check again\n fs[gracefulQueue].push(elem)\n }\n }\n\n // schedule our next run if one isn't already scheduled\n if (retryTimer === undefined) {\n retryTimer = setTimeout(retry, 0)\n }\n}\n", "'use strict'\n// This is adapted from https://github.com/normalize/mz\n// Copyright (c) 2014-2016 Jonathan Ong me@jongleberry.com and Contributors\nconst u = require('universalify').fromCallback\nconst fs = require('graceful-fs')\n\nconst api = [\n 'access',\n 'appendFile',\n 'chmod',\n 'chown',\n 'close',\n 'copyFile',\n 'fchmod',\n 'fchown',\n 'fdatasync',\n 'fstat',\n 'fsync',\n 'ftruncate',\n 'futimes',\n 'lchmod',\n 'lchown',\n 'link',\n 'lstat',\n 'mkdir',\n 'mkdtemp',\n 'open',\n 'opendir',\n 'readdir',\n 'readFile',\n 'readlink',\n 'realpath',\n 'rename',\n 'rm',\n 'rmdir',\n 'stat',\n 'symlink',\n 'truncate',\n 'unlink',\n 'utimes',\n 'writeFile'\n].filter(key => {\n // Some commands are not available on some systems. Ex:\n // fs.opendir was added in Node.js v12.12.0\n // fs.rm was added in Node.js v14.14.0\n // fs.lchown is not available on at least some Linux\n return typeof fs[key] === 'function'\n})\n\n// Export cloned fs:\nObject.assign(exports, fs)\n\n// Universalify async methods:\napi.forEach(method => {\n exports[method] = u(fs[method])\n})\n\n// We differ from mz/fs in that we still ship the old, broken, fs.exists()\n// since we are a drop-in replacement for the native module\nexports.exists = function (filename, callback) {\n if (typeof callback === 'function') {\n return fs.exists(filename, callback)\n }\n return new Promise(resolve => {\n return fs.exists(filename, resolve)\n })\n}\n\n// fs.read(), fs.write(), & fs.writev() need special treatment due to multiple callback args\n\nexports.read = function (fd, buffer, offset, length, position, callback) {\n if (typeof callback === 'function') {\n return fs.read(fd, buffer, offset, length, position, callback)\n }\n return new Promise((resolve, reject) => {\n fs.read(fd, buffer, offset, length, position, (err, bytesRead, buffer) => {\n if (err) return reject(err)\n resolve({ bytesRead, buffer })\n })\n })\n}\n\n// Function signature can be\n// fs.write(fd, buffer[, offset[, length[, position]]], callback)\n// OR\n// fs.write(fd, string[, position[, encoding]], callback)\n// We need to handle both cases, so we use ...args\nexports.write = function (fd, buffer, ...args) {\n if (typeof args[args.length - 1] === 'function') {\n return fs.write(fd, buffer, ...args)\n }\n\n return new Promise((resolve, reject) => {\n fs.write(fd, buffer, ...args, (err, bytesWritten, buffer) => {\n if (err) return reject(err)\n resolve({ bytesWritten, buffer })\n })\n })\n}\n\n// fs.writev only available in Node v12.9.0+\nif (typeof fs.writev === 'function') {\n // Function signature is\n // s.writev(fd, buffers[, position], callback)\n // We need to handle the optional arg, so we use ...args\n exports.writev = function (fd, buffers, ...args) {\n if (typeof args[args.length - 1] === 'function') {\n return fs.writev(fd, buffers, ...args)\n }\n\n return new Promise((resolve, reject) => {\n fs.writev(fd, buffers, ...args, (err, bytesWritten, buffers) => {\n if (err) return reject(err)\n resolve({ bytesWritten, buffers })\n })\n })\n }\n}\n\n// fs.realpath.native sometimes not available if fs is monkey-patched\nif (typeof fs.realpath.native === 'function') {\n exports.realpath.native = u(fs.realpath.native)\n} else {\n process.emitWarning(\n 'fs.realpath.native is not a function. Is fs being monkey-patched?',\n 'Warning', 'fs-extra-WARN0003'\n )\n}\n", "// Adapted from https://github.com/sindresorhus/make-dir\n// Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)\n// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n'use strict'\nconst path = require('path')\n\n// https://github.com/nodejs/node/issues/8987\n// https://github.com/libuv/libuv/pull/1088\nmodule.exports.checkPath = function checkPath (pth) {\n if (process.platform === 'win32') {\n const pathHasInvalidWinCharacters = /[<>:\"|?*]/.test(pth.replace(path.parse(pth).root, ''))\n\n if (pathHasInvalidWinCharacters) {\n const error = new Error(`Path contains invalid characters: ${pth}`)\n error.code = 'EINVAL'\n throw error\n }\n }\n}\n", "'use strict'\nconst fs = require('../fs')\nconst { checkPath } = require('./utils')\n\nconst getMode = options => {\n const defaults = { mode: 0o777 }\n if (typeof options === 'number') return options\n return ({ ...defaults, ...options }).mode\n}\n\nmodule.exports.makeDir = async (dir, options) => {\n checkPath(dir)\n\n return fs.mkdir(dir, {\n mode: getMode(options),\n recursive: true\n })\n}\n\nmodule.exports.makeDirSync = (dir, options) => {\n checkPath(dir)\n\n return fs.mkdirSync(dir, {\n mode: getMode(options),\n recursive: true\n })\n}\n", "'use strict'\nconst u = require('universalify').fromPromise\nconst { makeDir: _makeDir, makeDirSync } = require('./make-dir')\nconst makeDir = u(_makeDir)\n\nmodule.exports = {\n mkdirs: makeDir,\n mkdirsSync: makeDirSync,\n // alias\n mkdirp: makeDir,\n mkdirpSync: makeDirSync,\n ensureDir: makeDir,\n ensureDirSync: makeDirSync\n}\n", "'use strict'\nconst u = require('universalify').fromPromise\nconst fs = require('../fs')\n\nfunction pathExists (path) {\n return fs.access(path).then(() => true).catch(() => false)\n}\n\nmodule.exports = {\n pathExists: u(pathExists),\n pathExistsSync: fs.existsSync\n}\n", "'use strict'\n\nconst fs = require('graceful-fs')\n\nfunction utimesMillis (path, atime, mtime, callback) {\n // if (!HAS_MILLIS_RES) return fs.utimes(path, atime, mtime, callback)\n fs.open(path, 'r+', (err, fd) => {\n if (err) return callback(err)\n fs.futimes(fd, atime, mtime, futimesErr => {\n fs.close(fd, closeErr => {\n if (callback) callback(futimesErr || closeErr)\n })\n })\n })\n}\n\nfunction utimesMillisSync (path, atime, mtime) {\n const fd = fs.openSync(path, 'r+')\n fs.futimesSync(fd, atime, mtime)\n return fs.closeSync(fd)\n}\n\nmodule.exports = {\n utimesMillis,\n utimesMillisSync\n}\n", "'use strict'\n\nconst fs = require('../fs')\nconst path = require('path')\nconst util = require('util')\n\nfunction getStats (src, dest, opts) {\n const statFunc = opts.dereference\n ? (file) => fs.stat(file, { bigint: true })\n : (file) => fs.lstat(file, { bigint: true })\n return Promise.all([\n statFunc(src),\n statFunc(dest).catch(err => {\n if (err.code === 'ENOENT') return null\n throw err\n })\n ]).then(([srcStat, destStat]) => ({ srcStat, destStat }))\n}\n\nfunction getStatsSync (src, dest, opts) {\n let destStat\n const statFunc = opts.dereference\n ? (file) => fs.statSync(file, { bigint: true })\n : (file) => fs.lstatSync(file, { bigint: true })\n const srcStat = statFunc(src)\n try {\n destStat = statFunc(dest)\n } catch (err) {\n if (err.code === 'ENOENT') return { srcStat, destStat: null }\n throw err\n }\n return { srcStat, destStat }\n}\n\nfunction checkPaths (src, dest, funcName, opts, cb) {\n util.callbackify(getStats)(src, dest, opts, (err, stats) => {\n if (err) return cb(err)\n const { srcStat, destStat } = stats\n\n if (destStat) {\n if (areIdentical(srcStat, destStat)) {\n const srcBaseName = path.basename(src)\n const destBaseName = path.basename(dest)\n if (funcName === 'move' &&\n srcBaseName !== destBaseName &&\n srcBaseName.toLowerCase() === destBaseName.toLowerCase()) {\n return cb(null, { srcStat, destStat, isChangingCase: true })\n }\n return cb(new Error('Source and destination must not be the same.'))\n }\n if (srcStat.isDirectory() && !destStat.isDirectory()) {\n return cb(new Error(`Cannot overwrite non-directory '${dest}' with directory '${src}'.`))\n }\n if (!srcStat.isDirectory() && destStat.isDirectory()) {\n return cb(new Error(`Cannot overwrite directory '${dest}' with non-directory '${src}'.`))\n }\n }\n\n if (srcStat.isDirectory() && isSrcSubdir(src, dest)) {\n return cb(new Error(errMsg(src, dest, funcName)))\n }\n return cb(null, { srcStat, destStat })\n })\n}\n\nfunction checkPathsSync (src, dest, funcName, opts) {\n const { srcStat, destStat } = getStatsSync(src, dest, opts)\n\n if (destStat) {\n if (areIdentical(srcStat, destStat)) {\n const srcBaseName = path.basename(src)\n const destBaseName = path.basename(dest)\n if (funcName === 'move' &&\n srcBaseName !== destBaseName &&\n srcBaseName.toLowerCase() === destBaseName.toLowerCase()) {\n return { srcStat, destStat, isChangingCase: true }\n }\n throw new Error('Source and destination must not be the same.')\n }\n if (srcStat.isDirectory() && !destStat.isDirectory()) {\n throw new Error(`Cannot overwrite non-directory '${dest}' with directory '${src}'.`)\n }\n if (!srcStat.isDirectory() && destStat.isDirectory()) {\n throw new Error(`Cannot overwrite directory '${dest}' with non-directory '${src}'.`)\n }\n }\n\n if (srcStat.isDirectory() && isSrcSubdir(src, dest)) {\n throw new Error(errMsg(src, dest, funcName))\n }\n return { srcStat, destStat }\n}\n\n// recursively check if dest parent is a subdirectory of src.\n// It works for all file types including symlinks since it\n// checks the src and dest inodes. It starts from the deepest\n// parent and stops once it reaches the src parent or the root path.\nfunction checkParentPaths (src, srcStat, dest, funcName, cb) {\n const srcParent = path.resolve(path.dirname(src))\n const destParent = path.resolve(path.dirname(dest))\n if (destParent === srcParent || destParent === path.parse(destParent).root) return cb()\n fs.stat(destParent, { bigint: true }, (err, destStat) => {\n if (err) {\n if (err.code === 'ENOENT') return cb()\n return cb(err)\n }\n if (areIdentical(srcStat, destStat)) {\n return cb(new Error(errMsg(src, dest, funcName)))\n }\n return checkParentPaths(src, srcStat, destParent, funcName, cb)\n })\n}\n\nfunction checkParentPathsSync (src, srcStat, dest, funcName) {\n const srcParent = path.resolve(path.dirname(src))\n const destParent = path.resolve(path.dirname(dest))\n if (destParent === srcParent || destParent === path.parse(destParent).root) return\n let destStat\n try {\n destStat = fs.statSync(destParent, { bigint: true })\n } catch (err) {\n if (err.code === 'ENOENT') return\n throw err\n }\n if (areIdentical(srcStat, destStat)) {\n throw new Error(errMsg(src, dest, funcName))\n }\n return checkParentPathsSync(src, srcStat, destParent, funcName)\n}\n\nfunction areIdentical (srcStat, destStat) {\n return destStat.ino && destStat.dev && destStat.ino === srcStat.ino && destStat.dev === srcStat.dev\n}\n\n// return true if dest is a subdir of src, otherwise false.\n// It only checks the path strings.\nfunction isSrcSubdir (src, dest) {\n const srcArr = path.resolve(src).split(path.sep).filter(i => i)\n const destArr = path.resolve(dest).split(path.sep).filter(i => i)\n return srcArr.reduce((acc, cur, i) => acc && destArr[i] === cur, true)\n}\n\nfunction errMsg (src, dest, funcName) {\n return `Cannot ${funcName} '${src}' to a subdirectory of itself, '${dest}'.`\n}\n\nmodule.exports = {\n checkPaths,\n checkPathsSync,\n checkParentPaths,\n checkParentPathsSync,\n isSrcSubdir,\n areIdentical\n}\n", "'use strict'\n\nconst fs = require('graceful-fs')\nconst path = require('path')\nconst mkdirs = require('../mkdirs').mkdirs\nconst pathExists = require('../path-exists').pathExists\nconst utimesMillis = require('../util/utimes').utimesMillis\nconst stat = require('../util/stat')\n\nfunction copy (src, dest, opts, cb) {\n if (typeof opts === 'function' && !cb) {\n cb = opts\n opts = {}\n } else if (typeof opts === 'function') {\n opts = { filter: opts }\n }\n\n cb = cb || function () {}\n opts = opts || {}\n\n opts.clobber = 'clobber' in opts ? !!opts.clobber : true // default to true for now\n opts.overwrite = 'overwrite' in opts ? !!opts.overwrite : opts.clobber // overwrite falls back to clobber\n\n // Warn about using preserveTimestamps on 32-bit node\n if (opts.preserveTimestamps && process.arch === 'ia32') {\n process.emitWarning(\n 'Using the preserveTimestamps option in 32-bit node is not recommended;\\n\\n' +\n '\\tsee https://github.com/jprichardson/node-fs-extra/issues/269',\n 'Warning', 'fs-extra-WARN0001'\n )\n }\n\n stat.checkPaths(src, dest, 'copy', opts, (err, stats) => {\n if (err) return cb(err)\n const { srcStat, destStat } = stats\n stat.checkParentPaths(src, srcStat, dest, 'copy', err => {\n if (err) return cb(err)\n if (opts.filter) return handleFilter(checkParentDir, destStat, src, dest, opts, cb)\n return checkParentDir(destStat, src, dest, opts, cb)\n })\n })\n}\n\nfunction checkParentDir (destStat, src, dest, opts, cb) {\n const destParent = path.dirname(dest)\n pathExists(destParent, (err, dirExists) => {\n if (err) return cb(err)\n if (dirExists) return getStats(destStat, src, dest, opts, cb)\n mkdirs(destParent, err => {\n if (err) return cb(err)\n return getStats(destStat, src, dest, opts, cb)\n })\n })\n}\n\nfunction handleFilter (onInclude, destStat, src, dest, opts, cb) {\n Promise.resolve(opts.filter(src, dest)).then(include => {\n if (include) return onInclude(destStat, src, dest, opts, cb)\n return cb()\n }, error => cb(error))\n}\n\nfunction startCopy (destStat, src, dest, opts, cb) {\n if (opts.filter) return handleFilter(getStats, destStat, src, dest, opts, cb)\n return getStats(destStat, src, dest, opts, cb)\n}\n\nfunction getStats (destStat, src, dest, opts, cb) {\n const stat = opts.dereference ? fs.stat : fs.lstat\n stat(src, (err, srcStat) => {\n if (err) return cb(err)\n\n if (srcStat.isDirectory()) return onDir(srcStat, destStat, src, dest, opts, cb)\n else if (srcStat.isFile() ||\n srcStat.isCharacterDevice() ||\n srcStat.isBlockDevice()) return onFile(srcStat, destStat, src, dest, opts, cb)\n else if (srcStat.isSymbolicLink()) return onLink(destStat, src, dest, opts, cb)\n else if (srcStat.isSocket()) return cb(new Error(`Cannot copy a socket file: ${src}`))\n else if (srcStat.isFIFO()) return cb(new Error(`Cannot copy a FIFO pipe: ${src}`))\n return cb(new Error(`Unknown file: ${src}`))\n })\n}\n\nfunction onFile (srcStat, destStat, src, dest, opts, cb) {\n if (!destStat) return copyFile(srcStat, src, dest, opts, cb)\n return mayCopyFile(srcStat, src, dest, opts, cb)\n}\n\nfunction mayCopyFile (srcStat, src, dest, opts, cb) {\n if (opts.overwrite) {\n fs.unlink(dest, err => {\n if (err) return cb(err)\n return copyFile(srcStat, src, dest, opts, cb)\n })\n } else if (opts.errorOnExist) {\n return cb(new Error(`'${dest}' already exists`))\n } else return cb()\n}\n\nfunction copyFile (srcStat, src, dest, opts, cb) {\n fs.copyFile(src, dest, err => {\n if (err) return cb(err)\n if (opts.preserveTimestamps) return handleTimestampsAndMode(srcStat.mode, src, dest, cb)\n return setDestMode(dest, srcStat.mode, cb)\n })\n}\n\nfunction handleTimestampsAndMode (srcMode, src, dest, cb) {\n // Make sure the file is writable before setting the timestamp\n // otherwise open fails with EPERM when invoked with 'r+'\n // (through utimes call)\n if (fileIsNotWritable(srcMode)) {\n return makeFileWritable(dest, srcMode, err => {\n if (err) return cb(err)\n return setDestTimestampsAndMode(srcMode, src, dest, cb)\n })\n }\n return setDestTimestampsAndMode(srcMode, src, dest, cb)\n}\n\nfunction fileIsNotWritable (srcMode) {\n return (srcMode & 0o200) === 0\n}\n\nfunction makeFileWritable (dest, srcMode, cb) {\n return setDestMode(dest, srcMode | 0o200, cb)\n}\n\nfunction setDestTimestampsAndMode (srcMode, src, dest, cb) {\n setDestTimestamps(src, dest, err => {\n if (err) return cb(err)\n return setDestMode(dest, srcMode, cb)\n })\n}\n\nfunction setDestMode (dest, srcMode, cb) {\n return fs.chmod(dest, srcMode, cb)\n}\n\nfunction setDestTimestamps (src, dest, cb) {\n // The initial srcStat.atime cannot be trusted\n // because it is modified by the read(2) system call\n // (See https://nodejs.org/api/fs.html#fs_stat_time_values)\n fs.stat(src, (err, updatedSrcStat) => {\n if (err) return cb(err)\n return utimesMillis(dest, updatedSrcStat.atime, updatedSrcStat.mtime, cb)\n })\n}\n\nfunction onDir (srcStat, destStat, src, dest, opts, cb) {\n if (!destStat) return mkDirAndCopy(srcStat.mode, src, dest, opts, cb)\n return copyDir(src, dest, opts, cb)\n}\n\nfunction mkDirAndCopy (srcMode, src, dest, opts, cb) {\n fs.mkdir(dest, err => {\n if (err) return cb(err)\n copyDir(src, dest, opts, err => {\n if (err) return cb(err)\n return setDestMode(dest, srcMode, cb)\n })\n })\n}\n\nfunction copyDir (src, dest, opts, cb) {\n fs.readdir(src, (err, items) => {\n if (err) return cb(err)\n return copyDirItems(items, src, dest, opts, cb)\n })\n}\n\nfunction copyDirItems (items, src, dest, opts, cb) {\n const item = items.pop()\n if (!item) return cb()\n return copyDirItem(items, item, src, dest, opts, cb)\n}\n\nfunction copyDirItem (items, item, src, dest, opts, cb) {\n const srcItem = path.join(src, item)\n const destItem = path.join(dest, item)\n stat.checkPaths(srcItem, destItem, 'copy', opts, (err, stats) => {\n if (err) return cb(err)\n const { destStat } = stats\n startCopy(destStat, srcItem, destItem, opts, err => {\n if (err) return cb(err)\n return copyDirItems(items, src, dest, opts, cb)\n })\n })\n}\n\nfunction onLink (destStat, src, dest, opts, cb) {\n fs.readlink(src, (err, resolvedSrc) => {\n if (err) return cb(err)\n if (opts.dereference) {\n resolvedSrc = path.resolve(process.cwd(), resolvedSrc)\n }\n\n if (!destStat) {\n return fs.symlink(resolvedSrc, dest, cb)\n } else {\n fs.readlink(dest, (err, resolvedDest) => {\n if (err) {\n // dest exists and is a regular file or directory,\n // Windows may throw UNKNOWN error. If dest already exists,\n // fs throws error anyway, so no need to guard against it here.\n if (err.code === 'EINVAL' || err.code === 'UNKNOWN') return fs.symlink(resolvedSrc, dest, cb)\n return cb(err)\n }\n if (opts.dereference) {\n resolvedDest = path.resolve(process.cwd(), resolvedDest)\n }\n if (stat.isSrcSubdir(resolvedSrc, resolvedDest)) {\n return cb(new Error(`Cannot copy '${resolvedSrc}' to a subdirectory of itself, '${resolvedDest}'.`))\n }\n\n // do not copy if src is a subdir of dest since unlinking\n // dest in this case would result in removing src contents\n // and therefore a broken symlink would be created.\n if (destStat.isDirectory() && stat.isSrcSubdir(resolvedDest, resolvedSrc)) {\n return cb(new Error(`Cannot overwrite '${resolvedDest}' with '${resolvedSrc}'.`))\n }\n return copyLink(resolvedSrc, dest, cb)\n })\n }\n })\n}\n\nfunction copyLink (resolvedSrc, dest, cb) {\n fs.unlink(dest, err => {\n if (err) return cb(err)\n return fs.symlink(resolvedSrc, dest, cb)\n })\n}\n\nmodule.exports = copy\n", "'use strict'\n\nconst fs = require('graceful-fs')\nconst path = require('path')\nconst mkdirsSync = require('../mkdirs').mkdirsSync\nconst utimesMillisSync = require('../util/utimes').utimesMillisSync\nconst stat = require('../util/stat')\n\nfunction copySync (src, dest, opts) {\n if (typeof opts === 'function') {\n opts = { filter: opts }\n }\n\n opts = opts || {}\n opts.clobber = 'clobber' in opts ? !!opts.clobber : true // default to true for now\n opts.overwrite = 'overwrite' in opts ? !!opts.overwrite : opts.clobber // overwrite falls back to clobber\n\n // Warn about using preserveTimestamps on 32-bit node\n if (opts.preserveTimestamps && process.arch === 'ia32') {\n process.emitWarning(\n 'Using the preserveTimestamps option in 32-bit node is not recommended;\\n\\n' +\n '\\tsee https://github.com/jprichardson/node-fs-extra/issues/269',\n 'Warning', 'fs-extra-WARN0002'\n )\n }\n\n const { srcStat, destStat } = stat.checkPathsSync(src, dest, 'copy', opts)\n stat.checkParentPathsSync(src, srcStat, dest, 'copy')\n return handleFilterAndCopy(destStat, src, dest, opts)\n}\n\nfunction handleFilterAndCopy (destStat, src, dest, opts) {\n if (opts.filter && !opts.filter(src, dest)) return\n const destParent = path.dirname(dest)\n if (!fs.existsSync(destParent)) mkdirsSync(destParent)\n return getStats(destStat, src, dest, opts)\n}\n\nfunction startCopy (destStat, src, dest, opts) {\n if (opts.filter && !opts.filter(src, dest)) return\n return getStats(destStat, src, dest, opts)\n}\n\nfunction getStats (destStat, src, dest, opts) {\n const statSync = opts.dereference ? fs.statSync : fs.lstatSync\n const srcStat = statSync(src)\n\n if (srcStat.isDirectory()) return onDir(srcStat, destStat, src, dest, opts)\n else if (srcStat.isFile() ||\n srcStat.isCharacterDevice() ||\n srcStat.isBlockDevice()) return onFile(srcStat, destStat, src, dest, opts)\n else if (srcStat.isSymbolicLink()) return onLink(destStat, src, dest, opts)\n else if (srcStat.isSocket()) throw new Error(`Cannot copy a socket file: ${src}`)\n else if (srcStat.isFIFO()) throw new Error(`Cannot copy a FIFO pipe: ${src}`)\n throw new Error(`Unknown file: ${src}`)\n}\n\nfunction onFile (srcStat, destStat, src, dest, opts) {\n if (!destStat) return copyFile(srcStat, src, dest, opts)\n return mayCopyFile(srcStat, src, dest, opts)\n}\n\nfunction mayCopyFile (srcStat, src, dest, opts) {\n if (opts.overwrite) {\n fs.unlinkSync(dest)\n return copyFile(srcStat, src, dest, opts)\n } else if (opts.errorOnExist) {\n throw new Error(`'${dest}' already exists`)\n }\n}\n\nfunction copyFile (srcStat, src, dest, opts) {\n fs.copyFileSync(src, dest)\n if (opts.preserveTimestamps) handleTimestamps(srcStat.mode, src, dest)\n return setDestMode(dest, srcStat.mode)\n}\n\nfunction handleTimestamps (srcMode, src, dest) {\n // Make sure the file is writable before setting the timestamp\n // otherwise open fails with EPERM when invoked with 'r+'\n // (through utimes call)\n if (fileIsNotWritable(srcMode)) makeFileWritable(dest, srcMode)\n return setDestTimestamps(src, dest)\n}\n\nfunction fileIsNotWritable (srcMode) {\n return (srcMode & 0o200) === 0\n}\n\nfunction makeFileWritable (dest, srcMode) {\n return setDestMode(dest, srcMode | 0o200)\n}\n\nfunction setDestMode (dest, srcMode) {\n return fs.chmodSync(dest, srcMode)\n}\n\nfunction setDestTimestamps (src, dest) {\n // The initial srcStat.atime cannot be trusted\n // because it is modified by the read(2) system call\n // (See https://nodejs.org/api/fs.html#fs_stat_time_values)\n const updatedSrcStat = fs.statSync(src)\n return utimesMillisSync(dest, updatedSrcStat.atime, updatedSrcStat.mtime)\n}\n\nfunction onDir (srcStat, destStat, src, dest, opts) {\n if (!destStat) return mkDirAndCopy(srcStat.mode, src, dest, opts)\n return copyDir(src, dest, opts)\n}\n\nfunction mkDirAndCopy (srcMode, src, dest, opts) {\n fs.mkdirSync(dest)\n copyDir(src, dest, opts)\n return setDestMode(dest, srcMode)\n}\n\nfunction copyDir (src, dest, opts) {\n fs.readdirSync(src).forEach(item => copyDirItem(item, src, dest, opts))\n}\n\nfunction copyDirItem (item, src, dest, opts) {\n const srcItem = path.join(src, item)\n const destItem = path.join(dest, item)\n const { destStat } = stat.checkPathsSync(srcItem, destItem, 'copy', opts)\n return startCopy(destStat, srcItem, destItem, opts)\n}\n\nfunction onLink (destStat, src, dest, opts) {\n let resolvedSrc = fs.readlinkSync(src)\n if (opts.dereference) {\n resolvedSrc = path.resolve(process.cwd(), resolvedSrc)\n }\n\n if (!destStat) {\n return fs.symlinkSync(resolvedSrc, dest)\n } else {\n let resolvedDest\n try {\n resolvedDest = fs.readlinkSync(dest)\n } catch (err) {\n // dest exists and is a regular file or directory,\n // Windows may throw UNKNOWN error. If dest already exists,\n // fs throws error anyway, so no need to guard against it here.\n if (err.code === 'EINVAL' || err.code === 'UNKNOWN') return fs.symlinkSync(resolvedSrc, dest)\n throw err\n }\n if (opts.dereference) {\n resolvedDest = path.resolve(process.cwd(), resolvedDest)\n }\n if (stat.isSrcSubdir(resolvedSrc, resolvedDest)) {\n throw new Error(`Cannot copy '${resolvedSrc}' to a subdirectory of itself, '${resolvedDest}'.`)\n }\n\n // prevent copy if src is a subdir of dest since unlinking\n // dest in this case would result in removing src contents\n // and therefore a broken symlink would be created.\n if (fs.statSync(dest).isDirectory() && stat.isSrcSubdir(resolvedDest, resolvedSrc)) {\n throw new Error(`Cannot overwrite '${resolvedDest}' with '${resolvedSrc}'.`)\n }\n return copyLink(resolvedSrc, dest)\n }\n}\n\nfunction copyLink (resolvedSrc, dest) {\n fs.unlinkSync(dest)\n return fs.symlinkSync(resolvedSrc, dest)\n}\n\nmodule.exports = copySync\n", "'use strict'\n\nconst u = require('universalify').fromCallback\nmodule.exports = {\n copy: u(require('./copy')),\n copySync: require('./copy-sync')\n}\n", "'use strict'\n\nconst fs = require('graceful-fs')\nconst path = require('path')\nconst assert = require('assert')\n\nconst isWindows = (process.platform === 'win32')\n\nfunction defaults (options) {\n const methods = [\n 'unlink',\n 'chmod',\n 'stat',\n 'lstat',\n 'rmdir',\n 'readdir'\n ]\n methods.forEach(m => {\n options[m] = options[m] || fs[m]\n m = m + 'Sync'\n options[m] = options[m] || fs[m]\n })\n\n options.maxBusyTries = options.maxBusyTries || 3\n}\n\nfunction rimraf (p, options, cb) {\n let busyTries = 0\n\n if (typeof options === 'function') {\n cb = options\n options = {}\n }\n\n assert(p, 'rimraf: missing path')\n assert.strictEqual(typeof p, 'string', 'rimraf: path should be a string')\n assert.strictEqual(typeof cb, 'function', 'rimraf: callback function required')\n assert(options, 'rimraf: invalid options argument provided')\n assert.strictEqual(typeof options, 'object', 'rimraf: options should be object')\n\n defaults(options)\n\n rimraf_(p, options, function CB (er) {\n if (er) {\n if ((er.code === 'EBUSY' || er.code === 'ENOTEMPTY' || er.code === 'EPERM') &&\n busyTries < options.maxBusyTries) {\n busyTries++\n const time = busyTries * 100\n // try again, with the same exact callback as this one.\n return setTimeout(() => rimraf_(p, options, CB), time)\n }\n\n // already gone\n if (er.code === 'ENOENT') er = null\n }\n\n cb(er)\n })\n}\n\n// Two possible strategies.\n// 1. Assume it's a file. unlink it, then do the dir stuff on EPERM or EISDIR\n// 2. Assume it's a directory. readdir, then do the file stuff on ENOTDIR\n//\n// Both result in an extra syscall when you guess wrong. However, there\n// are likely far more normal files in the world than directories. This\n// is based on the assumption that a the average number of files per\n// directory is >= 1.\n//\n// If anyone ever complains about this, then I guess the strategy could\n// be made configurable somehow. But until then, YAGNI.\nfunction rimraf_ (p, options, cb) {\n assert(p)\n assert(options)\n assert(typeof cb === 'function')\n\n // sunos lets the root user unlink directories, which is... weird.\n // so we have to lstat here and make sure it's not a dir.\n options.lstat(p, (er, st) => {\n if (er && er.code === 'ENOENT') {\n return cb(null)\n }\n\n // Windows can EPERM on stat. Life is suffering.\n if (er && er.code === 'EPERM' && isWindows) {\n return fixWinEPERM(p, options, er, cb)\n }\n\n if (st && st.isDirectory()) {\n return rmdir(p, options, er, cb)\n }\n\n options.unlink(p, er => {\n if (er) {\n if (er.code === 'ENOENT') {\n return cb(null)\n }\n if (er.code === 'EPERM') {\n return (isWindows)\n ? fixWinEPERM(p, options, er, cb)\n : rmdir(p, options, er, cb)\n }\n if (er.code === 'EISDIR') {\n return rmdir(p, options, er, cb)\n }\n }\n return cb(er)\n })\n })\n}\n\nfunction fixWinEPERM (p, options, er, cb) {\n assert(p)\n assert(options)\n assert(typeof cb === 'function')\n\n options.chmod(p, 0o666, er2 => {\n if (er2) {\n cb(er2.code === 'ENOENT' ? null : er)\n } else {\n options.stat(p, (er3, stats) => {\n if (er3) {\n cb(er3.code === 'ENOENT' ? null : er)\n } else if (stats.isDirectory()) {\n rmdir(p, options, er, cb)\n } else {\n options.unlink(p, cb)\n }\n })\n }\n })\n}\n\nfunction fixWinEPERMSync (p, options, er) {\n let stats\n\n assert(p)\n assert(options)\n\n try {\n options.chmodSync(p, 0o666)\n } catch (er2) {\n if (er2.code === 'ENOENT') {\n return\n } else {\n throw er\n }\n }\n\n try {\n stats = options.statSync(p)\n } catch (er3) {\n if (er3.code === 'ENOENT') {\n return\n } else {\n throw er\n }\n }\n\n if (stats.isDirectory()) {\n rmdirSync(p, options, er)\n } else {\n options.unlinkSync(p)\n }\n}\n\nfunction rmdir (p, options, originalEr, cb) {\n assert(p)\n assert(options)\n assert(typeof cb === 'function')\n\n // try to rmdir first, and only readdir on ENOTEMPTY or EEXIST (SunOS)\n // if we guessed wrong, and it's not a directory, then\n // raise the original error.\n options.rmdir(p, er => {\n if (er && (er.code === 'ENOTEMPTY' || er.code === 'EEXIST' || er.code === 'EPERM')) {\n rmkids(p, options, cb)\n } else if (er && er.code === 'ENOTDIR') {\n cb(originalEr)\n } else {\n cb(er)\n }\n })\n}\n\nfunction rmkids (p, options, cb) {\n assert(p)\n assert(options)\n assert(typeof cb === 'function')\n\n options.readdir(p, (er, files) => {\n if (er) return cb(er)\n\n let n = files.length\n let errState\n\n if (n === 0) return options.rmdir(p, cb)\n\n files.forEach(f => {\n rimraf(path.join(p, f), options, er => {\n if (errState) {\n return\n }\n if (er) return cb(errState = er)\n if (--n === 0) {\n options.rmdir(p, cb)\n }\n })\n })\n })\n}\n\n// this looks simpler, and is strictly *faster*, but will\n// tie up the JavaScript thread and fail on excessively\n// deep directory trees.\nfunction rimrafSync (p, options) {\n let st\n\n options = options || {}\n defaults(options)\n\n assert(p, 'rimraf: missing path')\n assert.strictEqual(typeof p, 'string', 'rimraf: path should be a string')\n assert(options, 'rimraf: missing options')\n assert.strictEqual(typeof options, 'object', 'rimraf: options should be object')\n\n try {\n st = options.lstatSync(p)\n } catch (er) {\n if (er.code === 'ENOENT') {\n return\n }\n\n // Windows can EPERM on stat. Life is suffering.\n if (er.code === 'EPERM' && isWindows) {\n fixWinEPERMSync(p, options, er)\n }\n }\n\n try {\n // sunos lets the root user unlink directories, which is... weird.\n if (st && st.isDirectory()) {\n rmdirSync(p, options, null)\n } else {\n options.unlinkSync(p)\n }\n } catch (er) {\n if (er.code === 'ENOENT') {\n return\n } else if (er.code === 'EPERM') {\n return isWindows ? fixWinEPERMSync(p, options, er) : rmdirSync(p, options, er)\n } else if (er.code !== 'EISDIR') {\n throw er\n }\n rmdirSync(p, options, er)\n }\n}\n\nfunction rmdirSync (p, options, originalEr) {\n assert(p)\n assert(options)\n\n try {\n options.rmdirSync(p)\n } catch (er) {\n if (er.code === 'ENOTDIR') {\n throw originalEr\n } else if (er.code === 'ENOTEMPTY' || er.code === 'EEXIST' || er.code === 'EPERM') {\n rmkidsSync(p, options)\n } else if (er.code !== 'ENOENT') {\n throw er\n }\n }\n}\n\nfunction rmkidsSync (p, options) {\n assert(p)\n assert(options)\n options.readdirSync(p).forEach(f => rimrafSync(path.join(p, f), options))\n\n if (isWindows) {\n // We only end up here once we got ENOTEMPTY at least once, and\n // at this point, we are guaranteed to have removed all the kids.\n // So, we know that it won't be ENOENT or ENOTDIR or anything else.\n // try really hard to delete stuff on windows, because it has a\n // PROFOUNDLY annoying habit of not closing handles promptly when\n // files are deleted, resulting in spurious ENOTEMPTY errors.\n const startTime = Date.now()\n do {\n try {\n const ret = options.rmdirSync(p, options)\n return ret\n } catch {}\n } while (Date.now() - startTime < 500) // give up after 500ms\n } else {\n const ret = options.rmdirSync(p, options)\n return ret\n }\n}\n\nmodule.exports = rimraf\nrimraf.sync = rimrafSync\n", "'use strict'\n\nconst fs = require('graceful-fs')\nconst u = require('universalify').fromCallback\nconst rimraf = require('./rimraf')\n\nfunction remove (path, callback) {\n // Node 14.14.0+\n if (fs.rm) return fs.rm(path, { recursive: true, force: true }, callback)\n rimraf(path, callback)\n}\n\nfunction removeSync (path) {\n // Node 14.14.0+\n if (fs.rmSync) return fs.rmSync(path, { recursive: true, force: true })\n rimraf.sync(path)\n}\n\nmodule.exports = {\n remove: u(remove),\n removeSync\n}\n", "'use strict'\n\nconst u = require('universalify').fromPromise\nconst fs = require('../fs')\nconst path = require('path')\nconst mkdir = require('../mkdirs')\nconst remove = require('../remove')\n\nconst emptyDir = u(async function emptyDir (dir) {\n let items\n try {\n items = await fs.readdir(dir)\n } catch {\n return mkdir.mkdirs(dir)\n }\n\n return Promise.all(items.map(item => remove.remove(path.join(dir, item))))\n})\n\nfunction emptyDirSync (dir) {\n let items\n try {\n items = fs.readdirSync(dir)\n } catch {\n return mkdir.mkdirsSync(dir)\n }\n\n items.forEach(item => {\n item = path.join(dir, item)\n remove.removeSync(item)\n })\n}\n\nmodule.exports = {\n emptyDirSync,\n emptydirSync: emptyDirSync,\n emptyDir,\n emptydir: emptyDir\n}\n", "'use strict'\n\nconst u = require('universalify').fromCallback\nconst path = require('path')\nconst fs = require('graceful-fs')\nconst mkdir = require('../mkdirs')\n\nfunction createFile (file, callback) {\n function makeFile () {\n fs.writeFile(file, '', err => {\n if (err) return callback(err)\n callback()\n })\n }\n\n fs.stat(file, (err, stats) => { // eslint-disable-line handle-callback-err\n if (!err && stats.isFile()) return callback()\n const dir = path.dirname(file)\n fs.stat(dir, (err, stats) => {\n if (err) {\n // if the directory doesn't exist, make it\n if (err.code === 'ENOENT') {\n return mkdir.mkdirs(dir, err => {\n if (err) return callback(err)\n makeFile()\n })\n }\n return callback(err)\n }\n\n if (stats.isDirectory()) makeFile()\n else {\n // parent is not a directory\n // This is just to cause an internal ENOTDIR error to be thrown\n fs.readdir(dir, err => {\n if (err) return callback(err)\n })\n }\n })\n })\n}\n\nfunction createFileSync (file) {\n let stats\n try {\n stats = fs.statSync(file)\n } catch {}\n if (stats && stats.isFile()) return\n\n const dir = path.dirname(file)\n try {\n if (!fs.statSync(dir).isDirectory()) {\n // parent is not a directory\n // This is just to cause an internal ENOTDIR error to be thrown\n fs.readdirSync(dir)\n }\n } catch (err) {\n // If the stat call above failed because the directory doesn't exist, create it\n if (err && err.code === 'ENOENT') mkdir.mkdirsSync(dir)\n else throw err\n }\n\n fs.writeFileSync(file, '')\n}\n\nmodule.exports = {\n createFile: u(createFile),\n createFileSync\n}\n", "'use strict'\n\nconst u = require('universalify').fromCallback\nconst path = require('path')\nconst fs = require('graceful-fs')\nconst mkdir = require('../mkdirs')\nconst pathExists = require('../path-exists').pathExists\nconst { areIdentical } = require('../util/stat')\n\nfunction createLink (srcpath, dstpath, callback) {\n function makeLink (srcpath, dstpath) {\n fs.link(srcpath, dstpath, err => {\n if (err) return callback(err)\n callback(null)\n })\n }\n\n fs.lstat(dstpath, (_, dstStat) => {\n fs.lstat(srcpath, (err, srcStat) => {\n if (err) {\n err.message = err.message.replace('lstat', 'ensureLink')\n return callback(err)\n }\n if (dstStat && areIdentical(srcStat, dstStat)) return callback(null)\n\n const dir = path.dirname(dstpath)\n pathExists(dir, (err, dirExists) => {\n if (err) return callback(err)\n if (dirExists) return makeLink(srcpath, dstpath)\n mkdir.mkdirs(dir, err => {\n if (err) return callback(err)\n makeLink(srcpath, dstpath)\n })\n })\n })\n })\n}\n\nfunction createLinkSync (srcpath, dstpath) {\n let dstStat\n try {\n dstStat = fs.lstatSync(dstpath)\n } catch {}\n\n try {\n const srcStat = fs.lstatSync(srcpath)\n if (dstStat && areIdentical(srcStat, dstStat)) return\n } catch (err) {\n err.message = err.message.replace('lstat', 'ensureLink')\n throw err\n }\n\n const dir = path.dirname(dstpath)\n const dirExists = fs.existsSync(dir)\n if (dirExists) return fs.linkSync(srcpath, dstpath)\n mkdir.mkdirsSync(dir)\n\n return fs.linkSync(srcpath, dstpath)\n}\n\nmodule.exports = {\n createLink: u(createLink),\n createLinkSync\n}\n", "'use strict'\n\nconst path = require('path')\nconst fs = require('graceful-fs')\nconst pathExists = require('../path-exists').pathExists\n\n/**\n * Function that returns two types of paths, one relative to symlink, and one\n * relative to the current working directory. Checks if path is absolute or\n * relative. If the path is relative, this function checks if the path is\n * relative to symlink or relative to current working directory. This is an\n * initiative to find a smarter `srcpath` to supply when building symlinks.\n * This allows you to determine which path to use out of one of three possible\n * types of source paths. The first is an absolute path. This is detected by\n * `path.isAbsolute()`. When an absolute path is provided, it is checked to\n * see if it exists. If it does it's used, if not an error is returned\n * (callback)/ thrown (sync). The other two options for `srcpath` are a\n * relative url. By default Node's `fs.symlink` works by creating a symlink\n * using `dstpath` and expects the `srcpath` to be relative to the newly\n * created symlink. If you provide a `srcpath` that does not exist on the file\n * system it results in a broken symlink. To minimize this, the function\n * checks to see if the 'relative to symlink' source file exists, and if it\n * does it will use it. If it does not, it checks if there's a file that\n * exists that is relative to the current working directory, if does its used.\n * This preserves the expectations of the original fs.symlink spec and adds\n * the ability to pass in `relative to current working direcotry` paths.\n */\n\nfunction symlinkPaths (srcpath, dstpath, callback) {\n if (path.isAbsolute(srcpath)) {\n return fs.lstat(srcpath, (err) => {\n if (err) {\n err.message = err.message.replace('lstat', 'ensureSymlink')\n return callback(err)\n }\n return callback(null, {\n toCwd: srcpath,\n toDst: srcpath\n })\n })\n } else {\n const dstdir = path.dirname(dstpath)\n const relativeToDst = path.join(dstdir, srcpath)\n return pathExists(relativeToDst, (err, exists) => {\n if (err) return callback(err)\n if (exists) {\n return callback(null, {\n toCwd: relativeToDst,\n toDst: srcpath\n })\n } else {\n return fs.lstat(srcpath, (err) => {\n if (err) {\n err.message = err.message.replace('lstat', 'ensureSymlink')\n return callback(err)\n }\n return callback(null, {\n toCwd: srcpath,\n toDst: path.relative(dstdir, srcpath)\n })\n })\n }\n })\n }\n}\n\nfunction symlinkPathsSync (srcpath, dstpath) {\n let exists\n if (path.isAbsolute(srcpath)) {\n exists = fs.existsSync(srcpath)\n if (!exists) throw new Error('absolute srcpath does not exist')\n return {\n toCwd: srcpath,\n toDst: srcpath\n }\n } else {\n const dstdir = path.dirname(dstpath)\n const relativeToDst = path.join(dstdir, srcpath)\n exists = fs.existsSync(relativeToDst)\n if (exists) {\n return {\n toCwd: relativeToDst,\n toDst: srcpath\n }\n } else {\n exists = fs.existsSync(srcpath)\n if (!exists) throw new Error('relative srcpath does not exist')\n return {\n toCwd: srcpath,\n toDst: path.relative(dstdir, srcpath)\n }\n }\n }\n}\n\nmodule.exports = {\n symlinkPaths,\n symlinkPathsSync\n}\n", "'use strict'\n\nconst fs = require('graceful-fs')\n\nfunction symlinkType (srcpath, type, callback) {\n callback = (typeof type === 'function') ? type : callback\n type = (typeof type === 'function') ? false : type\n if (type) return callback(null, type)\n fs.lstat(srcpath, (err, stats) => {\n if (err) return callback(null, 'file')\n type = (stats && stats.isDirectory()) ? 'dir' : 'file'\n callback(null, type)\n })\n}\n\nfunction symlinkTypeSync (srcpath, type) {\n let stats\n\n if (type) return type\n try {\n stats = fs.lstatSync(srcpath)\n } catch {\n return 'file'\n }\n return (stats && stats.isDirectory()) ? 'dir' : 'file'\n}\n\nmodule.exports = {\n symlinkType,\n symlinkTypeSync\n}\n", "'use strict'\n\nconst u = require('universalify').fromCallback\nconst path = require('path')\nconst fs = require('../fs')\nconst _mkdirs = require('../mkdirs')\nconst mkdirs = _mkdirs.mkdirs\nconst mkdirsSync = _mkdirs.mkdirsSync\n\nconst _symlinkPaths = require('./symlink-paths')\nconst symlinkPaths = _symlinkPaths.symlinkPaths\nconst symlinkPathsSync = _symlinkPaths.symlinkPathsSync\n\nconst _symlinkType = require('./symlink-type')\nconst symlinkType = _symlinkType.symlinkType\nconst symlinkTypeSync = _symlinkType.symlinkTypeSync\n\nconst pathExists = require('../path-exists').pathExists\n\nconst { areIdentical } = require('../util/stat')\n\nfunction createSymlink (srcpath, dstpath, type, callback) {\n callback = (typeof type === 'function') ? type : callback\n type = (typeof type === 'function') ? false : type\n\n fs.lstat(dstpath, (err, stats) => {\n if (!err && stats.isSymbolicLink()) {\n Promise.all([\n fs.stat(srcpath),\n fs.stat(dstpath)\n ]).then(([srcStat, dstStat]) => {\n if (areIdentical(srcStat, dstStat)) return callback(null)\n _createSymlink(srcpath, dstpath, type, callback)\n })\n } else _createSymlink(srcpath, dstpath, type, callback)\n })\n}\n\nfunction _createSymlink (srcpath, dstpath, type, callback) {\n symlinkPaths(srcpath, dstpath, (err, relative) => {\n if (err) return callback(err)\n srcpath = relative.toDst\n symlinkType(relative.toCwd, type, (err, type) => {\n if (err) return callback(err)\n const dir = path.dirname(dstpath)\n pathExists(dir, (err, dirExists) => {\n if (err) return callback(err)\n if (dirExists) return fs.symlink(srcpath, dstpath, type, callback)\n mkdirs(dir, err => {\n if (err) return callback(err)\n fs.symlink(srcpath, dstpath, type, callback)\n })\n })\n })\n })\n}\n\nfunction createSymlinkSync (srcpath, dstpath, type) {\n let stats\n try {\n stats = fs.lstatSync(dstpath)\n } catch {}\n if (stats && stats.isSymbolicLink()) {\n const srcStat = fs.statSync(srcpath)\n const dstStat = fs.statSync(dstpath)\n if (areIdentical(srcStat, dstStat)) return\n }\n\n const relative = symlinkPathsSync(srcpath, dstpath)\n srcpath = relative.toDst\n type = symlinkTypeSync(relative.toCwd, type)\n const dir = path.dirname(dstpath)\n const exists = fs.existsSync(dir)\n if (exists) return fs.symlinkSync(srcpath, dstpath, type)\n mkdirsSync(dir)\n return fs.symlinkSync(srcpath, dstpath, type)\n}\n\nmodule.exports = {\n createSymlink: u(createSymlink),\n createSymlinkSync\n}\n", "'use strict'\n\nconst { createFile, createFileSync } = require('./file')\nconst { createLink, createLinkSync } = require('./link')\nconst { createSymlink, createSymlinkSync } = require('./symlink')\n\nmodule.exports = {\n // file\n createFile,\n createFileSync,\n ensureFile: createFile,\n ensureFileSync: createFileSync,\n // link\n createLink,\n createLinkSync,\n ensureLink: createLink,\n ensureLinkSync: createLinkSync,\n // symlink\n createSymlink,\n createSymlinkSync,\n ensureSymlink: createSymlink,\n ensureSymlinkSync: createSymlinkSync\n}\n", "function stringify (obj, { EOL = '\\n', finalEOL = true, replacer = null, spaces } = {}) {\n const EOF = finalEOL ? EOL : ''\n const str = JSON.stringify(obj, replacer, spaces)\n\n return str.replace(/\\n/g, EOL) + EOF\n}\n\nfunction stripBom (content) {\n // we do this because JSON.parse would convert it to a utf8 string if encoding wasn't specified\n if (Buffer.isBuffer(content)) content = content.toString('utf8')\n return content.replace(/^\\uFEFF/, '')\n}\n\nmodule.exports = { stringify, stripBom }\n", "let _fs\ntry {\n _fs = require('graceful-fs')\n} catch (_) {\n _fs = require('fs')\n}\nconst universalify = require('universalify')\nconst { stringify, stripBom } = require('./utils')\n\nasync function _readFile (file, options = {}) {\n if (typeof options === 'string') {\n options = { encoding: options }\n }\n\n const fs = options.fs || _fs\n\n const shouldThrow = 'throws' in options ? options.throws : true\n\n let data = await universalify.fromCallback(fs.readFile)(file, options)\n\n data = stripBom(data)\n\n let obj\n try {\n obj = JSON.parse(data, options ? options.reviver : null)\n } catch (err) {\n if (shouldThrow) {\n err.message = `${file}: ${err.message}`\n throw err\n } else {\n return null\n }\n }\n\n return obj\n}\n\nconst readFile = universalify.fromPromise(_readFile)\n\nfunction readFileSync (file, options = {}) {\n if (typeof options === 'string') {\n options = { encoding: options }\n }\n\n const fs = options.fs || _fs\n\n const shouldThrow = 'throws' in options ? options.throws : true\n\n try {\n let content = fs.readFileSync(file, options)\n content = stripBom(content)\n return JSON.parse(content, options.reviver)\n } catch (err) {\n if (shouldThrow) {\n err.message = `${file}: ${err.message}`\n throw err\n } else {\n return null\n }\n }\n}\n\nasync function _writeFile (file, obj, options = {}) {\n const fs = options.fs || _fs\n\n const str = stringify(obj, options)\n\n await universalify.fromCallback(fs.writeFile)(file, str, options)\n}\n\nconst writeFile = universalify.fromPromise(_writeFile)\n\nfunction writeFileSync (file, obj, options = {}) {\n const fs = options.fs || _fs\n\n const str = stringify(obj, options)\n // not sure if fs.writeFileSync returns anything, but just in case\n return fs.writeFileSync(file, str, options)\n}\n\n// NOTE: do not change this export format; required for ESM compat\n// see https://github.com/jprichardson/node-jsonfile/pull/162 for details\nmodule.exports = {\n readFile,\n readFileSync,\n writeFile,\n writeFileSync\n}\n", "'use strict'\n\nconst jsonFile = require('jsonfile')\n\nmodule.exports = {\n // jsonfile exports\n readJson: jsonFile.readFile,\n readJsonSync: jsonFile.readFileSync,\n writeJson: jsonFile.writeFile,\n writeJsonSync: jsonFile.writeFileSync\n}\n", "'use strict'\n\nconst u = require('universalify').fromCallback\nconst fs = require('graceful-fs')\nconst path = require('path')\nconst mkdir = require('../mkdirs')\nconst pathExists = require('../path-exists').pathExists\n\nfunction outputFile (file, data, encoding, callback) {\n if (typeof encoding === 'function') {\n callback = encoding\n encoding = 'utf8'\n }\n\n const dir = path.dirname(file)\n pathExists(dir, (err, itDoes) => {\n if (err) return callback(err)\n if (itDoes) return fs.writeFile(file, data, encoding, callback)\n\n mkdir.mkdirs(dir, err => {\n if (err) return callback(err)\n\n fs.writeFile(file, data, encoding, callback)\n })\n })\n}\n\nfunction outputFileSync (file, ...args) {\n const dir = path.dirname(file)\n if (fs.existsSync(dir)) {\n return fs.writeFileSync(file, ...args)\n }\n mkdir.mkdirsSync(dir)\n fs.writeFileSync(file, ...args)\n}\n\nmodule.exports = {\n outputFile: u(outputFile),\n outputFileSync\n}\n", "'use strict'\n\nconst { stringify } = require('jsonfile/utils')\nconst { outputFile } = require('../output-file')\n\nasync function outputJson (file, data, options = {}) {\n const str = stringify(data, options)\n\n await outputFile(file, str, options)\n}\n\nmodule.exports = outputJson\n", "'use strict'\n\nconst { stringify } = require('jsonfile/utils')\nconst { outputFileSync } = require('../output-file')\n\nfunction outputJsonSync (file, data, options) {\n const str = stringify(data, options)\n\n outputFileSync(file, str, options)\n}\n\nmodule.exports = outputJsonSync\n", "'use strict'\n\nconst u = require('universalify').fromPromise\nconst jsonFile = require('./jsonfile')\n\njsonFile.outputJson = u(require('./output-json'))\njsonFile.outputJsonSync = require('./output-json-sync')\n// aliases\njsonFile.outputJSON = jsonFile.outputJson\njsonFile.outputJSONSync = jsonFile.outputJsonSync\njsonFile.writeJSON = jsonFile.writeJson\njsonFile.writeJSONSync = jsonFile.writeJsonSync\njsonFile.readJSON = jsonFile.readJson\njsonFile.readJSONSync = jsonFile.readJsonSync\n\nmodule.exports = jsonFile\n", "'use strict'\n\nconst fs = require('graceful-fs')\nconst path = require('path')\nconst copy = require('../copy').copy\nconst remove = require('../remove').remove\nconst mkdirp = require('../mkdirs').mkdirp\nconst pathExists = require('../path-exists').pathExists\nconst stat = require('../util/stat')\n\nfunction move (src, dest, opts, cb) {\n if (typeof opts === 'function') {\n cb = opts\n opts = {}\n }\n\n opts = opts || {}\n\n const overwrite = opts.overwrite || opts.clobber || false\n\n stat.checkPaths(src, dest, 'move', opts, (err, stats) => {\n if (err) return cb(err)\n const { srcStat, isChangingCase = false } = stats\n stat.checkParentPaths(src, srcStat, dest, 'move', err => {\n if (err) return cb(err)\n if (isParentRoot(dest)) return doRename(src, dest, overwrite, isChangingCase, cb)\n mkdirp(path.dirname(dest), err => {\n if (err) return cb(err)\n return doRename(src, dest, overwrite, isChangingCase, cb)\n })\n })\n })\n}\n\nfunction isParentRoot (dest) {\n const parent = path.dirname(dest)\n const parsedPath = path.parse(parent)\n return parsedPath.root === parent\n}\n\nfunction doRename (src, dest, overwrite, isChangingCase, cb) {\n if (isChangingCase) return rename(src, dest, overwrite, cb)\n if (overwrite) {\n return remove(dest, err => {\n if (err) return cb(err)\n return rename(src, dest, overwrite, cb)\n })\n }\n pathExists(dest, (err, destExists) => {\n if (err) return cb(err)\n if (destExists) return cb(new Error('dest already exists.'))\n return rename(src, dest, overwrite, cb)\n })\n}\n\nfunction rename (src, dest, overwrite, cb) {\n fs.rename(src, dest, err => {\n if (!err) return cb()\n if (err.code !== 'EXDEV') return cb(err)\n return moveAcrossDevice(src, dest, overwrite, cb)\n })\n}\n\nfunction moveAcrossDevice (src, dest, overwrite, cb) {\n const opts = {\n overwrite,\n errorOnExist: true\n }\n copy(src, dest, opts, err => {\n if (err) return cb(err)\n return remove(src, cb)\n })\n}\n\nmodule.exports = move\n", "'use strict'\n\nconst fs = require('graceful-fs')\nconst path = require('path')\nconst copySync = require('../copy').copySync\nconst removeSync = require('../remove').removeSync\nconst mkdirpSync = require('../mkdirs').mkdirpSync\nconst stat = require('../util/stat')\n\nfunction moveSync (src, dest, opts) {\n opts = opts || {}\n const overwrite = opts.overwrite || opts.clobber || false\n\n const { srcStat, isChangingCase = false } = stat.checkPathsSync(src, dest, 'move', opts)\n stat.checkParentPathsSync(src, srcStat, dest, 'move')\n if (!isParentRoot(dest)) mkdirpSync(path.dirname(dest))\n return doRename(src, dest, overwrite, isChangingCase)\n}\n\nfunction isParentRoot (dest) {\n const parent = path.dirname(dest)\n const parsedPath = path.parse(parent)\n return parsedPath.root === parent\n}\n\nfunction doRename (src, dest, overwrite, isChangingCase) {\n if (isChangingCase) return rename(src, dest, overwrite)\n if (overwrite) {\n removeSync(dest)\n return rename(src, dest, overwrite)\n }\n if (fs.existsSync(dest)) throw new Error('dest already exists.')\n return rename(src, dest, overwrite)\n}\n\nfunction rename (src, dest, overwrite) {\n try {\n fs.renameSync(src, dest)\n } catch (err) {\n if (err.code !== 'EXDEV') throw err\n return moveAcrossDevice(src, dest, overwrite)\n }\n}\n\nfunction moveAcrossDevice (src, dest, overwrite) {\n const opts = {\n overwrite,\n errorOnExist: true\n }\n copySync(src, dest, opts)\n return removeSync(src)\n}\n\nmodule.exports = moveSync\n", "'use strict'\n\nconst u = require('universalify').fromCallback\nmodule.exports = {\n move: u(require('./move')),\n moveSync: require('./move-sync')\n}\n", "'use strict'\n\nmodule.exports = {\n // Export promiseified graceful-fs:\n ...require('./fs'),\n // Export extra methods:\n ...require('./copy'),\n ...require('./empty'),\n ...require('./ensure'),\n ...require('./json'),\n ...require('./mkdirs'),\n ...require('./move'),\n ...require('./output-file'),\n ...require('./path-exists'),\n ...require('./remove')\n}\n", "import { EventEmitter } from \"events\"\n\nexport class CancellationToken extends EventEmitter {\n private parentCancelHandler: (() => any) | null = null\n\n private _cancelled: boolean\n get cancelled(): boolean {\n return this._cancelled || (this._parent != null && this._parent.cancelled)\n }\n\n private _parent: CancellationToken | null = null\n set parent(value: CancellationToken) {\n this.removeParentCancelHandler()\n\n this._parent = value\n this.parentCancelHandler = () => this.cancel()\n this._parent.onCancel(this.parentCancelHandler)\n }\n\n // babel cannot compile ... correctly for super calls\n constructor(parent?: CancellationToken) {\n super()\n\n this._cancelled = false\n if (parent != null) {\n this.parent = parent\n }\n }\n\n cancel() {\n this._cancelled = true\n this.emit(\"cancel\")\n }\n\n private onCancel(handler: () => any) {\n if (this.cancelled) {\n handler()\n } else {\n this.once(\"cancel\", handler)\n }\n }\n\n createPromise<R>(\n callback: (resolve: (thenableOrResult: R | PromiseLike<R>) => void, reject: (error: Error) => void, onCancel: (callback: () => void) => void) => void\n ): Promise<R> {\n if (this.cancelled) {\n return Promise.reject<R>(new CancellationError())\n }\n\n const finallyHandler = () => {\n if (cancelHandler != null) {\n try {\n this.removeListener(\"cancel\", cancelHandler)\n cancelHandler = null\n } catch (_ignore) {\n // ignore\n }\n }\n }\n\n let cancelHandler: (() => void) | null = null\n return new Promise<R>((resolve, reject) => {\n let addedCancelHandler: (() => void) | null = null\n\n cancelHandler = () => {\n try {\n if (addedCancelHandler != null) {\n addedCancelHandler()\n addedCancelHandler = null\n }\n } finally {\n reject(new CancellationError())\n }\n }\n\n if (this.cancelled) {\n cancelHandler()\n return\n }\n\n this.onCancel(cancelHandler)\n\n callback(resolve, reject, (callback: () => void) => {\n addedCancelHandler = callback\n })\n })\n .then(it => {\n finallyHandler()\n return it\n })\n .catch((e: any) => {\n finallyHandler()\n throw e\n })\n }\n\n private removeParentCancelHandler() {\n const parent = this._parent\n if (parent != null && this.parentCancelHandler != null) {\n parent.removeListener(\"cancel\", this.parentCancelHandler)\n this.parentCancelHandler = null\n }\n }\n\n dispose() {\n try {\n this.removeParentCancelHandler()\n } finally {\n this.removeAllListeners()\n this._parent = null\n }\n }\n}\n\nexport class CancellationError extends Error {\n constructor() {\n super(\"cancelled\")\n }\n}\n", "export function newError(message: string, code: string) {\n const error = new Error(message)\n ;(error as NodeJS.ErrnoException).code = code\n return error\n}\n", "/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function (val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isFinite(val)) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'weeks':\n case 'week':\n case 'w':\n return n * w;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (msAbs >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (msAbs >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (msAbs >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return plural(ms, msAbs, d, 'day');\n }\n if (msAbs >= h) {\n return plural(ms, msAbs, h, 'hour');\n }\n if (msAbs >= m) {\n return plural(ms, msAbs, m, 'minute');\n }\n if (msAbs >= s) {\n return plural(ms, msAbs, s, 'second');\n }\n return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n var isPlural = msAbs >= n * 1.5;\n return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n", "\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n */\n\nfunction setup(env) {\n\tcreateDebug.debug = createDebug;\n\tcreateDebug.default = createDebug;\n\tcreateDebug.coerce = coerce;\n\tcreateDebug.disable = disable;\n\tcreateDebug.enable = enable;\n\tcreateDebug.enabled = enabled;\n\tcreateDebug.humanize = require('ms');\n\tcreateDebug.destroy = destroy;\n\n\tObject.keys(env).forEach(key => {\n\t\tcreateDebug[key] = env[key];\n\t});\n\n\t/**\n\t* The currently active debug mode names, and names to skip.\n\t*/\n\n\tcreateDebug.names = [];\n\tcreateDebug.skips = [];\n\n\t/**\n\t* Map of special \"%n\" handling functions, for the debug \"format\" argument.\n\t*\n\t* Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n\t*/\n\tcreateDebug.formatters = {};\n\n\t/**\n\t* Selects a color for a debug namespace\n\t* @param {String} namespace The namespace string for the debug instance to be colored\n\t* @return {Number|String} An ANSI color code for the given namespace\n\t* @api private\n\t*/\n\tfunction selectColor(namespace) {\n\t\tlet hash = 0;\n\n\t\tfor (let i = 0; i < namespace.length; i++) {\n\t\t\thash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n\t\t\thash |= 0; // Convert to 32bit integer\n\t\t}\n\n\t\treturn createDebug.colors[Math.abs(hash) % createDebug.colors.length];\n\t}\n\tcreateDebug.selectColor = selectColor;\n\n\t/**\n\t* Create a debugger with the given `namespace`.\n\t*\n\t* @param {String} namespace\n\t* @return {Function}\n\t* @api public\n\t*/\n\tfunction createDebug(namespace) {\n\t\tlet prevTime;\n\t\tlet enableOverride = null;\n\t\tlet namespacesCache;\n\t\tlet enabledCache;\n\n\t\tfunction debug(...args) {\n\t\t\t// Disabled?\n\t\t\tif (!debug.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst self = debug;\n\n\t\t\t// Set `diff` timestamp\n\t\t\tconst curr = Number(new Date());\n\t\t\tconst ms = curr - (prevTime || curr);\n\t\t\tself.diff = ms;\n\t\t\tself.prev = prevTime;\n\t\t\tself.curr = curr;\n\t\t\tprevTime = curr;\n\n\t\t\targs[0] = createDebug.coerce(args[0]);\n\n\t\t\tif (typeof args[0] !== 'string') {\n\t\t\t\t// Anything else let's inspect with %O\n\t\t\t\targs.unshift('%O');\n\t\t\t}\n\n\t\t\t// Apply any `formatters` transformations\n\t\t\tlet index = 0;\n\t\t\targs[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {\n\t\t\t\t// If we encounter an escaped % then don't increase the array index\n\t\t\t\tif (match === '%%') {\n\t\t\t\t\treturn '%';\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t\tconst formatter = createDebug.formatters[format];\n\t\t\t\tif (typeof formatter === 'function') {\n\t\t\t\t\tconst val = args[index];\n\t\t\t\t\tmatch = formatter.call(self, val);\n\n\t\t\t\t\t// Now we need to remove `args[index]` since it's inlined in the `format`\n\t\t\t\t\targs.splice(index, 1);\n\t\t\t\t\tindex--;\n\t\t\t\t}\n\t\t\t\treturn match;\n\t\t\t});\n\n\t\t\t// Apply env-specific formatting (colors, etc.)\n\t\t\tcreateDebug.formatArgs.call(self, args);\n\n\t\t\tconst logFn = self.log || createDebug.log;\n\t\t\tlogFn.apply(self, args);\n\t\t}\n\n\t\tdebug.namespace = namespace;\n\t\tdebug.useColors = createDebug.useColors();\n\t\tdebug.color = createDebug.selectColor(namespace);\n\t\tdebug.extend = extend;\n\t\tdebug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release.\n\n\t\tObject.defineProperty(debug, 'enabled', {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: false,\n\t\t\tget: () => {\n\t\t\t\tif (enableOverride !== null) {\n\t\t\t\t\treturn enableOverride;\n\t\t\t\t}\n\t\t\t\tif (namespacesCache !== createDebug.namespaces) {\n\t\t\t\t\tnamespacesCache = createDebug.namespaces;\n\t\t\t\t\tenabledCache = createDebug.enabled(namespace);\n\t\t\t\t}\n\n\t\t\t\treturn enabledCache;\n\t\t\t},\n\t\t\tset: v => {\n\t\t\t\tenableOverride = v;\n\t\t\t}\n\t\t});\n\n\t\t// Env-specific initialization logic for debug instances\n\t\tif (typeof createDebug.init === 'function') {\n\t\t\tcreateDebug.init(debug);\n\t\t}\n\n\t\treturn debug;\n\t}\n\n\tfunction extend(namespace, delimiter) {\n\t\tconst newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);\n\t\tnewDebug.log = this.log;\n\t\treturn newDebug;\n\t}\n\n\t/**\n\t* Enables a debug mode by namespaces. This can include modes\n\t* separated by a colon and wildcards.\n\t*\n\t* @param {String} namespaces\n\t* @api public\n\t*/\n\tfunction enable(namespaces) {\n\t\tcreateDebug.save(namespaces);\n\t\tcreateDebug.namespaces = namespaces;\n\n\t\tcreateDebug.names = [];\n\t\tcreateDebug.skips = [];\n\n\t\tconst split = (typeof namespaces === 'string' ? namespaces : '')\n\t\t\t.trim()\n\t\t\t.replace(/\\s+/g, ',')\n\t\t\t.split(',')\n\t\t\t.filter(Boolean);\n\n\t\tfor (const ns of split) {\n\t\t\tif (ns[0] === '-') {\n\t\t\t\tcreateDebug.skips.push(ns.slice(1));\n\t\t\t} else {\n\t\t\t\tcreateDebug.names.push(ns);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Checks if the given string matches a namespace template, honoring\n\t * asterisks as wildcards.\n\t *\n\t * @param {String} search\n\t * @param {String} template\n\t * @return {Boolean}\n\t */\n\tfunction matchesTemplate(search, template) {\n\t\tlet searchIndex = 0;\n\t\tlet templateIndex = 0;\n\t\tlet starIndex = -1;\n\t\tlet matchIndex = 0;\n\n\t\twhile (searchIndex < search.length) {\n\t\t\tif (templateIndex < template.length && (template[templateIndex] === search[searchIndex] || template[templateIndex] === '*')) {\n\t\t\t\t// Match character or proceed with wildcard\n\t\t\t\tif (template[templateIndex] === '*') {\n\t\t\t\t\tstarIndex = templateIndex;\n\t\t\t\t\tmatchIndex = searchIndex;\n\t\t\t\t\ttemplateIndex++; // Skip the '*'\n\t\t\t\t} else {\n\t\t\t\t\tsearchIndex++;\n\t\t\t\t\ttemplateIndex++;\n\t\t\t\t}\n\t\t\t} else if (starIndex !== -1) { // eslint-disable-line no-negated-condition\n\t\t\t\t// Backtrack to the last '*' and try to match more characters\n\t\t\t\ttemplateIndex = starIndex + 1;\n\t\t\t\tmatchIndex++;\n\t\t\t\tsearchIndex = matchIndex;\n\t\t\t} else {\n\t\t\t\treturn false; // No match\n\t\t\t}\n\t\t}\n\n\t\t// Handle trailing '*' in template\n\t\twhile (templateIndex < template.length && template[templateIndex] === '*') {\n\t\t\ttemplateIndex++;\n\t\t}\n\n\t\treturn templateIndex === template.length;\n\t}\n\n\t/**\n\t* Disable debug output.\n\t*\n\t* @return {String} namespaces\n\t* @api public\n\t*/\n\tfunction disable() {\n\t\tconst namespaces = [\n\t\t\t...createDebug.names,\n\t\t\t...createDebug.skips.map(namespace => '-' + namespace)\n\t\t].join(',');\n\t\tcreateDebug.enable('');\n\t\treturn namespaces;\n\t}\n\n\t/**\n\t* Returns true if the given mode name is enabled, false otherwise.\n\t*\n\t* @param {String} name\n\t* @return {Boolean}\n\t* @api public\n\t*/\n\tfunction enabled(name) {\n\t\tfor (const skip of createDebug.skips) {\n\t\t\tif (matchesTemplate(name, skip)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (const ns of createDebug.names) {\n\t\t\tif (matchesTemplate(name, ns)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t* Coerce `val`.\n\t*\n\t* @param {Mixed} val\n\t* @return {Mixed}\n\t* @api private\n\t*/\n\tfunction coerce(val) {\n\t\tif (val instanceof Error) {\n\t\t\treturn val.stack || val.message;\n\t\t}\n\t\treturn val;\n\t}\n\n\t/**\n\t* XXX DO NOT USE. This is a temporary stub function.\n\t* XXX It WILL be removed in the next major release.\n\t*/\n\tfunction destroy() {\n\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t}\n\n\tcreateDebug.enable(createDebug.load());\n\n\treturn createDebug;\n}\n\nmodule.exports = setup;\n", "/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\n\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\nexports.destroy = (() => {\n\tlet warned = false;\n\n\treturn () => {\n\t\tif (!warned) {\n\t\t\twarned = true;\n\t\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t\t}\n\t};\n})();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n\t'#0000CC',\n\t'#0000FF',\n\t'#0033CC',\n\t'#0033FF',\n\t'#0066CC',\n\t'#0066FF',\n\t'#0099CC',\n\t'#0099FF',\n\t'#00CC00',\n\t'#00CC33',\n\t'#00CC66',\n\t'#00CC99',\n\t'#00CCCC',\n\t'#00CCFF',\n\t'#3300CC',\n\t'#3300FF',\n\t'#3333CC',\n\t'#3333FF',\n\t'#3366CC',\n\t'#3366FF',\n\t'#3399CC',\n\t'#3399FF',\n\t'#33CC00',\n\t'#33CC33',\n\t'#33CC66',\n\t'#33CC99',\n\t'#33CCCC',\n\t'#33CCFF',\n\t'#6600CC',\n\t'#6600FF',\n\t'#6633CC',\n\t'#6633FF',\n\t'#66CC00',\n\t'#66CC33',\n\t'#9900CC',\n\t'#9900FF',\n\t'#9933CC',\n\t'#9933FF',\n\t'#99CC00',\n\t'#99CC33',\n\t'#CC0000',\n\t'#CC0033',\n\t'#CC0066',\n\t'#CC0099',\n\t'#CC00CC',\n\t'#CC00FF',\n\t'#CC3300',\n\t'#CC3333',\n\t'#CC3366',\n\t'#CC3399',\n\t'#CC33CC',\n\t'#CC33FF',\n\t'#CC6600',\n\t'#CC6633',\n\t'#CC9900',\n\t'#CC9933',\n\t'#CCCC00',\n\t'#CCCC33',\n\t'#FF0000',\n\t'#FF0033',\n\t'#FF0066',\n\t'#FF0099',\n\t'#FF00CC',\n\t'#FF00FF',\n\t'#FF3300',\n\t'#FF3333',\n\t'#FF3366',\n\t'#FF3399',\n\t'#FF33CC',\n\t'#FF33FF',\n\t'#FF6600',\n\t'#FF6633',\n\t'#FF9900',\n\t'#FF9933',\n\t'#FFCC00',\n\t'#FFCC33'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\n// eslint-disable-next-line complexity\nfunction useColors() {\n\t// NB: In an Electron preload script, document will be defined but not fully\n\t// initialized. Since we know we're in Chrome, we'll just detect this case\n\t// explicitly\n\tif (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n\t\treturn true;\n\t}\n\n\t// Internet Explorer and Edge do not support colors.\n\tif (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n\t\treturn false;\n\t}\n\n\tlet m;\n\n\t// Is webkit? http://stackoverflow.com/a/16459606/376773\n\t// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\t// eslint-disable-next-line no-return-assign\n\treturn (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n\t\t// Is firebug? http://stackoverflow.com/a/398120/376773\n\t\t(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n\t\t// Is firefox >= v31?\n\t\t// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && (m = navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/)) && parseInt(m[1], 10) >= 31) ||\n\t\t// Double check webkit in userAgent just in case we are in a worker\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\targs[0] = (this.useColors ? '%c' : '') +\n\t\tthis.namespace +\n\t\t(this.useColors ? ' %c' : ' ') +\n\t\targs[0] +\n\t\t(this.useColors ? '%c ' : ' ') +\n\t\t'+' + module.exports.humanize(this.diff);\n\n\tif (!this.useColors) {\n\t\treturn;\n\t}\n\n\tconst c = 'color: ' + this.color;\n\targs.splice(1, 0, c, 'color: inherit');\n\n\t// The final \"%c\" is somewhat tricky, because there could be other\n\t// arguments passed either before or after the %c, so we need to\n\t// figure out the correct index to insert the CSS into\n\tlet index = 0;\n\tlet lastC = 0;\n\targs[0].replace(/%[a-zA-Z%]/g, match => {\n\t\tif (match === '%%') {\n\t\t\treturn;\n\t\t}\n\t\tindex++;\n\t\tif (match === '%c') {\n\t\t\t// We only are interested in the *last* %c\n\t\t\t// (the user may have provided their own)\n\t\t\tlastC = index;\n\t\t}\n\t});\n\n\targs.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.debug()` when available.\n * No-op when `console.debug` is not a \"function\".\n * If `console.debug` is not available, falls back\n * to `console.log`.\n *\n * @api public\n */\nexports.log = console.debug || console.log || (() => {});\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\ttry {\n\t\tif (namespaces) {\n\t\t\texports.storage.setItem('debug', namespaces);\n\t\t} else {\n\t\t\texports.storage.removeItem('debug');\n\t\t}\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\nfunction load() {\n\tlet r;\n\ttry {\n\t\tr = exports.storage.getItem('debug') || exports.storage.getItem('DEBUG') ;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n\n\t// If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\tif (!r && typeof process !== 'undefined' && 'env' in process) {\n\t\tr = process.env.DEBUG;\n\t}\n\n\treturn r;\n}\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n\ttry {\n\t\t// TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n\t\t// The Browser also has localStorage in the global context.\n\t\treturn localStorage;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n\ttry {\n\t\treturn JSON.stringify(v);\n\t} catch (error) {\n\t\treturn '[UnexpectedJSONParseError]: ' + error.message;\n\t}\n};\n", "'use strict';\n\nmodule.exports = (flag, argv = process.argv) => {\n\tconst prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--');\n\tconst position = argv.indexOf(prefix + flag);\n\tconst terminatorPosition = argv.indexOf('--');\n\treturn position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);\n};\n", "'use strict';\nconst os = require('os');\nconst tty = require('tty');\nconst hasFlag = require('has-flag');\n\nconst {env} = process;\n\nlet forceColor;\nif (hasFlag('no-color') ||\n\thasFlag('no-colors') ||\n\thasFlag('color=false') ||\n\thasFlag('color=never')) {\n\tforceColor = 0;\n} else if (hasFlag('color') ||\n\thasFlag('colors') ||\n\thasFlag('color=true') ||\n\thasFlag('color=always')) {\n\tforceColor = 1;\n}\n\nif ('FORCE_COLOR' in env) {\n\tif (env.FORCE_COLOR === 'true') {\n\t\tforceColor = 1;\n\t} else if (env.FORCE_COLOR === 'false') {\n\t\tforceColor = 0;\n\t} else {\n\t\tforceColor = env.FORCE_COLOR.length === 0 ? 1 : Math.min(parseInt(env.FORCE_COLOR, 10), 3);\n\t}\n}\n\nfunction translateLevel(level) {\n\tif (level === 0) {\n\t\treturn false;\n\t}\n\n\treturn {\n\t\tlevel,\n\t\thasBasic: true,\n\t\thas256: level >= 2,\n\t\thas16m: level >= 3\n\t};\n}\n\nfunction supportsColor(haveStream, streamIsTTY) {\n\tif (forceColor === 0) {\n\t\treturn 0;\n\t}\n\n\tif (hasFlag('color=16m') ||\n\t\thasFlag('color=full') ||\n\t\thasFlag('color=truecolor')) {\n\t\treturn 3;\n\t}\n\n\tif (hasFlag('color=256')) {\n\t\treturn 2;\n\t}\n\n\tif (haveStream && !streamIsTTY && forceColor === undefined) {\n\t\treturn 0;\n\t}\n\n\tconst min = forceColor || 0;\n\n\tif (env.TERM === 'dumb') {\n\t\treturn min;\n\t}\n\n\tif (process.platform === 'win32') {\n\t\t// Windows 10 build 10586 is the first Windows release that supports 256 colors.\n\t\t// Windows 10 build 14931 is the first release that supports 16m/TrueColor.\n\t\tconst osRelease = os.release().split('.');\n\t\tif (\n\t\t\tNumber(osRelease[0]) >= 10 &&\n\t\t\tNumber(osRelease[2]) >= 10586\n\t\t) {\n\t\t\treturn Number(osRelease[2]) >= 14931 ? 3 : 2;\n\t\t}\n\n\t\treturn 1;\n\t}\n\n\tif ('CI' in env) {\n\t\tif (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI', 'GITHUB_ACTIONS', 'BUILDKITE'].some(sign => sign in env) || env.CI_NAME === 'codeship') {\n\t\t\treturn 1;\n\t\t}\n\n\t\treturn min;\n\t}\n\n\tif ('TEAMCITY_VERSION' in env) {\n\t\treturn /^(9\\.(0*[1-9]\\d*)\\.|\\d{2,}\\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;\n\t}\n\n\tif (env.COLORTERM === 'truecolor') {\n\t\treturn 3;\n\t}\n\n\tif ('TERM_PROGRAM' in env) {\n\t\tconst version = parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10);\n\n\t\tswitch (env.TERM_PROGRAM) {\n\t\t\tcase 'iTerm.app':\n\t\t\t\treturn version >= 3 ? 3 : 2;\n\t\t\tcase 'Apple_Terminal':\n\t\t\t\treturn 2;\n\t\t\t// No default\n\t\t}\n\t}\n\n\tif (/-256(color)?$/i.test(env.TERM)) {\n\t\treturn 2;\n\t}\n\n\tif (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {\n\t\treturn 1;\n\t}\n\n\tif ('COLORTERM' in env) {\n\t\treturn 1;\n\t}\n\n\treturn min;\n}\n\nfunction getSupportLevel(stream) {\n\tconst level = supportsColor(stream, stream && stream.isTTY);\n\treturn translateLevel(level);\n}\n\nmodule.exports = {\n\tsupportsColor: getSupportLevel,\n\tstdout: translateLevel(supportsColor(true, tty.isatty(1))),\n\tstderr: translateLevel(supportsColor(true, tty.isatty(2)))\n};\n", "/**\n * Module dependencies.\n */\n\nconst tty = require('tty');\nconst util = require('util');\n\n/**\n * This is the Node.js implementation of `debug()`.\n */\n\nexports.init = init;\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.destroy = util.deprecate(\n\t() => {},\n\t'Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.'\n);\n\n/**\n * Colors.\n */\n\nexports.colors = [6, 2, 3, 4, 5, 1];\n\ntry {\n\t// Optional dependency (as in, doesn't need to be installed, NOT like optionalDependencies in package.json)\n\t// eslint-disable-next-line import/no-extraneous-dependencies\n\tconst supportsColor = require('supports-color');\n\n\tif (supportsColor && (supportsColor.stderr || supportsColor).level >= 2) {\n\t\texports.colors = [\n\t\t\t20,\n\t\t\t21,\n\t\t\t26,\n\t\t\t27,\n\t\t\t32,\n\t\t\t33,\n\t\t\t38,\n\t\t\t39,\n\t\t\t40,\n\t\t\t41,\n\t\t\t42,\n\t\t\t43,\n\t\t\t44,\n\t\t\t45,\n\t\t\t56,\n\t\t\t57,\n\t\t\t62,\n\t\t\t63,\n\t\t\t68,\n\t\t\t69,\n\t\t\t74,\n\t\t\t75,\n\t\t\t76,\n\t\t\t77,\n\t\t\t78,\n\t\t\t79,\n\t\t\t80,\n\t\t\t81,\n\t\t\t92,\n\t\t\t93,\n\t\t\t98,\n\t\t\t99,\n\t\t\t112,\n\t\t\t113,\n\t\t\t128,\n\t\t\t129,\n\t\t\t134,\n\t\t\t135,\n\t\t\t148,\n\t\t\t149,\n\t\t\t160,\n\t\t\t161,\n\t\t\t162,\n\t\t\t163,\n\t\t\t164,\n\t\t\t165,\n\t\t\t166,\n\t\t\t167,\n\t\t\t168,\n\t\t\t169,\n\t\t\t170,\n\t\t\t171,\n\t\t\t172,\n\t\t\t173,\n\t\t\t178,\n\t\t\t179,\n\t\t\t184,\n\t\t\t185,\n\t\t\t196,\n\t\t\t197,\n\t\t\t198,\n\t\t\t199,\n\t\t\t200,\n\t\t\t201,\n\t\t\t202,\n\t\t\t203,\n\t\t\t204,\n\t\t\t205,\n\t\t\t206,\n\t\t\t207,\n\t\t\t208,\n\t\t\t209,\n\t\t\t214,\n\t\t\t215,\n\t\t\t220,\n\t\t\t221\n\t\t];\n\t}\n} catch (error) {\n\t// Swallow - we only care if `supports-color` is available; it doesn't have to be.\n}\n\n/**\n * Build up the default `inspectOpts` object from the environment variables.\n *\n * $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js\n */\n\nexports.inspectOpts = Object.keys(process.env).filter(key => {\n\treturn /^debug_/i.test(key);\n}).reduce((obj, key) => {\n\t// Camel-case\n\tconst prop = key\n\t\t.substring(6)\n\t\t.toLowerCase()\n\t\t.replace(/_([a-z])/g, (_, k) => {\n\t\t\treturn k.toUpperCase();\n\t\t});\n\n\t// Coerce string value into JS value\n\tlet val = process.env[key];\n\tif (/^(yes|on|true|enabled)$/i.test(val)) {\n\t\tval = true;\n\t} else if (/^(no|off|false|disabled)$/i.test(val)) {\n\t\tval = false;\n\t} else if (val === 'null') {\n\t\tval = null;\n\t} else {\n\t\tval = Number(val);\n\t}\n\n\tobj[prop] = val;\n\treturn obj;\n}, {});\n\n/**\n * Is stdout a TTY? Colored output is enabled when `true`.\n */\n\nfunction useColors() {\n\treturn 'colors' in exports.inspectOpts ?\n\t\tBoolean(exports.inspectOpts.colors) :\n\t\ttty.isatty(process.stderr.fd);\n}\n\n/**\n * Adds ANSI color escape codes if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\tconst {namespace: name, useColors} = this;\n\n\tif (useColors) {\n\t\tconst c = this.color;\n\t\tconst colorCode = '\\u001B[3' + (c < 8 ? c : '8;5;' + c);\n\t\tconst prefix = ` ${colorCode};1m${name} \\u001B[0m`;\n\n\t\targs[0] = prefix + args[0].split('\\n').join('\\n' + prefix);\n\t\targs.push(colorCode + 'm+' + module.exports.humanize(this.diff) + '\\u001B[0m');\n\t} else {\n\t\targs[0] = getDate() + name + ' ' + args[0];\n\t}\n}\n\nfunction getDate() {\n\tif (exports.inspectOpts.hideDate) {\n\t\treturn '';\n\t}\n\treturn new Date().toISOString() + ' ';\n}\n\n/**\n * Invokes `util.formatWithOptions()` with the specified arguments and writes to stderr.\n */\n\nfunction log(...args) {\n\treturn process.stderr.write(util.formatWithOptions(exports.inspectOpts, ...args) + '\\n');\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\tif (namespaces) {\n\t\tprocess.env.DEBUG = namespaces;\n\t} else {\n\t\t// If you set a process.env field to null or undefined, it gets cast to the\n\t\t// string 'null' or 'undefined'. Just delete instead.\n\t\tdelete process.env.DEBUG;\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n\treturn process.env.DEBUG;\n}\n\n/**\n * Init logic for `debug` instances.\n *\n * Create a new `inspectOpts` object in case `useColors` is set\n * differently for a particular `debug` instance.\n */\n\nfunction init(debug) {\n\tdebug.inspectOpts = {};\n\n\tconst keys = Object.keys(exports.inspectOpts);\n\tfor (let i = 0; i < keys.length; i++) {\n\t\tdebug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]];\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %o to `util.inspect()`, all on a single line.\n */\n\nformatters.o = function (v) {\n\tthis.inspectOpts.colors = this.useColors;\n\treturn util.inspect(v, this.inspectOpts)\n\t\t.split('\\n')\n\t\t.map(str => str.trim())\n\t\t.join(' ');\n};\n\n/**\n * Map %O to `util.inspect()`, allowing multiple lines if needed.\n */\n\nformatters.O = function (v) {\n\tthis.inspectOpts.colors = this.useColors;\n\treturn util.inspect(v, this.inspectOpts);\n};\n", "/**\n * Detect Electron renderer / nwjs process, which is node, but we should\n * treat as a browser.\n */\n\nif (typeof process === 'undefined' || process.type === 'renderer' || process.browser === true || process.__nwjs) {\n\tmodule.exports = require('./browser.js');\n} else {\n\tmodule.exports = require('./node.js');\n}\n", "import { Transform } from \"stream\"\nimport { CancellationToken } from \"./CancellationToken\"\n\nexport interface ProgressInfo {\n total: number\n delta: number\n transferred: number\n percent: number\n bytesPerSecond: number\n}\n\nexport class ProgressCallbackTransform extends Transform {\n private start = Date.now()\n private transferred = 0\n private delta = 0\n\n private nextUpdate = this.start + 1000\n\n constructor(\n private readonly total: number,\n private readonly cancellationToken: CancellationToken,\n private readonly onProgress: (info: ProgressInfo) => any\n ) {\n super()\n }\n\n _transform(chunk: any, encoding: string, callback: any) {\n if (this.cancellationToken.cancelled) {\n callback(new Error(\"cancelled\"), null)\n return\n }\n\n this.transferred += chunk.length\n this.delta += chunk.length\n\n const now = Date.now()\n if (now >= this.nextUpdate && this.transferred !== this.total /* will be emitted on _flush */) {\n this.nextUpdate = now + 1000\n\n this.onProgress({\n total: this.total,\n delta: this.delta,\n transferred: this.transferred,\n percent: (this.transferred / this.total) * 100,\n bytesPerSecond: Math.round(this.transferred / ((now - this.start) / 1000)),\n })\n this.delta = 0\n }\n\n callback(null, chunk)\n }\n\n _flush(callback: any): void {\n if (this.cancellationToken.cancelled) {\n callback(new Error(\"cancelled\"))\n return\n }\n\n this.onProgress({\n total: this.total,\n delta: this.delta,\n transferred: this.total,\n percent: 100,\n bytesPerSecond: Math.round(this.transferred / ((Date.now() - this.start) / 1000)),\n })\n this.delta = 0\n\n callback(null)\n }\n}\n", "import { BinaryToTextEncoding, createHash, Hash } from \"crypto\"\nimport _debug from \"debug\"\nimport { createWriteStream } from \"fs\"\nimport { IncomingMessage, OutgoingHttpHeader, OutgoingHttpHeaders, RequestOptions } from \"http\"\nimport { Socket } from \"net\"\nimport { Transform } from \"stream\"\nimport { URL } from \"url\"\nimport { Nullish } from \".\"\nimport { CancellationToken } from \"./CancellationToken\"\nimport { newError } from \"./error\"\nimport { ProgressCallbackTransform, ProgressInfo } from \"./ProgressCallbackTransform\"\n\nconst debug = _debug(\"electron-builder\")\n\nexport interface RequestHeaders extends OutgoingHttpHeaders {\n [key: string]: OutgoingHttpHeader | undefined\n}\n\nexport interface DownloadOptions {\n readonly headers?: OutgoingHttpHeaders | null\n readonly sha2?: string | null\n readonly sha512?: string | null\n\n readonly cancellationToken: CancellationToken\n\n // noinspection JSUnusedLocalSymbols\n onProgress?: (progress: ProgressInfo) => void\n}\n\nexport function createHttpError(response: IncomingMessage, description: any | null = null) {\n return new HttpError(\n response.statusCode || -1,\n `${response.statusCode} ${response.statusMessage}` +\n (description == null ? \"\" : \"\\n\" + JSON.stringify(description, null, \" \")) +\n \"\\nHeaders: \" +\n safeStringifyJson(response.headers),\n description\n )\n}\n\nconst HTTP_STATUS_CODES = new Map<number, string>([\n [429, \"Too many requests\"],\n [400, \"Bad request\"],\n [403, \"Forbidden\"],\n [404, \"Not found\"],\n [405, \"Method not allowed\"],\n [406, \"Not acceptable\"],\n [408, \"Request timeout\"],\n [413, \"Request entity too large\"],\n [500, \"Internal server error\"],\n [502, \"Bad gateway\"],\n [503, \"Service unavailable\"],\n [504, \"Gateway timeout\"],\n [505, \"HTTP version not supported\"],\n])\n\nexport class HttpError extends Error {\n constructor(\n readonly statusCode: number,\n message = `HTTP error: ${HTTP_STATUS_CODES.get(statusCode) || statusCode}`,\n readonly description: any | null = null\n ) {\n super(message)\n\n this.name = \"HttpError\"\n ;(this as NodeJS.ErrnoException).code = `HTTP_ERROR_${statusCode}`\n }\n\n isServerError() {\n return this.statusCode >= 500 && this.statusCode <= 599\n }\n}\n\nexport function parseJson(result: Promise<string | null>) {\n return result.then(it => (it == null || it.length === 0 ? null : JSON.parse(it)))\n}\n\ninterface Request {\n abort: () => void\n end: (data?: Buffer) => void\n}\nexport abstract class HttpExecutor<T extends Request> {\n protected readonly maxRedirects = 10\n\n request(options: RequestOptions, cancellationToken: CancellationToken = new CancellationToken(), data?: { [name: string]: any } | null): Promise<string | null> {\n configureRequestOptions(options)\n const json = data == null ? undefined : JSON.stringify(data)\n const encodedData = json ? Buffer.from(json) : undefined\n if (encodedData != null) {\n debug(json!)\n const { headers, ...opts } = options\n options = {\n method: \"post\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Content-Length\": encodedData.length,\n ...headers,\n },\n ...opts,\n }\n }\n return this.doApiRequest(options, cancellationToken, it => it.end(encodedData))\n }\n\n doApiRequest(\n options: RequestOptions,\n cancellationToken: CancellationToken,\n requestProcessor: (request: T, reject: (error: Error) => void) => void,\n redirectCount = 0\n ): Promise<string> {\n if (debug.enabled) {\n debug(`Request: ${safeStringifyJson(options)}`)\n }\n\n return cancellationToken.createPromise<string>((resolve, reject, onCancel) => {\n const request = this.createRequest(options, (response: any) => {\n try {\n this.handleResponse(response, options, cancellationToken, resolve, reject, redirectCount, requestProcessor)\n } catch (e: any) {\n reject(e)\n }\n })\n this.addErrorAndTimeoutHandlers(request, reject, options.timeout)\n this.addRedirectHandlers(request, options, reject, redirectCount, options => {\n this.doApiRequest(options, cancellationToken, requestProcessor, redirectCount).then(resolve).catch(reject)\n })\n requestProcessor(request, reject)\n onCancel(() => request.abort())\n })\n }\n\n // noinspection JSUnusedLocalSymbols\n // eslint-disable-next-line\n protected addRedirectHandlers(request: any, options: RequestOptions, reject: (error: Error) => void, redirectCount: number, handler: (options: RequestOptions) => void) {\n // not required for NodeJS\n }\n\n addErrorAndTimeoutHandlers(request: any, reject: (error: Error) => void, timeout = 60 * 1000) {\n this.addTimeOutHandler(request, reject, timeout)\n request.on(\"error\", reject)\n request.on(\"aborted\", () => {\n reject(new Error(\"Request has been aborted by the server\"))\n })\n }\n\n private handleResponse(\n response: IncomingMessage,\n options: RequestOptions,\n cancellationToken: CancellationToken,\n resolve: (data?: any) => void,\n reject: (error: Error) => void,\n redirectCount: number,\n requestProcessor: (request: T, reject: (error: Error) => void) => void\n ) {\n if (debug.enabled) {\n debug(`Response: ${response.statusCode} ${response.statusMessage}, request options: ${safeStringifyJson(options)}`)\n }\n\n // we handle any other >= 400 error on request end (read detailed message in the response body)\n if (response.statusCode === 404) {\n // error is clear, we don't need to read detailed error description\n reject(\n createHttpError(\n response,\n `method: ${options.method || \"GET\"} url: ${options.protocol || \"https:\"}//${options.hostname}${options.port ? `:${options.port}` : \"\"}${options.path}\n\nPlease double check that your authentication token is correct. Due to security reasons, actual status maybe not reported, but 404.\n`\n )\n )\n return\n } else if (response.statusCode === 204) {\n // on DELETE request\n resolve()\n return\n }\n\n const code = response.statusCode ?? 0\n const shouldRedirect = code >= 300 && code < 400\n const redirectUrl = safeGetHeader(response, \"location\")\n if (shouldRedirect && redirectUrl != null) {\n if (redirectCount > this.maxRedirects) {\n reject(this.createMaxRedirectError())\n return\n }\n\n this.doApiRequest(HttpExecutor.prepareRedirectUrlOptions(redirectUrl, options), cancellationToken, requestProcessor, redirectCount).then(resolve).catch(reject)\n return\n }\n\n response.setEncoding(\"utf8\")\n\n let data = \"\"\n response.on(\"error\", reject)\n response.on(\"data\", (chunk: string) => (data += chunk))\n response.on(\"end\", () => {\n try {\n if (response.statusCode != null && response.statusCode >= 400) {\n const contentType = safeGetHeader(response, \"content-type\")\n const isJson = contentType != null && (Array.isArray(contentType) ? contentType.find(it => it.includes(\"json\")) != null : contentType.includes(\"json\"))\n reject(\n createHttpError(\n response,\n `method: ${options.method || \"GET\"} url: ${options.protocol || \"https:\"}//${options.hostname}${options.port ? `:${options.port}` : \"\"}${options.path}\n\n Data:\n ${isJson ? JSON.stringify(JSON.parse(data)) : data}\n `\n )\n )\n } else {\n resolve(data.length === 0 ? null : data)\n }\n } catch (e: any) {\n reject(e)\n }\n })\n }\n\n // noinspection JSUnusedLocalSymbols\n abstract createRequest(options: RequestOptions, callback: (response: any) => void): T\n\n async downloadToBuffer(url: URL, options: DownloadOptions): Promise<Buffer> {\n return await options.cancellationToken.createPromise<Buffer>((resolve, reject, onCancel) => {\n const responseChunks: Buffer[] = []\n const requestOptions = {\n headers: options.headers || undefined,\n // because PrivateGitHubProvider requires HttpExecutor.prepareRedirectUrlOptions logic, so, we need to redirect manually\n redirect: \"manual\",\n }\n configureRequestUrl(url, requestOptions)\n configureRequestOptions(requestOptions)\n this.doDownload(\n requestOptions,\n {\n destination: null,\n options,\n onCancel,\n callback: error => {\n if (error == null) {\n resolve(Buffer.concat(responseChunks))\n } else {\n reject(error)\n }\n },\n responseHandler: (response, callback) => {\n let receivedLength = 0\n response.on(\"data\", (chunk: Buffer) => {\n receivedLength += chunk.length\n if (receivedLength > 524288000) {\n callback(new Error(\"Maximum allowed size is 500 MB\"))\n return\n }\n responseChunks.push(chunk)\n })\n response.on(\"end\", () => {\n callback(null)\n })\n },\n },\n 0\n )\n })\n }\n\n protected doDownload(requestOptions: RequestOptions, options: DownloadCallOptions, redirectCount: number) {\n const request = this.createRequest(requestOptions, (response: IncomingMessage) => {\n if (response.statusCode! >= 400) {\n options.callback(\n new Error(\n `Cannot download \"${requestOptions.protocol || \"https:\"}//${requestOptions.hostname}${requestOptions.path}\", status ${response.statusCode}: ${response.statusMessage}`\n )\n )\n return\n }\n\n // It is possible for the response stream to fail, e.g. when a network is lost while\n // response stream is in progress. Stop waiting and reject so consumer can catch the error.\n response.on(\"error\", options.callback)\n\n // this code not relevant for Electron (redirect event instead handled)\n const redirectUrl = safeGetHeader(response, \"location\")\n if (redirectUrl != null) {\n if (redirectCount < this.maxRedirects) {\n this.doDownload(HttpExecutor.prepareRedirectUrlOptions(redirectUrl, requestOptions), options, redirectCount++)\n } else {\n options.callback(this.createMaxRedirectError())\n }\n return\n }\n\n if (options.responseHandler == null) {\n configurePipes(options, response)\n } else {\n options.responseHandler(response, options.callback)\n }\n })\n this.addErrorAndTimeoutHandlers(request, options.callback, requestOptions.timeout)\n this.addRedirectHandlers(request, requestOptions, options.callback, redirectCount, requestOptions => {\n this.doDownload(requestOptions, options, redirectCount++)\n })\n request.end()\n }\n\n protected createMaxRedirectError() {\n return new Error(`Too many redirects (> ${this.maxRedirects})`)\n }\n\n private addTimeOutHandler(request: any, callback: (error: Error) => void, timeout: number) {\n request.on(\"socket\", (socket: Socket) => {\n socket.setTimeout(timeout, () => {\n request.abort()\n callback(new Error(\"Request timed out\"))\n })\n })\n }\n\n static prepareRedirectUrlOptions(redirectUrl: string, options: RequestOptions): RequestOptions {\n const newOptions = configureRequestOptionsFromUrl(redirectUrl, { ...options })\n const headers = newOptions.headers\n if (headers?.authorization) {\n // Parse original and redirect URLs to compare origins\n const originalUrl = HttpExecutor.reconstructOriginalUrl(options)\n const parsedRedirectUrl = parseUrl(redirectUrl, options)\n\n // Strip authorization header on cross-origin redirects (different protocol, hostname, or port)\n if (HttpExecutor.isCrossOriginRedirect(originalUrl, parsedRedirectUrl)) {\n if (debug.enabled) {\n debug(`Given the cross-origin redirect (from ${originalUrl.host} to ${parsedRedirectUrl.host}), the Authorization header will be stripped out.`)\n }\n delete headers.authorization\n }\n }\n return newOptions\n }\n\n private static reconstructOriginalUrl(options: RequestOptions): URL {\n const protocol = options.protocol || \"https:\"\n if (!options.hostname) {\n throw new Error(\"Missing hostname in request options\")\n }\n const hostname = options.hostname\n const port = options.port ? `:${options.port}` : \"\"\n const path = options.path || \"/\"\n return new URL(`${protocol}//${hostname}${port}${path}`)\n }\n\n private static isCrossOriginRedirect(originalUrl: URL, redirectUrl: URL): boolean {\n // Case-insensitive hostname comparison\n if (originalUrl.hostname.toLowerCase() !== redirectUrl.hostname.toLowerCase()) {\n return true\n }\n\n // Special case: allow http -> https redirect on same host with standard ports\n // This matches the behavior of Python requests library for backward compatibility\n // url.port returns an empty string if the port is omitted\n // or explicitly set to the default port for a given protocol.\n if (\n originalUrl.protocol === \"http:\" &&\n // This can be replaced with `!originalUrl.port`, but for the sake of clarity.\n [\"80\", \"\"].includes(originalUrl.port) &&\n redirectUrl.protocol === \"https:\" &&\n // This can be replaced with `!redirectUrl.port`, but for the sake of clarity.\n [\"443\", \"\"].includes(redirectUrl.port)\n ) {\n return false\n }\n\n // According to RFC 7235, a change in protocol or port constitutes a cross-origin request.\n // Forwarding authentication headers to a different origin can be a security risk.\n // For example, https://example.com:443 and http://example.com:80 are different origins.\n // We only make an exception for HTTP -> HTTPS upgrades on standard ports for backward compatibility.\n\n // Strip auth on any other protocol change\n if (originalUrl.protocol !== redirectUrl.protocol) {\n return true\n }\n\n // Strip auth on port change (accounting for default ports)\n const originalPort = originalUrl.port\n const redirectPort = redirectUrl.port\n return originalPort !== redirectPort\n }\n\n static retryOnServerError(task: () => Promise<any>, maxRetries = 3) {\n for (let attemptNumber = 0; ; attemptNumber++) {\n try {\n return task()\n } catch (e: any) {\n if (attemptNumber < maxRetries && ((e instanceof HttpError && e.isServerError()) || e.code === \"EPIPE\")) {\n continue\n }\n throw e\n }\n }\n }\n}\n\nexport interface DownloadCallOptions {\n responseHandler: ((response: IncomingMessage, callback: (error: Error | null) => void) => void) | null\n onCancel: (callback: () => void) => void\n callback: (error: Error | null) => void\n\n options: DownloadOptions\n\n destination: string | null\n}\n\nfunction parseUrl(url: string, options: RequestOptions): URL {\n try {\n // Would throw exception if url is not absolute\n return new URL(url)\n } catch {\n // Relative URL - construct base URL from original options\n const hostname = options.hostname\n const protocol = options.protocol || \"https:\"\n const port = options.port ? `:${options.port}` : \"\"\n const baseUrl = `${protocol}//${hostname}${port}`\n return new URL(url, baseUrl)\n }\n}\n\nexport function configureRequestOptionsFromUrl(url: string, options: RequestOptions) {\n const result = configureRequestOptions(options)\n const parsedUrl = parseUrl(url, options)\n configureRequestUrl(parsedUrl, result)\n return result\n}\n\nexport function configureRequestUrl(url: URL, options: RequestOptions): void {\n options.protocol = url.protocol\n options.hostname = url.hostname\n if (url.port) {\n options.port = url.port\n } else if (options.port) {\n delete options.port\n }\n options.path = url.pathname + url.search\n}\n\nexport class DigestTransform extends Transform {\n private readonly digester: Hash\n\n private _actual: string | null = null\n\n // noinspection JSUnusedGlobalSymbols\n get actual() {\n return this._actual\n }\n\n isValidateOnEnd = true\n\n constructor(\n readonly expected: string,\n private readonly algorithm: string = \"sha512\",\n private readonly encoding: BinaryToTextEncoding = \"base64\"\n ) {\n super()\n\n this.digester = createHash(algorithm)\n }\n\n // noinspection JSUnusedGlobalSymbols\n _transform(chunk: Buffer, encoding: string, callback: any) {\n this.digester.update(chunk)\n callback(null, chunk)\n }\n\n // noinspection JSUnusedGlobalSymbols\n _flush(callback: any): void {\n this._actual = this.digester.digest(this.encoding)\n\n if (this.isValidateOnEnd) {\n try {\n this.validate()\n } catch (e: any) {\n callback(e)\n return\n }\n }\n\n callback(null)\n }\n\n validate() {\n if (this._actual == null) {\n throw newError(\"Not finished yet\", \"ERR_STREAM_NOT_FINISHED\")\n }\n\n if (this._actual !== this.expected) {\n throw newError(`${this.algorithm} checksum mismatch, expected ${this.expected}, got ${this._actual}`, \"ERR_CHECKSUM_MISMATCH\")\n }\n\n return null\n }\n}\n\nfunction checkSha2(sha2Header: string | Nullish, sha2: string | Nullish, callback: (error: Error | null) => void): boolean {\n if (sha2Header != null && sha2 != null && sha2Header !== sha2) {\n callback(new Error(`checksum mismatch: expected ${sha2} but got ${sha2Header} (X-Checksum-Sha2 header)`))\n return false\n }\n return true\n}\n\nexport function safeGetHeader(response: any, headerKey: string) {\n const value = response.headers[headerKey]\n if (value == null) {\n return null\n } else if (Array.isArray(value)) {\n // electron API\n return value.length === 0 ? null : value[value.length - 1]\n } else {\n return value\n }\n}\n\nfunction configurePipes(options: DownloadCallOptions, response: IncomingMessage) {\n if (!checkSha2(safeGetHeader(response, \"X-Checksum-Sha2\"), options.options.sha2, options.callback)) {\n return\n }\n\n const streams: Array<any> = []\n if (options.options.onProgress != null) {\n const contentLength = safeGetHeader(response, \"content-length\")\n if (contentLength != null) {\n streams.push(new ProgressCallbackTransform(parseInt(contentLength, 10), options.options.cancellationToken, options.options.onProgress))\n }\n }\n\n const sha512 = options.options.sha512\n if (sha512 != null) {\n streams.push(new DigestTransform(sha512, \"sha512\", sha512.length === 128 && !sha512.includes(\"+\") && !sha512.includes(\"Z\") && !sha512.includes(\"=\") ? \"hex\" : \"base64\"))\n } else if (options.options.sha2 != null) {\n streams.push(new DigestTransform(options.options.sha2, \"sha256\", \"hex\"))\n }\n\n const fileOut = createWriteStream(options.destination!)\n streams.push(fileOut)\n\n let lastStream = response\n for (const stream of streams) {\n stream.on(\"error\", (error: Error) => {\n fileOut.close()\n if (!options.options.cancellationToken.cancelled) {\n options.callback(error)\n }\n })\n lastStream = lastStream.pipe(stream)\n }\n\n fileOut.on(\"finish\", () => {\n ;(fileOut.close as any)(options.callback)\n })\n}\n\nexport function configureRequestOptions(options: RequestOptions, token?: string | null, method?: \"GET\" | \"DELETE\" | \"PUT\" | \"POST\"): RequestOptions {\n if (method != null) {\n options.method = method\n }\n\n options.headers = { ...options.headers }\n const headers = options.headers\n\n if (token != null) {\n ;(headers as any).authorization = token.startsWith(\"Basic\") || token.startsWith(\"Bearer\") ? token : `token ${token}`\n }\n if (headers[\"User-Agent\"] == null) {\n headers[\"User-Agent\"] = \"electron-builder\"\n }\n\n if (method == null || method === \"GET\" || headers[\"Cache-Control\"] == null) {\n headers[\"Cache-Control\"] = \"no-cache\"\n }\n\n // do not specify for node (in any case we use https module)\n if (options.protocol == null && (process.versions as any).electron != null) {\n options.protocol = \"https:\"\n }\n return options\n}\n\nexport function safeStringifyJson(data: any, skippedNames?: Set<string>) {\n return JSON.stringify(\n data,\n (name, value) => {\n if (\n name.endsWith(\"Authorization\") ||\n name.endsWith(\"authorization\") ||\n name.endsWith(\"Password\") ||\n name.endsWith(\"PASSWORD\") ||\n name.endsWith(\"Token\") ||\n name.includes(\"password\") ||\n name.includes(\"token\") ||\n (skippedNames != null && skippedNames.has(name))\n ) {\n return \"<stripped sensitive data>\"\n }\n return value\n },\n 2\n )\n}\n", "export class MemoLazy<S, V> {\n private selected: S | undefined = undefined\n private _value: Promise<V> | undefined = undefined\n\n constructor(\n private selector: () => S,\n private creator: (selected: S) => Promise<V>\n ) {}\n\n get hasValue() {\n return this._value !== undefined\n }\n\n get value(): Promise<V> {\n const selected = this.selector()\n if (this._value !== undefined && equals(this.selected, selected)) {\n // value exists and selected hasn't changed, so return the cached value\n return this._value\n }\n\n this.selected = selected\n const result = this.creator(selected)\n this.value = result\n\n return result\n }\n\n set value(value: Promise<V>) {\n this._value = value\n }\n}\n\nfunction equals(firstValue: any, secondValue: any): boolean {\n const isFirstObject = typeof firstValue === \"object\" && firstValue !== null\n const isSecondObject = typeof secondValue === \"object\" && secondValue !== null\n\n // do a shallow comparison of objects, arrays etc.\n if (isFirstObject && isSecondObject) {\n const keys1 = Object.keys(firstValue)\n const keys2 = Object.keys(secondValue)\n\n return keys1.length === keys2.length && keys1.every((key: any) => equals(firstValue[key], secondValue[key]))\n }\n\n // otherwise just compare the values directly\n return firstValue === secondValue\n}\n", "import { OutgoingHttpHeaders } from \"http\"\nimport { Nullish } from \".\"\n\nexport type PublishProvider = \"github\" | \"gitlab\" | \"s3\" | \"spaces\" | \"generic\" | \"custom\" | \"snapStore\" | \"keygen\" | \"bitbucket\"\n\n// typescript-json-schema generates only PublishConfiguration if it is specified in the list, so, it is not added here\nexport type AllPublishOptions =\n | string\n | GithubOptions\n | GitlabOptions\n | S3Options\n | SpacesOptions\n | GenericServerOptions\n | CustomPublishOptions\n | KeygenOptions\n | SnapStoreOptions\n | BitbucketOptions\n\nexport interface PublishConfiguration {\n /**\n * The provider.\n */\n readonly provider: PublishProvider\n\n /**\n * @private\n * win-only\n */\n publisherName?: Array<string> | null\n\n /**\n * @private\n * win-only\n */\n readonly updaterCacheDirName?: string | null\n\n /**\n * Whether to publish auto update info files.\n *\n * Auto update relies only on the first provider in the list (you can specify several publishers).\n * Thus, probably, there`s no need to upload the metadata files for the other configured providers. But by default will be uploaded.\n *\n * @default true\n */\n readonly publishAutoUpdate?: boolean\n\n /**\n * Any custom request headers\n */\n readonly requestHeaders?: OutgoingHttpHeaders\n\n /**\n * Request timeout in milliseconds. (Default is 2 minutes; O is ignored)\n *\n * @default 120000\n */\n readonly timeout?: number | null\n}\n\n// https://github.com/electron-userland/electron-builder/issues/3261\nexport interface CustomPublishOptions extends PublishConfiguration {\n /**\n * The provider. Must be `custom`.\n */\n readonly provider: \"custom\"\n\n /**\n * The Provider to provide UpdateInfo regarding available updates. Required\n * to use custom providers with electron-updater.\n */\n updateProvider?: new (options: CustomPublishOptions, updater: any, runtimeOptions: any) => any\n\n [index: string]: any\n}\n\n/**\n * [GitHub](https://help.github.com/articles/about-releases/) options.\n *\n * GitHub [personal access token](https://help.github.com/articles/creating-an-access-token-for-command-line-use/) is required. You can generate by going to [https://github.com/settings/tokens/new](https://github.com/settings/tokens/new). The access token should have the repo scope/permission.\n * Define `GH_TOKEN` environment variable.\n */\nexport interface GithubOptions extends PublishConfiguration {\n /**\n * The provider. Must be `github`.\n */\n readonly provider: \"github\"\n\n /**\n * The repository name. [Detected automatically](#github-repository-and-bintray-package).\n */\n readonly repo?: string | null\n\n /**\n * The owner.\n */\n readonly owner?: string | null\n\n /**\n * Whether to use `v`-prefixed tag name.\n * @default true\n * @deprecated please use #tagNamePrefix instead.\n */\n readonly vPrefixedTagName?: boolean\n\n /**\n * If defined, sets the prefix of the tag name that comes before the semver number.\n * e.g. \"v\" in \"v1.2.3\" or \"test\" of \"test1.2.3\".\n * Overrides `vPrefixedTagName`\n */\n readonly tagNamePrefix?: string\n\n /**\n * The host (including the port if need).\n * @default github.com\n */\n readonly host?: string | null\n\n /**\n * The protocol. GitHub Publisher supports only `https`.\n * @default https\n */\n readonly protocol?: \"https\" | \"http\" | null\n\n /**\n * The access token to support auto-update from private github repositories. Never specify it in the configuration files. Only for [setFeedURL](./auto-update.md#appupdatersetfeedurloptions).\n */\n readonly token?: string | null\n\n /**\n * Whether to use private github auto-update provider if `GH_TOKEN` environment variable is defined. See [Private GitHub Update Repo](./auto-update.md#private-github-update-repo).\n */\n readonly private?: boolean | null\n\n /**\n * The channel.\n * @default latest\n */\n readonly channel?: string | null\n\n /**\n * The type of release. By default `draft` release will be created.\n *\n * Also you can set release type using environment variable. If `EP_DRAFT`is set to `true` — `draft`, if `EP_PRE_RELEASE`is set to `true` — `prerelease`.\n * @default draft\n */\n releaseType?: \"draft\" | \"prerelease\" | \"release\" | null\n}\n\n/** @private */\nexport function githubUrl(options: GithubOptions, defaultHost = \"github.com\") {\n return `${options.protocol || \"https\"}://${options.host || defaultHost}`\n}\n\nexport function githubTagPrefix(options: GithubOptions) {\n if (options.tagNamePrefix) {\n return options.tagNamePrefix\n }\n if (options.vPrefixedTagName ?? true) {\n return \"v\"\n }\n return \"\"\n}\n\n/**\n * [GitLab](https://docs.gitlab.com/ee/user/project/releases/) options.\n *\n * GitLab [personal access token](https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html) is required for private repositories. You can generate one by going to your GitLab profile settings.\n * Define `GITLAB_TOKEN` environment variable.\n */\nexport interface GitlabOptions extends PublishConfiguration {\n /**\n * The provider. Must be `gitlab`.\n */\n readonly provider: \"gitlab\"\n\n /**\n * The GitLab project ID or path (e.g., \"12345678\" or \"namespace/project\").\n */\n readonly projectId?: string | number | null\n\n /**\n * The GitLab host (including the port if need).\n * @default gitlab.com\n */\n readonly host?: string | null\n\n /**\n * The access token to support auto-update from private GitLab repositories. Never specify it in the configuration files.\n */\n readonly token?: string | null\n\n /**\n * Whether to use `v`-prefixed tag name.\n * @default true\n */\n readonly vPrefixedTagName?: boolean\n\n /**\n * The channel.\n * @default latest\n */\n readonly channel?: string | null\n\n /**\n * Upload target method. Can be \"project_upload\" for GitLab project uploads or \"generic_package\" for GitLab generic packages.\n * @default \"project_upload\"\n */\n readonly uploadTarget?: \"project_upload\" | \"generic_package\" | null\n}\n\n/**\n * Generic (any HTTP(S) server) options.\n * In all publish options [File Macros](./file-patterns.md#file-macros) are supported.\n */\nexport interface GenericServerOptions extends PublishConfiguration {\n /**\n * The provider. Must be `generic`.\n */\n readonly provider: \"generic\"\n\n /**\n * The base url. e.g. `https://bucket_name.s3.amazonaws.com`.\n */\n readonly url: string\n\n /**\n * The channel.\n * @default latest\n */\n readonly channel?: string | null\n\n /**\n * Whether to use multiple range requests for differential update. Defaults to `true` if `url` doesn't contain `s3.amazonaws.com`.\n */\n readonly useMultipleRangeRequest?: boolean\n}\n\n/**\n * Keygen options.\n * https://keygen.sh/\n * Define `KEYGEN_TOKEN` environment variable.\n */\nexport interface KeygenOptions extends PublishConfiguration {\n /**\n * The provider. Must be `keygen`.\n */\n readonly provider: \"keygen\"\n\n /**\n * Keygen host for self-hosted instances\n * @default \"api.keygen.sh\"\n */\n readonly host?: string\n\n /**\n * Keygen account's UUID\n */\n readonly account: string\n\n /**\n * Keygen product's UUID\n */\n readonly product: string\n\n /**\n * The channel.\n * @default stable\n */\n readonly channel?: \"stable\" | \"rc\" | \"beta\" | \"alpha\" | \"dev\" | null\n\n /**\n * The target Platform. Is set programmatically explicitly during publishing.\n */\n readonly platform?: string | null\n}\n\n/**\n * Bitbucket options.\n * https://bitbucket.org/\n * Define `BITBUCKET_TOKEN` environment variable.\n *\n * For converting an app password to a usable token, you can utilize this\n```typescript\nconvertAppPassword(owner: string, appPassword: string) {\n const base64encodedData = Buffer.from(`${owner}:${appPassword.trim()}`).toString(\"base64\")\n return `Basic ${base64encodedData}`\n}\n```\n */\nexport interface BitbucketOptions extends PublishConfiguration {\n /**\n * The provider. Must be `bitbucket`.\n */\n readonly provider: \"bitbucket\"\n\n /**\n * Repository owner\n */\n readonly owner: string\n\n /**\n * The [app password](https://bitbucket.org/account/settings/app-passwords) to support auto-update from private bitbucket repositories.\n */\n readonly token?: string | null\n\n /**\n * The user name to support auto-update from private bitbucket repositories.\n */\n readonly username?: string | null\n\n /**\n * Repository slug/name\n */\n readonly slug: string\n\n /**\n * The channel.\n * @default latest\n */\n readonly channel?: string | null\n}\n\n/**\n * [Snap Store](https://snapcraft.io/) options. To publish directly to Snapcraft, see <a href=\"https://snapcraft.io/docs/snapcraft-authentication\">Snapcraft authentication options</a> for local or CI/CD authentication options.\n */\nexport interface SnapStoreOptions extends PublishConfiguration {\n /**\n * The provider. Must be `snapStore`.\n */\n readonly provider: \"snapStore\"\n\n /**\n * snapcraft repo name\n */\n readonly repo?: string\n\n /**\n * The list of channels the snap would be released.\n * @default [\"edge\"]\n */\n readonly channels?: string | Array<string> | null\n}\n\nexport interface BaseS3Options extends PublishConfiguration {\n /**\n * The update channel.\n * @default latest\n */\n channel?: string | null\n\n /**\n * The directory path.\n * @default /\n */\n readonly path?: string | null\n\n /**\n * The ACL. Set to `null` to not [add](https://github.com/electron-userland/electron-builder/issues/1822).\n *\n * @default public-read\n */\n readonly acl?: \"private\" | \"public-read\" | null\n}\n\n/**\n * [Amazon S3](https://aws.amazon.com/s3/) options.\n * AWS credentials are required, please see [getting your credentials](http://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/getting-your-credentials.html).\n * To set credentials define `AWS_ACCESS_KEY_ID` and `AWS_SECRET_ACCESS_KEY` [environment variables](http://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/loading-node-credentials-environment.html) directly,\n * or use [~/.aws/credentials](http://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/loading-node-credentials-shared.html) file,\n * or use [~/.aws/config](https://docs.aws.amazon.com/sdkref/latest/guide/file-format.html) file. For the last method to work you will also need to define `AWS_SDK_LOAD_CONFIG=1` environment variable.\n *\n * Example configuration:\n *\n```json\n{\n \"build\":\n \"publish\": {\n \"provider\": \"s3\",\n \"bucket\": \"bucket-name\"\n }\n }\n}\n```\n */\nexport interface S3Options extends BaseS3Options {\n /**\n * The provider. Must be `s3`.\n */\n readonly provider: \"s3\"\n\n /**\n * The bucket name.\n */\n readonly bucket: string\n\n /**\n * The region. Is determined and set automatically when publishing.\n */\n region?: string | null\n\n /**\n * The ACL. Set to `null` to not [add](https://github.com/electron-userland/electron-builder/issues/1822).\n *\n * Please see [required permissions for the S3 provider](https://github.com/electron-userland/electron-builder/issues/1618#issuecomment-314679128).\n *\n * @default public-read\n */\n readonly acl?: \"private\" | \"public-read\" | null\n\n /**\n * The type of storage to use for the object.\n * @default STANDARD\n */\n readonly storageClass?: \"STANDARD\" | \"REDUCED_REDUNDANCY\" | \"STANDARD_IA\" | null\n\n /**\n * Server-side encryption algorithm to use for the object.\n */\n readonly encryption?: \"AES256\" | \"aws:kms\" | null\n\n /**\n * The endpoint URI to send requests to. The default endpoint is built from the configured region.\n * The endpoint should be a string like `https://{service}.{region}.amazonaws.com`.\n */\n readonly endpoint?: string | null\n\n /**\n * If set to true, this will enable the s3 accelerated endpoint\n * These endpoints have a particular format of:\n * ${bucketname}.s3-accelerate.amazonaws.com\n */\n readonly accelerate?: boolean\n\n /**\n * When true, force a path-style endpoint to be used where the bucket name is part of the path.\n * [Path-style Access](https://docs.aws.amazon.com/AmazonS3/latest/userguide/VirtualHosting.html#path-style-access)\n */\n readonly forcePathStyle?: boolean\n}\n\n/**\n * [DigitalOcean Spaces](https://www.digitalocean.com/community/tutorials/an-introduction-to-digitalocean-spaces) options.\n * Access key is required, define `DO_KEY_ID` and `DO_SECRET_KEY` environment variables.\n */\nexport interface SpacesOptions extends BaseS3Options {\n /**\n * The provider. Must be `spaces`.\n */\n readonly provider: \"spaces\"\n\n /**\n * The space name.\n */\n readonly name: string\n\n /**\n * The region (e.g. `nyc3`).\n */\n readonly region: string\n}\n\nexport interface GitlabReleaseInfo {\n name: string\n tag_name: string\n description: string\n created_at: string\n released_at: string\n upcoming_release: boolean\n assets: GitlabReleaseAsset\n}\n\nexport interface GitlabReleaseAsset {\n count: number\n sources: Array<{\n format: string\n url: string\n }>\n links: Array<{\n id: number\n name: string\n url: string\n direct_asset_url: string\n link_type: string\n }>\n}\n\nexport function getS3LikeProviderBaseUrl(configuration: PublishConfiguration) {\n const provider = configuration.provider\n if (provider === \"s3\") {\n return s3Url(configuration as S3Options)\n }\n if (provider === \"spaces\") {\n return spacesUrl(configuration as SpacesOptions)\n }\n throw new Error(`Not supported provider: ${provider}`)\n}\n\nfunction s3Url(options: S3Options) {\n let url: string\n if (options.accelerate == true) {\n url = `https://${options.bucket}.s3-accelerate.amazonaws.com`\n } else if (options.endpoint != null) {\n url = `${options.endpoint}/${options.bucket}`\n } else if (options.bucket.includes(\".\")) {\n if (options.region == null) {\n throw new Error(`Bucket name \"${options.bucket}\" includes a dot, but S3 region is missing`)\n }\n\n // special case, see http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingBucket.html#access-bucket-intro\n if (options.region === \"us-east-1\") {\n url = `https://s3.amazonaws.com/${options.bucket}`\n } else {\n url = `https://s3-${options.region}.amazonaws.com/${options.bucket}`\n }\n } else if (options.region === \"cn-north-1\") {\n url = `https://${options.bucket}.s3.${options.region}.amazonaws.com.cn`\n } else {\n url = `https://${options.bucket}.s3.amazonaws.com`\n }\n return appendPath(url, options.path)\n}\n\nfunction appendPath(url: string, p: string | Nullish): string {\n if (p != null && p.length > 0) {\n if (!p.startsWith(\"/\")) {\n url += \"/\"\n }\n url += p\n }\n return url\n}\n\nfunction spacesUrl(options: SpacesOptions) {\n if (options.name == null) {\n throw new Error(`name is missing`)\n }\n if (options.region == null) {\n throw new Error(`region is missing`)\n }\n return appendPath(`https://${options.name}.${options.region}.digitaloceanspaces.com`, options.path)\n}\n", "import { CancellationToken } from \"./CancellationToken\"\n\nexport async function retry<T>(\n task: () => Promise<T>,\n options: { retries: number; interval: number; backoff?: number; attempt?: number; cancellationToken?: CancellationToken; shouldRetry?: (e: any) => boolean | Promise<boolean> }\n): Promise<T> {\n const { retries: retryCount, interval, backoff = 0, attempt = 0, shouldRetry, cancellationToken = new CancellationToken() } = options\n try {\n return await task()\n } catch (error: any) {\n if ((await Promise.resolve(shouldRetry?.(error) ?? true)) && retryCount > 0 && !cancellationToken.cancelled) {\n await new Promise(resolve => setTimeout(resolve, interval + backoff * attempt))\n return await retry(task, { ...options, retries: retryCount - 1, attempt: attempt + 1 })\n } else {\n throw error\n }\n }\n}\n", "export function parseDn(seq: string): Map<string, string> {\n let quoted = false\n let key: string | null = null\n let token = \"\"\n let nextNonSpace = 0\n\n seq = seq.trim()\n const result = new Map<string, string>()\n for (let i = 0; i <= seq.length; i++) {\n if (i === seq.length) {\n if (key !== null) {\n result.set(key, token)\n }\n break\n }\n\n const ch = seq[i]\n if (quoted) {\n if (ch === '\"') {\n quoted = false\n continue\n }\n } else {\n if (ch === '\"') {\n quoted = true\n continue\n }\n\n if (ch === \"\\\\\") {\n i++\n const ord = parseInt(seq.slice(i, i + 2), 16)\n if (Number.isNaN(ord)) {\n token += seq[i]\n } else {\n i++\n token += String.fromCharCode(ord)\n }\n continue\n }\n\n if (key === null && ch === \"=\") {\n key = token\n token = \"\"\n continue\n }\n\n if (ch === \",\" || ch === \";\" || ch === \"+\") {\n if (key !== null) {\n result.set(key, token)\n }\n key = null\n token = \"\"\n continue\n }\n }\n\n if (ch === \" \" && !quoted) {\n if (token.length === 0) {\n continue\n }\n\n if (i > nextNonSpace) {\n let j = i\n while (seq[j] === \" \") {\n j++\n }\n nextNonSpace = j\n }\n\n if (\n nextNonSpace >= seq.length ||\n seq[nextNonSpace] === \",\" ||\n seq[nextNonSpace] === \";\" ||\n (key === null && seq[nextNonSpace] === \"=\") ||\n (key !== null && seq[nextNonSpace] === \"+\")\n ) {\n i = nextNonSpace - 1\n continue\n }\n }\n\n token += ch\n }\n\n return result\n}\n", "import { createHash, randomBytes } from \"crypto\"\nimport { newError } from \"./error\"\n\nconst invalidName = \"options.name must be either a string or a Buffer\"\n\n// Node ID according to rfc4122#section-4.5\nconst randomHost = randomBytes(16)\nrandomHost[0] = randomHost[0] | 0x01\n\n// lookup table hex to byte\nconst hex2byte: any = {}\n\n// lookup table byte to hex\nconst byte2hex: Array<string> = []\n// populate lookup tables\nfor (let i = 0; i < 256; i++) {\n const hex = (i + 0x100).toString(16).substr(1)\n hex2byte[hex] = i\n byte2hex[i] = hex\n}\n\n// UUID class\nexport class UUID {\n private ascii: string | null = null\n private readonly binary: Buffer | null = null\n private readonly version: number\n\n // from rfc4122#appendix-C\n static readonly OID: Buffer = UUID.parse(\"6ba7b812-9dad-11d1-80b4-00c04fd430c8\")\n\n constructor(uuid: Buffer | string) {\n const check = UUID.check(uuid)\n if (!check) {\n throw new Error(\"not a UUID\")\n }\n\n this.version = check.version!\n\n if (check.format === \"ascii\") {\n this.ascii = uuid as string\n } else {\n this.binary = uuid as Buffer\n }\n }\n\n static v5(name: string | Buffer, namespace: Buffer) {\n return uuidNamed(name, \"sha1\", 0x50, namespace)\n }\n\n toString() {\n if (this.ascii == null) {\n this.ascii = stringify(this.binary!)\n }\n return this.ascii\n }\n\n inspect() {\n return `UUID v${this.version} ${this.toString()}`\n }\n\n static check(uuid: Buffer | string, offset = 0) {\n if (typeof uuid === \"string\") {\n uuid = uuid.toLowerCase()\n\n if (!/^[a-f0-9]{8}(-[a-f0-9]{4}){3}-([a-f0-9]{12})$/.test(uuid)) {\n return false\n }\n\n if (uuid === \"00000000-0000-0000-0000-000000000000\") {\n return { version: undefined, variant: \"nil\", format: \"ascii\" }\n }\n\n return {\n version: (hex2byte[uuid[14] + uuid[15]] & 0xf0) >> 4,\n variant: getVariant((hex2byte[uuid[19] + uuid[20]] & 0xe0) >> 5),\n format: \"ascii\",\n }\n }\n\n if (Buffer.isBuffer(uuid)) {\n if (uuid.length < offset + 16) {\n return false\n }\n\n let i = 0\n for (; i < 16; i++) {\n if (uuid[offset + i] !== 0) {\n break\n }\n }\n if (i === 16) {\n return { version: undefined, variant: \"nil\", format: \"binary\" }\n }\n\n return {\n version: (uuid[offset + 6] & 0xf0) >> 4,\n variant: getVariant((uuid[offset + 8] & 0xe0) >> 5),\n format: \"binary\",\n }\n }\n\n throw newError(\"Unknown type of uuid\", \"ERR_UNKNOWN_UUID_TYPE\")\n }\n\n // read stringified uuid into a Buffer\n static parse(input: string): Buffer {\n const buffer = Buffer.allocUnsafe(16)\n let j = 0\n for (let i = 0; i < 16; i++) {\n buffer[i] = hex2byte[input[j++] + input[j++]]\n if (i === 3 || i === 5 || i === 7 || i === 9) {\n j += 1\n }\n }\n return buffer\n }\n}\n\n// according to rfc4122#section-4.1.1\nfunction getVariant(bits: number) {\n switch (bits) {\n case 0:\n case 1:\n case 3:\n return \"ncs\"\n case 4:\n case 5:\n return \"rfc4122\"\n case 6:\n return \"microsoft\"\n default:\n return \"future\"\n }\n}\n\nenum UuidEncoding {\n ASCII,\n BINARY,\n OBJECT,\n}\n\n// v3 + v5\nfunction uuidNamed(name: string | Buffer, hashMethod: string, version: number, namespace: Buffer, encoding: UuidEncoding = UuidEncoding.ASCII) {\n const hash = createHash(hashMethod)\n\n const nameIsNotAString = typeof name !== \"string\"\n if (nameIsNotAString && !Buffer.isBuffer(name)) {\n throw newError(invalidName, \"ERR_INVALID_UUID_NAME\")\n }\n\n hash.update(namespace)\n hash.update(name)\n\n const buffer = hash.digest()\n let result: any\n switch (encoding) {\n case UuidEncoding.BINARY:\n buffer[6] = (buffer[6] & 0x0f) | version\n buffer[8] = (buffer[8] & 0x3f) | 0x80\n result = buffer\n break\n case UuidEncoding.OBJECT:\n buffer[6] = (buffer[6] & 0x0f) | version\n buffer[8] = (buffer[8] & 0x3f) | 0x80\n result = new UUID(buffer)\n break\n default:\n result =\n byte2hex[buffer[0]] +\n byte2hex[buffer[1]] +\n byte2hex[buffer[2]] +\n byte2hex[buffer[3]] +\n \"-\" +\n byte2hex[buffer[4]] +\n byte2hex[buffer[5]] +\n \"-\" +\n byte2hex[(buffer[6] & 0x0f) | version] +\n byte2hex[buffer[7]] +\n \"-\" +\n byte2hex[(buffer[8] & 0x3f) | 0x80] +\n byte2hex[buffer[9]] +\n \"-\" +\n byte2hex[buffer[10]] +\n byte2hex[buffer[11]] +\n byte2hex[buffer[12]] +\n byte2hex[buffer[13]] +\n byte2hex[buffer[14]] +\n byte2hex[buffer[15]]\n break\n }\n return result\n}\n\nfunction stringify(buffer: Buffer) {\n return (\n byte2hex[buffer[0]] +\n byte2hex[buffer[1]] +\n byte2hex[buffer[2]] +\n byte2hex[buffer[3]] +\n \"-\" +\n byte2hex[buffer[4]] +\n byte2hex[buffer[5]] +\n \"-\" +\n byte2hex[buffer[6]] +\n byte2hex[buffer[7]] +\n \"-\" +\n byte2hex[buffer[8]] +\n byte2hex[buffer[9]] +\n \"-\" +\n byte2hex[buffer[10]] +\n byte2hex[buffer[11]] +\n byte2hex[buffer[12]] +\n byte2hex[buffer[13]] +\n byte2hex[buffer[14]] +\n byte2hex[buffer[15]]\n )\n}\n\n// according to rfc4122#section-4.1.7\nexport const nil = new UUID(\"00000000-0000-0000-0000-000000000000\")\n\n// UUID.v4 = uuidRandom\n\n// UUID.v4fast = uuidRandomFast\n\n// UUID.v3 = function(options, callback) {\n// return uuidNamed(\"md5\", 0x30, options, callback)\n// }\n", ";(function (sax) {\n // wrapper for non-node envs\n sax.parser = function (strict, opt) {\n return new SAXParser(strict, opt)\n }\n sax.SAXParser = SAXParser\n sax.SAXStream = SAXStream\n sax.createStream = createStream\n\n // When we pass the MAX_BUFFER_LENGTH position, start checking for buffer overruns.\n // When we check, schedule the next check for MAX_BUFFER_LENGTH - (max(buffer lengths)),\n // since that's the earliest that a buffer overrun could occur. This way, checks are\n // as rare as required, but as often as necessary to ensure never crossing this bound.\n // Furthermore, buffers are only tested at most once per write(), so passing a very\n // large string into write() might have undesirable effects, but this is manageable by\n // the caller, so it is assumed to be safe. Thus, a call to write() may, in the extreme\n // edge case, result in creating at most one complete copy of the string passed in.\n // Set to Infinity to have unlimited buffers.\n sax.MAX_BUFFER_LENGTH = 64 * 1024\n\n var buffers = [\n 'comment',\n 'sgmlDecl',\n 'textNode',\n 'tagName',\n 'doctype',\n 'procInstName',\n 'procInstBody',\n 'entity',\n 'attribName',\n 'attribValue',\n 'cdata',\n 'script',\n ]\n\n sax.EVENTS = [\n 'text',\n 'processinginstruction',\n 'sgmldeclaration',\n 'doctype',\n 'comment',\n 'opentagstart',\n 'attribute',\n 'opentag',\n 'closetag',\n 'opencdata',\n 'cdata',\n 'closecdata',\n 'error',\n 'end',\n 'ready',\n 'script',\n 'opennamespace',\n 'closenamespace',\n ]\n\n function SAXParser(strict, opt) {\n if (!(this instanceof SAXParser)) {\n return new SAXParser(strict, opt)\n }\n\n var parser = this\n clearBuffers(parser)\n parser.q = parser.c = ''\n parser.bufferCheckPosition = sax.MAX_BUFFER_LENGTH\n parser.encoding = null;\n parser.opt = opt || {}\n parser.opt.lowercase = parser.opt.lowercase || parser.opt.lowercasetags\n parser.looseCase = parser.opt.lowercase ? 'toLowerCase' : 'toUpperCase'\n parser.opt.maxEntityCount = parser.opt.maxEntityCount || 512\n parser.opt.maxEntityDepth = parser.opt.maxEntityDepth || 4\n parser.entityCount = parser.entityDepth = 0\n parser.tags = []\n parser.closed = parser.closedRoot = parser.sawRoot = false\n parser.tag = parser.error = null\n parser.strict = !!strict\n parser.noscript = !!(strict || parser.opt.noscript)\n parser.state = S.BEGIN\n parser.strictEntities = parser.opt.strictEntities\n parser.ENTITIES =\n parser.strictEntities ?\n Object.create(sax.XML_ENTITIES)\n : Object.create(sax.ENTITIES)\n parser.attribList = []\n\n // namespaces form a prototype chain.\n // it always points at the current tag,\n // which protos to its parent tag.\n if (parser.opt.xmlns) {\n parser.ns = Object.create(rootNS)\n }\n\n // disallow unquoted attribute values if not otherwise configured\n // and strict mode is true\n if (parser.opt.unquotedAttributeValues === undefined) {\n parser.opt.unquotedAttributeValues = !strict\n }\n\n // mostly just for error reporting\n parser.trackPosition = parser.opt.position !== false\n if (parser.trackPosition) {\n parser.position = parser.line = parser.column = 0\n }\n emit(parser, 'onready')\n }\n\n if (!Object.create) {\n Object.create = function (o) {\n function F() {}\n F.prototype = o\n var newf = new F()\n return newf\n }\n }\n\n if (!Object.keys) {\n Object.keys = function (o) {\n var a = []\n for (var i in o) if (o.hasOwnProperty(i)) a.push(i)\n return a\n }\n }\n\n function checkBufferLength(parser) {\n var maxAllowed = Math.max(sax.MAX_BUFFER_LENGTH, 10)\n var maxActual = 0\n for (var i = 0, l = buffers.length; i < l; i++) {\n var len = parser[buffers[i]].length\n if (len > maxAllowed) {\n // Text/cdata nodes can get big, and since they're buffered,\n // we can get here under normal conditions.\n // Avoid issues by emitting the text node now,\n // so at least it won't get any bigger.\n switch (buffers[i]) {\n case 'textNode':\n closeText(parser)\n break\n\n case 'cdata':\n emitNode(parser, 'oncdata', parser.cdata)\n parser.cdata = ''\n break\n\n case 'script':\n emitNode(parser, 'onscript', parser.script)\n parser.script = ''\n break\n\n default:\n error(parser, 'Max buffer length exceeded: ' + buffers[i])\n }\n }\n maxActual = Math.max(maxActual, len)\n }\n // schedule the next check for the earliest possible buffer overrun.\n var m = sax.MAX_BUFFER_LENGTH - maxActual\n parser.bufferCheckPosition = m + parser.position\n }\n\n function clearBuffers(parser) {\n for (var i = 0, l = buffers.length; i < l; i++) {\n parser[buffers[i]] = ''\n }\n }\n\n function flushBuffers(parser) {\n closeText(parser)\n if (parser.cdata !== '') {\n emitNode(parser, 'oncdata', parser.cdata)\n parser.cdata = ''\n }\n if (parser.script !== '') {\n emitNode(parser, 'onscript', parser.script)\n parser.script = ''\n }\n }\n\n SAXParser.prototype = {\n end: function () {\n end(this)\n },\n write: write,\n resume: function () {\n this.error = null\n return this\n },\n close: function () {\n return this.write(null)\n },\n flush: function () {\n flushBuffers(this)\n },\n }\n\n var Stream\n try {\n Stream = require('stream').Stream\n } catch (ex) {\n Stream = function () {}\n }\n if (!Stream) Stream = function () {}\n\n var streamWraps = sax.EVENTS.filter(function (ev) {\n return ev !== 'error' && ev !== 'end'\n })\n\n function createStream(strict, opt) {\n return new SAXStream(strict, opt)\n }\n\n function determineBufferEncoding(data, isEnd) {\n // BOM-based detection is the most reliable signal when present.\n if (data.length >= 2) {\n if (data[0] === 0xff && data[1] === 0xfe) {\n return 'utf-16le'\n }\n\n if (data[0] === 0xfe && data[1] === 0xff) {\n return 'utf-16be'\n }\n }\n\n if (data.length >= 3 && data[0] === 0xef && data[1] === 0xbb && data[2] === 0xbf) {\n return 'utf8'\n }\n\n if (data.length >= 4) {\n // XML documents without a BOM still start with \"<?xml\", which is enough\n // to distinguish UTF-16LE/BE from UTF-8 by looking at the zero bytes.\n if (data[0] === 0x3c && data[1] === 0x00 && data[2] === 0x3f && data[3] === 0x00) {\n return 'utf-16le'\n }\n\n if (data[0] === 0x00 && data[1] === 0x3c && data[2] === 0x00 && data[3] === 0x3f) {\n return 'utf-16be'\n }\n\n return 'utf8'\n }\n\n return isEnd ? 'utf8' : null\n }\n\n function SAXStream(strict, opt) {\n if (!(this instanceof SAXStream)) {\n return new SAXStream(strict, opt)\n }\n\n Stream.apply(this)\n\n this._parser = new SAXParser(strict, opt)\n this.writable = true\n this.readable = true\n\n var me = this\n\n this._parser.onend = function () {\n me.emit('end')\n }\n\n this._parser.onerror = function (er) {\n me.emit('error', er)\n\n // if didn't throw, then means error was handled.\n // go ahead and clear error, so we can write again.\n me._parser.error = null\n }\n\n this._decoder = null\n this._decoderBuffer = null\n streamWraps.forEach(function (ev) {\n Object.defineProperty(me, 'on' + ev, {\n get: function () {\n return me._parser['on' + ev]\n },\n set: function (h) {\n if (!h) {\n me.removeAllListeners(ev)\n me._parser['on' + ev] = h\n return h\n }\n me.on(ev, h)\n },\n enumerable: true,\n configurable: false,\n })\n })\n }\n\n SAXStream.prototype = Object.create(Stream.prototype, {\n constructor: {\n value: SAXStream,\n },\n })\n\n SAXStream.prototype._decodeBuffer = function (data, isEnd) {\n if (this._decoderBuffer) {\n // Keep incomplete leading bytes until we have enough data to infer the\n // stream encoding, then decode the buffered prefix together with the next chunk.\n data = Buffer.concat([this._decoderBuffer, data])\n this._decoderBuffer = null\n }\n\n if (!this._decoder) {\n var encoding = determineBufferEncoding(data, isEnd)\n if (!encoding) {\n // A very short first chunk may not contain enough bytes to detect the\n // encoding yet, so defer decoding until the next write/end call.\n this._decoderBuffer = data\n return ''\n }\n\n // Store the detected transport encoding so strict mode can compare it\n // with the optional encoding declared in the XML prolog later on.\n this._parser.encoding = encoding\n this._decoder = new TextDecoder(encoding)\n }\n\n return this._decoder.decode(data, { stream: !isEnd })\n }\n\n SAXStream.prototype.write = function (data) {\n if (\n typeof Buffer === 'function' &&\n typeof Buffer.isBuffer === 'function' &&\n Buffer.isBuffer(data)\n ) {\n data = this._decodeBuffer(data, false)\n } else if (this._decoderBuffer) {\n // Flush any buffered binary prefix before handling a string chunk.\n // This only matters if the caller mixes Buffer and string writes (used in test).\n var remaining = this._decodeBuffer(Buffer.alloc(0), true)\n if (remaining) {\n this._parser.write(remaining)\n this.emit('data', remaining)\n }\n }\n\n this._parser.write(data.toString())\n this.emit('data', data)\n return true\n }\n\n SAXStream.prototype.end = function (chunk) {\n if (chunk && chunk.length) {\n this.write(chunk)\n }\n // Flush any remaining decoded data from the TextDecoder\n if (this._decoderBuffer) {\n var finalChunk = this._decodeBuffer(Buffer.alloc(0), true)\n if (finalChunk) {\n this._parser.write(finalChunk)\n this.emit('data', finalChunk)\n }\n } else if (this._decoder) {\n var remaining = this._decoder.decode()\n if (remaining) {\n this._parser.write(remaining)\n this.emit('data', remaining)\n }\n }\n this._parser.end()\n return true\n }\n\n SAXStream.prototype.on = function (ev, handler) {\n var me = this\n if (!me._parser['on' + ev] && streamWraps.indexOf(ev) !== -1) {\n me._parser['on' + ev] = function () {\n var args =\n arguments.length === 1 ?\n [arguments[0]]\n : Array.apply(null, arguments)\n args.splice(0, 0, ev)\n me.emit.apply(me, args)\n }\n }\n\n return Stream.prototype.on.call(me, ev, handler)\n }\n\n // this really needs to be replaced with character classes.\n // XML allows all manner of ridiculous numbers and digits.\n var CDATA = '[CDATA['\n var DOCTYPE = 'DOCTYPE'\n var XML_NAMESPACE = 'http://www.w3.org/XML/1998/namespace'\n var XMLNS_NAMESPACE = 'http://www.w3.org/2000/xmlns/'\n var rootNS = { xml: XML_NAMESPACE, xmlns: XMLNS_NAMESPACE }\n\n // http://www.w3.org/TR/REC-xml/#NT-NameStartChar\n // This implementation works on strings, a single character at a time\n // as such, it cannot ever support astral-plane characters (10000-EFFFF)\n // without a significant breaking change to either this parser, or the\n // JavaScript language. Implementation of an emoji-capable xml parser\n // is left as an exercise for the reader.\n var nameStart =\n /[:_A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]/\n\n var nameBody =\n /[:_A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\u00B7\\u0300-\\u036F\\u203F-\\u2040.\\d-]/\n\n var entityStart =\n /[#:_A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]/\n var entityBody =\n /[#:_A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\u00B7\\u0300-\\u036F\\u203F-\\u2040.\\d-]/\n\n function isWhitespace(c) {\n return c === ' ' || c === '\\n' || c === '\\r' || c === '\\t'\n }\n\n function isQuote(c) {\n return c === '\"' || c === \"'\"\n }\n\n function isAttribEnd(c) {\n return c === '>' || isWhitespace(c)\n }\n\n function isMatch(regex, c) {\n return regex.test(c)\n }\n\n function notMatch(regex, c) {\n return !isMatch(regex, c)\n }\n\n var S = 0\n sax.STATE = {\n BEGIN: S++, // leading byte order mark or whitespace\n BEGIN_WHITESPACE: S++, // leading whitespace\n TEXT: S++, // general stuff\n TEXT_ENTITY: S++, // & and such.\n OPEN_WAKA: S++, // <\n SGML_DECL: S++, // <!BLARG\n SGML_DECL_QUOTED: S++, // <!BLARG foo \"bar\n DOCTYPE: S++, // <!DOCTYPE\n DOCTYPE_QUOTED: S++, // <!DOCTYPE \"//blah\n DOCTYPE_DTD: S++, // <!DOCTYPE \"//blah\" [ ...\n DOCTYPE_DTD_QUOTED: S++, // <!DOCTYPE \"//blah\" [ \"foo\n COMMENT_STARTING: S++, // <!-\n COMMENT: S++, // <!--\n COMMENT_ENDING: S++, // <!-- blah -\n COMMENT_ENDED: S++, // <!-- blah --\n CDATA: S++, // <![CDATA[ something\n CDATA_ENDING: S++, // ]\n CDATA_ENDING_2: S++, // ]]\n PROC_INST: S++, // <?hi\n PROC_INST_BODY: S++, // <?hi there\n PROC_INST_ENDING: S++, // <?hi \"there\" ?\n OPEN_TAG: S++, // <strong\n OPEN_TAG_SLASH: S++, // <strong /\n ATTRIB: S++, // <a\n ATTRIB_NAME: S++, // <a foo\n ATTRIB_NAME_SAW_WHITE: S++, // <a foo _\n ATTRIB_VALUE: S++, // <a foo=\n ATTRIB_VALUE_QUOTED: S++, // <a foo=\"bar\n ATTRIB_VALUE_CLOSED: S++, // <a foo=\"bar\"\n ATTRIB_VALUE_UNQUOTED: S++, // <a foo=bar\n ATTRIB_VALUE_ENTITY_Q: S++, // <foo bar=\""\"\n ATTRIB_VALUE_ENTITY_U: S++, // <foo bar="\n CLOSE_TAG: S++, // </a\n CLOSE_TAG_SAW_WHITE: S++, // </a >\n SCRIPT: S++, // <script> ...\n SCRIPT_ENDING: S++, // <script> ... <\n }\n\n sax.XML_ENTITIES = {\n amp: '&',\n gt: '>',\n lt: '<',\n quot: '\"',\n apos: \"'\",\n }\n\n sax.ENTITIES = {\n amp: '&',\n gt: '>',\n lt: '<',\n quot: '\"',\n apos: \"'\",\n AElig: 198,\n Aacute: 193,\n Acirc: 194,\n Agrave: 192,\n Aring: 197,\n Atilde: 195,\n Auml: 196,\n Ccedil: 199,\n ETH: 208,\n Eacute: 201,\n Ecirc: 202,\n Egrave: 200,\n Euml: 203,\n Iacute: 205,\n Icirc: 206,\n Igrave: 204,\n Iuml: 207,\n Ntilde: 209,\n Oacute: 211,\n Ocirc: 212,\n Ograve: 210,\n Oslash: 216,\n Otilde: 213,\n Ouml: 214,\n THORN: 222,\n Uacute: 218,\n Ucirc: 219,\n Ugrave: 217,\n Uuml: 220,\n Yacute: 221,\n aacute: 225,\n acirc: 226,\n aelig: 230,\n agrave: 224,\n aring: 229,\n atilde: 227,\n auml: 228,\n ccedil: 231,\n eacute: 233,\n ecirc: 234,\n egrave: 232,\n eth: 240,\n euml: 235,\n iacute: 237,\n icirc: 238,\n igrave: 236,\n iuml: 239,\n ntilde: 241,\n oacute: 243,\n ocirc: 244,\n ograve: 242,\n oslash: 248,\n otilde: 245,\n ouml: 246,\n szlig: 223,\n thorn: 254,\n uacute: 250,\n ucirc: 251,\n ugrave: 249,\n uuml: 252,\n yacute: 253,\n yuml: 255,\n copy: 169,\n reg: 174,\n nbsp: 160,\n iexcl: 161,\n cent: 162,\n pound: 163,\n curren: 164,\n yen: 165,\n brvbar: 166,\n sect: 167,\n uml: 168,\n ordf: 170,\n laquo: 171,\n not: 172,\n shy: 173,\n macr: 175,\n deg: 176,\n plusmn: 177,\n sup1: 185,\n sup2: 178,\n sup3: 179,\n acute: 180,\n micro: 181,\n para: 182,\n middot: 183,\n cedil: 184,\n ordm: 186,\n raquo: 187,\n frac14: 188,\n frac12: 189,\n frac34: 190,\n iquest: 191,\n times: 215,\n divide: 247,\n OElig: 338,\n oelig: 339,\n Scaron: 352,\n scaron: 353,\n Yuml: 376,\n fnof: 402,\n circ: 710,\n tilde: 732,\n Alpha: 913,\n Beta: 914,\n Gamma: 915,\n Delta: 916,\n Epsilon: 917,\n Zeta: 918,\n Eta: 919,\n Theta: 920,\n Iota: 921,\n Kappa: 922,\n Lambda: 923,\n Mu: 924,\n Nu: 925,\n Xi: 926,\n Omicron: 927,\n Pi: 928,\n Rho: 929,\n Sigma: 931,\n Tau: 932,\n Upsilon: 933,\n Phi: 934,\n Chi: 935,\n Psi: 936,\n Omega: 937,\n alpha: 945,\n beta: 946,\n gamma: 947,\n delta: 948,\n epsilon: 949,\n zeta: 950,\n eta: 951,\n theta: 952,\n iota: 953,\n kappa: 954,\n lambda: 955,\n mu: 956,\n nu: 957,\n xi: 958,\n omicron: 959,\n pi: 960,\n rho: 961,\n sigmaf: 962,\n sigma: 963,\n tau: 964,\n upsilon: 965,\n phi: 966,\n chi: 967,\n psi: 968,\n omega: 969,\n thetasym: 977,\n upsih: 978,\n piv: 982,\n ensp: 8194,\n emsp: 8195,\n thinsp: 8201,\n zwnj: 8204,\n zwj: 8205,\n lrm: 8206,\n rlm: 8207,\n ndash: 8211,\n mdash: 8212,\n lsquo: 8216,\n rsquo: 8217,\n sbquo: 8218,\n ldquo: 8220,\n rdquo: 8221,\n bdquo: 8222,\n dagger: 8224,\n Dagger: 8225,\n bull: 8226,\n hellip: 8230,\n permil: 8240,\n prime: 8242,\n Prime: 8243,\n lsaquo: 8249,\n rsaquo: 8250,\n oline: 8254,\n frasl: 8260,\n euro: 8364,\n image: 8465,\n weierp: 8472,\n real: 8476,\n trade: 8482,\n alefsym: 8501,\n larr: 8592,\n uarr: 8593,\n rarr: 8594,\n darr: 8595,\n harr: 8596,\n crarr: 8629,\n lArr: 8656,\n uArr: 8657,\n rArr: 8658,\n dArr: 8659,\n hArr: 8660,\n forall: 8704,\n part: 8706,\n exist: 8707,\n empty: 8709,\n nabla: 8711,\n isin: 8712,\n notin: 8713,\n ni: 8715,\n prod: 8719,\n sum: 8721,\n minus: 8722,\n lowast: 8727,\n radic: 8730,\n prop: 8733,\n infin: 8734,\n ang: 8736,\n and: 8743,\n or: 8744,\n cap: 8745,\n cup: 8746,\n int: 8747,\n there4: 8756,\n sim: 8764,\n cong: 8773,\n asymp: 8776,\n ne: 8800,\n equiv: 8801,\n le: 8804,\n ge: 8805,\n sub: 8834,\n sup: 8835,\n nsub: 8836,\n sube: 8838,\n supe: 8839,\n oplus: 8853,\n otimes: 8855,\n perp: 8869,\n sdot: 8901,\n lceil: 8968,\n rceil: 8969,\n lfloor: 8970,\n rfloor: 8971,\n lang: 9001,\n rang: 9002,\n loz: 9674,\n spades: 9824,\n clubs: 9827,\n hearts: 9829,\n diams: 9830,\n }\n\n Object.keys(sax.ENTITIES).forEach(function (key) {\n var e = sax.ENTITIES[key]\n var s = typeof e === 'number' ? String.fromCharCode(e) : e\n sax.ENTITIES[key] = s\n })\n\n for (var s in sax.STATE) {\n sax.STATE[sax.STATE[s]] = s\n }\n\n // shorthand\n S = sax.STATE\n\n function emit(parser, event, data) {\n parser[event] && parser[event](data)\n }\n\n function getDeclaredEncoding(body) {\n var match = body && body.match(/(?:^|\\s)encoding\\s*=\\s*(['\"])([^'\"]+)\\1/i)\n return match ? match[2] : null\n }\n\n function normalizeEncodingName(encoding) {\n if (!encoding) {\n return null\n }\n\n return encoding.toLowerCase().replace(/[^a-z0-9]/g, '')\n }\n\n function encodingsMatch(detectedEncoding, declaredEncoding) {\n const detected = normalizeEncodingName(detectedEncoding)\n const declared = normalizeEncodingName(declaredEncoding)\n\n if (!detected || !declared) {\n return true\n }\n\n if (declared === 'utf16') {\n return detected === 'utf16le' || detected === 'utf16be'\n }\n\n return detected === declared\n }\n\n function validateXmlDeclarationEncoding(parser, data) {\n if (\n !parser.strict ||\n !parser.encoding ||\n !data ||\n data.name !== 'xml'\n ) {\n return\n }\n\n var declaredEncoding = getDeclaredEncoding(data.body)\n if (\n declaredEncoding &&\n !encodingsMatch(parser.encoding, declaredEncoding)\n ) {\n strictFail(\n parser,\n 'XML declaration encoding ' +\n declaredEncoding +\n ' does not match detected stream encoding ' +\n parser.encoding.toUpperCase()\n )\n }\n }\n\n function emitNode(parser, nodeType, data) {\n if (parser.textNode) closeText(parser)\n emit(parser, nodeType, data)\n }\n\n function closeText(parser) {\n parser.textNode = textopts(parser.opt, parser.textNode)\n if (parser.textNode) emit(parser, 'ontext', parser.textNode)\n parser.textNode = ''\n }\n\n function textopts(opt, text) {\n if (opt.trim) text = text.trim()\n if (opt.normalize) text = text.replace(/\\s+/g, ' ')\n return text\n }\n\n function error(parser, er) {\n closeText(parser)\n if (parser.trackPosition) {\n er +=\n '\\nLine: ' +\n parser.line +\n '\\nColumn: ' +\n parser.column +\n '\\nChar: ' +\n parser.c\n }\n er = new Error(er)\n parser.error = er\n emit(parser, 'onerror', er)\n return parser\n }\n\n function end(parser) {\n if (parser.sawRoot && !parser.closedRoot)\n strictFail(parser, 'Unclosed root tag')\n if (\n parser.state !== S.BEGIN &&\n parser.state !== S.BEGIN_WHITESPACE &&\n parser.state !== S.TEXT\n ) {\n error(parser, 'Unexpected end')\n }\n closeText(parser)\n parser.c = ''\n parser.closed = true\n emit(parser, 'onend')\n SAXParser.call(parser, parser.strict, parser.opt)\n return parser\n }\n\n function strictFail(parser, message) {\n if (typeof parser !== 'object' || !(parser instanceof SAXParser)) {\n throw new Error('bad call to strictFail')\n }\n if (parser.strict) {\n error(parser, message)\n }\n }\n\n function newTag(parser) {\n if (!parser.strict) parser.tagName = parser.tagName[parser.looseCase]()\n var parent = parser.tags[parser.tags.length - 1] || parser\n var tag = (parser.tag = { name: parser.tagName, attributes: {} })\n\n // will be overridden if tag contails an xmlns=\"foo\" or xmlns:foo=\"bar\"\n if (parser.opt.xmlns) {\n tag.ns = parent.ns\n }\n parser.attribList.length = 0\n emitNode(parser, 'onopentagstart', tag)\n }\n\n function qname(name, attribute) {\n var i = name.indexOf(':')\n var qualName = i < 0 ? ['', name] : name.split(':')\n var prefix = qualName[0]\n var local = qualName[1]\n\n // <x \"xmlns\"=\"http://foo\">\n if (attribute && name === 'xmlns') {\n prefix = 'xmlns'\n local = ''\n }\n\n return { prefix: prefix, local: local }\n }\n\n function attrib(parser) {\n if (!parser.strict) {\n parser.attribName = parser.attribName[parser.looseCase]()\n }\n\n if (\n parser.attribList.indexOf(parser.attribName) !== -1 ||\n parser.tag.attributes.hasOwnProperty(parser.attribName)\n ) {\n parser.attribName = parser.attribValue = ''\n return\n }\n\n if (parser.opt.xmlns) {\n var qn = qname(parser.attribName, true)\n var prefix = qn.prefix\n var local = qn.local\n\n if (prefix === 'xmlns') {\n // namespace binding attribute. push the binding into scope\n if (local === 'xml' && parser.attribValue !== XML_NAMESPACE) {\n strictFail(\n parser,\n 'xml: prefix must be bound to ' +\n XML_NAMESPACE +\n '\\n' +\n 'Actual: ' +\n parser.attribValue\n )\n } else if (\n local === 'xmlns' &&\n parser.attribValue !== XMLNS_NAMESPACE\n ) {\n strictFail(\n parser,\n 'xmlns: prefix must be bound to ' +\n XMLNS_NAMESPACE +\n '\\n' +\n 'Actual: ' +\n parser.attribValue\n )\n } else {\n var tag = parser.tag\n var parent = parser.tags[parser.tags.length - 1] || parser\n if (tag.ns === parent.ns) {\n tag.ns = Object.create(parent.ns)\n }\n tag.ns[local] = parser.attribValue\n }\n }\n\n // defer onattribute events until all attributes have been seen\n // so any new bindings can take effect. preserve attribute order\n // so deferred events can be emitted in document order\n parser.attribList.push([parser.attribName, parser.attribValue])\n } else {\n // in non-xmlns mode, we can emit the event right away\n parser.tag.attributes[parser.attribName] = parser.attribValue\n emitNode(parser, 'onattribute', {\n name: parser.attribName,\n value: parser.attribValue,\n })\n }\n\n parser.attribName = parser.attribValue = ''\n }\n\n function openTag(parser, selfClosing) {\n if (parser.opt.xmlns) {\n // emit namespace binding events\n var tag = parser.tag\n\n // add namespace info to tag\n var qn = qname(parser.tagName)\n tag.prefix = qn.prefix\n tag.local = qn.local\n tag.uri = tag.ns[qn.prefix] || ''\n\n if (tag.prefix && !tag.uri) {\n strictFail(\n parser,\n 'Unbound namespace prefix: ' + JSON.stringify(parser.tagName)\n )\n tag.uri = qn.prefix\n }\n\n var parent = parser.tags[parser.tags.length - 1] || parser\n if (tag.ns && parent.ns !== tag.ns) {\n Object.keys(tag.ns).forEach(function (p) {\n emitNode(parser, 'onopennamespace', {\n prefix: p,\n uri: tag.ns[p],\n })\n })\n }\n\n // handle deferred onattribute events\n // Note: do not apply default ns to attributes:\n // http://www.w3.org/TR/REC-xml-names/#defaulting\n for (var i = 0, l = parser.attribList.length; i < l; i++) {\n var nv = parser.attribList[i]\n var name = nv[0]\n var value = nv[1]\n var qualName = qname(name, true)\n var prefix = qualName.prefix\n var local = qualName.local\n var uri = prefix === '' ? '' : tag.ns[prefix] || ''\n var a = {\n name: name,\n value: value,\n prefix: prefix,\n local: local,\n uri: uri,\n }\n\n // if there's any attributes with an undefined namespace,\n // then fail on them now.\n if (prefix && prefix !== 'xmlns' && !uri) {\n strictFail(\n parser,\n 'Unbound namespace prefix: ' + JSON.stringify(prefix)\n )\n a.uri = prefix\n }\n parser.tag.attributes[name] = a\n emitNode(parser, 'onattribute', a)\n }\n parser.attribList.length = 0\n }\n\n parser.tag.isSelfClosing = !!selfClosing\n\n // process the tag\n parser.sawRoot = true\n parser.tags.push(parser.tag)\n emitNode(parser, 'onopentag', parser.tag)\n if (!selfClosing) {\n // special case for <script> in non-strict mode.\n if (!parser.noscript && parser.tagName.toLowerCase() === 'script') {\n parser.state = S.SCRIPT\n } else {\n parser.state = S.TEXT\n }\n parser.tag = null\n parser.tagName = ''\n }\n parser.attribName = parser.attribValue = ''\n parser.attribList.length = 0\n }\n\n function closeTag(parser) {\n if (!parser.tagName) {\n strictFail(parser, 'Weird empty close tag.')\n parser.textNode += '</>'\n parser.state = S.TEXT\n return\n }\n\n if (parser.script) {\n if (parser.tagName !== 'script') {\n parser.script += '</' + parser.tagName + '>'\n parser.tagName = ''\n parser.state = S.SCRIPT\n return\n }\n emitNode(parser, 'onscript', parser.script)\n parser.script = ''\n }\n\n // first make sure that the closing tag actually exists.\n // <a><b></c></b></a> will close everything, otherwise.\n var t = parser.tags.length\n var tagName = parser.tagName\n if (!parser.strict) {\n tagName = tagName[parser.looseCase]()\n }\n var closeTo = tagName\n while (t--) {\n var close = parser.tags[t]\n if (close.name !== closeTo) {\n // fail the first time in strict mode\n strictFail(parser, 'Unexpected close tag')\n } else {\n break\n }\n }\n\n // didn't find it. we already failed for strict, so just abort.\n if (t < 0) {\n strictFail(parser, 'Unmatched closing tag: ' + parser.tagName)\n parser.textNode += '</' + parser.tagName + '>'\n parser.state = S.TEXT\n return\n }\n parser.tagName = tagName\n var s = parser.tags.length\n while (s-- > t) {\n var tag = (parser.tag = parser.tags.pop())\n parser.tagName = parser.tag.name\n emitNode(parser, 'onclosetag', parser.tagName)\n\n var x = {}\n for (var i in tag.ns) {\n x[i] = tag.ns[i]\n }\n\n var parent = parser.tags[parser.tags.length - 1] || parser\n if (parser.opt.xmlns && tag.ns !== parent.ns) {\n // remove namespace bindings introduced by tag\n Object.keys(tag.ns).forEach(function (p) {\n var n = tag.ns[p]\n emitNode(parser, 'onclosenamespace', { prefix: p, uri: n })\n })\n }\n }\n if (t === 0) parser.closedRoot = true\n parser.tagName = parser.attribValue = parser.attribName = ''\n parser.attribList.length = 0\n parser.state = S.TEXT\n }\n\n function parseEntity(parser) {\n var entity = parser.entity\n var entityLC = entity.toLowerCase()\n var num\n var numStr = ''\n\n if (parser.ENTITIES[entity]) {\n return parser.ENTITIES[entity]\n }\n if (parser.ENTITIES[entityLC]) {\n return parser.ENTITIES[entityLC]\n }\n entity = entityLC\n if (entity.charAt(0) === '#') {\n if (entity.charAt(1) === 'x') {\n entity = entity.slice(2)\n num = parseInt(entity, 16)\n numStr = num.toString(16)\n } else {\n entity = entity.slice(1)\n num = parseInt(entity, 10)\n numStr = num.toString(10)\n }\n }\n entity = entity.replace(/^0+/, '')\n if (\n isNaN(num) ||\n numStr.toLowerCase() !== entity ||\n num < 0 ||\n num > 0x10ffff\n ) {\n strictFail(parser, 'Invalid character entity')\n return '&' + parser.entity + ';'\n }\n\n return String.fromCodePoint(num)\n }\n\n function beginWhiteSpace(parser, c) {\n if (c === '<') {\n parser.state = S.OPEN_WAKA\n parser.startTagPosition = parser.position\n } else if (!isWhitespace(c)) {\n // have to process this as a text node.\n // weird, but happens.\n strictFail(parser, 'Non-whitespace before first tag.')\n parser.textNode = c\n parser.state = S.TEXT\n }\n }\n\n function charAt(chunk, i) {\n var result = ''\n if (i < chunk.length) {\n result = chunk.charAt(i)\n }\n return result\n }\n\n function write(chunk) {\n var parser = this\n if (this.error) {\n throw this.error\n }\n if (parser.closed) {\n return error(\n parser,\n 'Cannot write after close. Assign an onready handler.'\n )\n }\n if (chunk === null) {\n return end(parser)\n }\n if (typeof chunk === 'object') {\n chunk = chunk.toString()\n }\n var i = 0\n var c = ''\n while (true) {\n c = charAt(chunk, i++)\n parser.c = c\n\n if (!c) {\n break\n }\n\n if (parser.trackPosition) {\n parser.position++\n if (c === '\\n') {\n parser.line++\n parser.column = 0\n } else {\n parser.column++\n }\n }\n\n switch (parser.state) {\n case S.BEGIN:\n parser.state = S.BEGIN_WHITESPACE\n if (c === '\\uFEFF') {\n continue\n }\n beginWhiteSpace(parser, c)\n continue\n\n case S.BEGIN_WHITESPACE:\n beginWhiteSpace(parser, c)\n continue\n\n case S.TEXT:\n if (parser.sawRoot && !parser.closedRoot) {\n var starti = i - 1\n while (c && c !== '<' && c !== '&') {\n c = charAt(chunk, i++)\n if (c && parser.trackPosition) {\n parser.position++\n if (c === '\\n') {\n parser.line++\n parser.column = 0\n } else {\n parser.column++\n }\n }\n }\n parser.textNode += chunk.substring(starti, i - 1)\n }\n if (\n c === '<' &&\n !(parser.sawRoot && parser.closedRoot && !parser.strict)\n ) {\n parser.state = S.OPEN_WAKA\n parser.startTagPosition = parser.position\n } else {\n if (\n !isWhitespace(c) &&\n (!parser.sawRoot || parser.closedRoot)\n ) {\n strictFail(parser, 'Text data outside of root node.')\n }\n if (c === '&') {\n parser.state = S.TEXT_ENTITY\n } else {\n parser.textNode += c\n }\n }\n continue\n\n case S.SCRIPT:\n // only non-strict\n if (c === '<') {\n parser.state = S.SCRIPT_ENDING\n } else {\n parser.script += c\n }\n continue\n\n case S.SCRIPT_ENDING:\n if (c === '/') {\n parser.state = S.CLOSE_TAG\n } else {\n parser.script += '<' + c\n parser.state = S.SCRIPT\n }\n continue\n\n case S.OPEN_WAKA:\n // either a /, ?, !, or text is coming next.\n if (c === '!') {\n parser.state = S.SGML_DECL\n parser.sgmlDecl = ''\n } else if (isWhitespace(c)) {\n // wait for it...\n } else if (isMatch(nameStart, c)) {\n parser.state = S.OPEN_TAG\n parser.tagName = c\n } else if (c === '/') {\n parser.state = S.CLOSE_TAG\n parser.tagName = ''\n } else if (c === '?') {\n parser.state = S.PROC_INST\n parser.procInstName = parser.procInstBody = ''\n } else {\n strictFail(parser, 'Unencoded <')\n // if there was some whitespace, then add that in.\n if (parser.startTagPosition + 1 < parser.position) {\n var pad = parser.position - parser.startTagPosition\n c = new Array(pad).join(' ') + c\n }\n parser.textNode += '<' + c\n parser.state = S.TEXT\n }\n continue\n\n case S.SGML_DECL:\n if (parser.sgmlDecl + c === '--') {\n parser.state = S.COMMENT\n parser.comment = ''\n parser.sgmlDecl = ''\n continue\n }\n\n if (\n parser.doctype &&\n parser.doctype !== true &&\n parser.sgmlDecl\n ) {\n parser.state = S.DOCTYPE_DTD\n parser.doctype += '<!' + parser.sgmlDecl + c\n parser.sgmlDecl = ''\n } else if ((parser.sgmlDecl + c).toUpperCase() === CDATA) {\n emitNode(parser, 'onopencdata')\n parser.state = S.CDATA\n parser.sgmlDecl = ''\n parser.cdata = ''\n } else if ((parser.sgmlDecl + c).toUpperCase() === DOCTYPE) {\n parser.state = S.DOCTYPE\n if (parser.doctype || parser.sawRoot) {\n strictFail(\n parser,\n 'Inappropriately located doctype declaration'\n )\n }\n parser.doctype = ''\n parser.sgmlDecl = ''\n } else if (c === '>') {\n emitNode(parser, 'onsgmldeclaration', parser.sgmlDecl)\n parser.sgmlDecl = ''\n parser.state = S.TEXT\n } else if (isQuote(c)) {\n parser.state = S.SGML_DECL_QUOTED\n parser.sgmlDecl += c\n } else {\n parser.sgmlDecl += c\n }\n continue\n\n case S.SGML_DECL_QUOTED:\n if (c === parser.q) {\n parser.state = S.SGML_DECL\n parser.q = ''\n }\n parser.sgmlDecl += c\n continue\n\n case S.DOCTYPE:\n if (c === '>') {\n parser.state = S.TEXT\n emitNode(parser, 'ondoctype', parser.doctype)\n parser.doctype = true // just remember that we saw it.\n } else {\n parser.doctype += c\n if (c === '[') {\n parser.state = S.DOCTYPE_DTD\n } else if (isQuote(c)) {\n parser.state = S.DOCTYPE_QUOTED\n parser.q = c\n }\n }\n continue\n\n case S.DOCTYPE_QUOTED:\n parser.doctype += c\n if (c === parser.q) {\n parser.q = ''\n parser.state = S.DOCTYPE\n }\n continue\n\n case S.DOCTYPE_DTD:\n if (c === ']') {\n parser.doctype += c\n parser.state = S.DOCTYPE\n } else if (c === '<') {\n parser.state = S.OPEN_WAKA\n parser.startTagPosition = parser.position\n } else if (isQuote(c)) {\n parser.doctype += c\n parser.state = S.DOCTYPE_DTD_QUOTED\n parser.q = c\n } else {\n parser.doctype += c\n }\n continue\n\n case S.DOCTYPE_DTD_QUOTED:\n parser.doctype += c\n if (c === parser.q) {\n parser.state = S.DOCTYPE_DTD\n parser.q = ''\n }\n continue\n\n case S.COMMENT:\n if (c === '-') {\n parser.state = S.COMMENT_ENDING\n } else {\n parser.comment += c\n }\n continue\n\n case S.COMMENT_ENDING:\n if (c === '-') {\n parser.state = S.COMMENT_ENDED\n parser.comment = textopts(parser.opt, parser.comment)\n if (parser.comment) {\n emitNode(parser, 'oncomment', parser.comment)\n }\n parser.comment = ''\n } else {\n parser.comment += '-' + c\n parser.state = S.COMMENT\n }\n continue\n\n case S.COMMENT_ENDED:\n if (c !== '>') {\n strictFail(parser, 'Malformed comment')\n // allow <!-- blah -- bloo --> in non-strict mode,\n // which is a comment of \" blah -- bloo \"\n parser.comment += '--' + c\n parser.state = S.COMMENT\n } else if (parser.doctype && parser.doctype !== true) {\n parser.state = S.DOCTYPE_DTD\n } else {\n parser.state = S.TEXT\n }\n continue\n\n case S.CDATA:\n var starti = i - 1\n while (c && c !== ']') {\n c = charAt(chunk, i++)\n if (c && parser.trackPosition) {\n parser.position++\n if (c === '\\n') {\n parser.line++\n parser.column = 0\n } else {\n parser.column++\n }\n }\n }\n parser.cdata += chunk.substring(starti, i - 1)\n if (c === ']') {\n parser.state = S.CDATA_ENDING\n }\n continue\n\n case S.CDATA_ENDING:\n if (c === ']') {\n parser.state = S.CDATA_ENDING_2\n } else {\n parser.cdata += ']' + c\n parser.state = S.CDATA\n }\n continue\n\n case S.CDATA_ENDING_2:\n if (c === '>') {\n if (parser.cdata) {\n emitNode(parser, 'oncdata', parser.cdata)\n }\n emitNode(parser, 'onclosecdata')\n parser.cdata = ''\n parser.state = S.TEXT\n } else if (c === ']') {\n parser.cdata += ']'\n } else {\n parser.cdata += ']]' + c\n parser.state = S.CDATA\n }\n continue\n\n case S.PROC_INST:\n if (c === '?') {\n parser.state = S.PROC_INST_ENDING\n } else if (isWhitespace(c)) {\n parser.state = S.PROC_INST_BODY\n } else {\n parser.procInstName += c\n }\n continue\n\n case S.PROC_INST_BODY:\n if (!parser.procInstBody && isWhitespace(c)) {\n continue\n } else if (c === '?') {\n parser.state = S.PROC_INST_ENDING\n } else {\n parser.procInstBody += c\n }\n continue\n\n case S.PROC_INST_ENDING:\n if (c === '>') {\n const procInstEndData = {\n name: parser.procInstName,\n body: parser.procInstBody,\n }\n validateXmlDeclarationEncoding(parser, procInstEndData)\n emitNode(parser, 'onprocessinginstruction', procInstEndData)\n parser.procInstName = parser.procInstBody = ''\n parser.state = S.TEXT\n } else {\n parser.procInstBody += '?' + c\n parser.state = S.PROC_INST_BODY\n }\n continue\n\n case S.OPEN_TAG:\n if (isMatch(nameBody, c)) {\n parser.tagName += c\n } else {\n newTag(parser)\n if (c === '>') {\n openTag(parser)\n } else if (c === '/') {\n parser.state = S.OPEN_TAG_SLASH\n } else {\n if (!isWhitespace(c)) {\n strictFail(parser, 'Invalid character in tag name')\n }\n parser.state = S.ATTRIB\n }\n }\n continue\n\n case S.OPEN_TAG_SLASH:\n if (c === '>') {\n openTag(parser, true)\n closeTag(parser)\n } else {\n strictFail(\n parser,\n 'Forward-slash in opening tag not followed by >'\n )\n parser.state = S.ATTRIB\n }\n continue\n\n case S.ATTRIB:\n // haven't read the attribute name yet.\n if (isWhitespace(c)) {\n continue\n } else if (c === '>') {\n openTag(parser)\n } else if (c === '/') {\n parser.state = S.OPEN_TAG_SLASH\n } else if (isMatch(nameStart, c)) {\n parser.attribName = c\n parser.attribValue = ''\n parser.state = S.ATTRIB_NAME\n } else {\n strictFail(parser, 'Invalid attribute name')\n }\n continue\n\n case S.ATTRIB_NAME:\n if (c === '=') {\n parser.state = S.ATTRIB_VALUE\n } else if (c === '>') {\n strictFail(parser, 'Attribute without value')\n parser.attribValue = parser.attribName\n attrib(parser)\n openTag(parser)\n } else if (isWhitespace(c)) {\n parser.state = S.ATTRIB_NAME_SAW_WHITE\n } else if (isMatch(nameBody, c)) {\n parser.attribName += c\n } else {\n strictFail(parser, 'Invalid attribute name')\n }\n continue\n\n case S.ATTRIB_NAME_SAW_WHITE:\n if (c === '=') {\n parser.state = S.ATTRIB_VALUE\n } else if (isWhitespace(c)) {\n continue\n } else {\n strictFail(parser, 'Attribute without value')\n parser.tag.attributes[parser.attribName] = ''\n parser.attribValue = ''\n emitNode(parser, 'onattribute', {\n name: parser.attribName,\n value: '',\n })\n parser.attribName = ''\n if (c === '>') {\n openTag(parser)\n } else if (isMatch(nameStart, c)) {\n parser.attribName = c\n parser.state = S.ATTRIB_NAME\n } else {\n strictFail(parser, 'Invalid attribute name')\n parser.state = S.ATTRIB\n }\n }\n continue\n\n case S.ATTRIB_VALUE:\n if (isWhitespace(c)) {\n continue\n } else if (isQuote(c)) {\n parser.q = c\n parser.state = S.ATTRIB_VALUE_QUOTED\n } else {\n if (!parser.opt.unquotedAttributeValues) {\n error(parser, 'Unquoted attribute value')\n }\n parser.state = S.ATTRIB_VALUE_UNQUOTED\n parser.attribValue = c\n }\n continue\n\n case S.ATTRIB_VALUE_QUOTED:\n if (c !== parser.q) {\n if (c === '&') {\n parser.state = S.ATTRIB_VALUE_ENTITY_Q\n } else {\n parser.attribValue += c\n }\n continue\n }\n attrib(parser)\n parser.q = ''\n parser.state = S.ATTRIB_VALUE_CLOSED\n continue\n\n case S.ATTRIB_VALUE_CLOSED:\n if (isWhitespace(c)) {\n parser.state = S.ATTRIB\n } else if (c === '>') {\n openTag(parser)\n } else if (c === '/') {\n parser.state = S.OPEN_TAG_SLASH\n } else if (isMatch(nameStart, c)) {\n strictFail(parser, 'No whitespace between attributes')\n parser.attribName = c\n parser.attribValue = ''\n parser.state = S.ATTRIB_NAME\n } else {\n strictFail(parser, 'Invalid attribute name')\n }\n continue\n\n case S.ATTRIB_VALUE_UNQUOTED:\n if (!isAttribEnd(c)) {\n if (c === '&') {\n parser.state = S.ATTRIB_VALUE_ENTITY_U\n } else {\n parser.attribValue += c\n }\n continue\n }\n attrib(parser)\n if (c === '>') {\n openTag(parser)\n } else {\n parser.state = S.ATTRIB\n }\n continue\n\n case S.CLOSE_TAG:\n if (!parser.tagName) {\n if (isWhitespace(c)) {\n continue\n } else if (notMatch(nameStart, c)) {\n if (parser.script) {\n parser.script += '</' + c\n parser.state = S.SCRIPT\n } else {\n strictFail(parser, 'Invalid tagname in closing tag.')\n }\n } else {\n parser.tagName = c\n }\n } else if (c === '>') {\n closeTag(parser)\n } else if (isMatch(nameBody, c)) {\n parser.tagName += c\n } else if (parser.script) {\n parser.script += '</' + parser.tagName + c\n parser.tagName = ''\n parser.state = S.SCRIPT\n } else {\n if (!isWhitespace(c)) {\n strictFail(parser, 'Invalid tagname in closing tag')\n }\n parser.state = S.CLOSE_TAG_SAW_WHITE\n }\n continue\n\n case S.CLOSE_TAG_SAW_WHITE:\n if (isWhitespace(c)) {\n continue\n }\n if (c === '>') {\n closeTag(parser)\n } else {\n strictFail(parser, 'Invalid characters in closing tag')\n }\n continue\n\n case S.TEXT_ENTITY:\n case S.ATTRIB_VALUE_ENTITY_Q:\n case S.ATTRIB_VALUE_ENTITY_U:\n var returnState\n var buffer\n switch (parser.state) {\n case S.TEXT_ENTITY:\n returnState = S.TEXT\n buffer = 'textNode'\n break\n\n case S.ATTRIB_VALUE_ENTITY_Q:\n returnState = S.ATTRIB_VALUE_QUOTED\n buffer = 'attribValue'\n break\n\n case S.ATTRIB_VALUE_ENTITY_U:\n returnState = S.ATTRIB_VALUE_UNQUOTED\n buffer = 'attribValue'\n break\n }\n\n if (c === ';') {\n var parsedEntity = parseEntity(parser)\n if (\n parser.opt.unparsedEntities &&\n !Object.values(sax.XML_ENTITIES).includes(parsedEntity)\n ) {\n if ((parser.entityCount += 1) > parser.opt.maxEntityCount) {\n error(\n parser,\n 'Parsed entity count exceeds max entity count'\n )\n }\n\n if ((parser.entityDepth += 1) > parser.opt.maxEntityDepth) {\n error(\n parser,\n 'Parsed entity depth exceeds max entity depth'\n )\n }\n\n parser.entity = ''\n parser.state = returnState\n parser.write(parsedEntity)\n parser.entityDepth -= 1\n } else {\n parser[buffer] += parsedEntity\n parser.entity = ''\n parser.state = returnState\n }\n } else if (\n isMatch(parser.entity.length ? entityBody : entityStart, c)\n ) {\n parser.entity += c\n } else {\n strictFail(parser, 'Invalid character in entity name')\n parser[buffer] += '&' + parser.entity + c\n parser.entity = ''\n parser.state = returnState\n }\n\n continue\n\n default: /* istanbul ignore next */ {\n throw new Error(parser, 'Unknown state: ' + parser.state)\n }\n }\n } // while\n\n if (parser.position >= parser.bufferCheckPosition) {\n checkBufferLength(parser)\n }\n return parser\n }\n\n /*! http://mths.be/fromcodepoint v0.1.0 by @mathias */\n /* istanbul ignore next */\n if (!String.fromCodePoint) {\n ;(function () {\n var stringFromCharCode = String.fromCharCode\n var floor = Math.floor\n var fromCodePoint = function () {\n var MAX_SIZE = 0x4000\n var codeUnits = []\n var highSurrogate\n var lowSurrogate\n var index = -1\n var length = arguments.length\n if (!length) {\n return ''\n }\n var result = ''\n while (++index < length) {\n var codePoint = Number(arguments[index])\n if (\n !isFinite(codePoint) || // `NaN`, `+Infinity`, or `-Infinity`\n codePoint < 0 || // not a valid Unicode code point\n codePoint > 0x10ffff || // not a valid Unicode code point\n floor(codePoint) !== codePoint // not an integer\n ) {\n throw RangeError('Invalid code point: ' + codePoint)\n }\n if (codePoint <= 0xffff) {\n // BMP code point\n codeUnits.push(codePoint)\n } else {\n // Astral code point; split in surrogate halves\n // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\n codePoint -= 0x10000\n highSurrogate = (codePoint >> 10) + 0xd800\n lowSurrogate = (codePoint % 0x400) + 0xdc00\n codeUnits.push(highSurrogate, lowSurrogate)\n }\n if (index + 1 === length || codeUnits.length > MAX_SIZE) {\n result += stringFromCharCode.apply(null, codeUnits)\n codeUnits.length = 0\n }\n }\n return result\n }\n /* istanbul ignore next */\n if (Object.defineProperty) {\n Object.defineProperty(String, 'fromCodePoint', {\n value: fromCodePoint,\n configurable: true,\n writable: true,\n })\n } else {\n String.fromCodePoint = fromCodePoint\n }\n })()\n }\n})(typeof exports === 'undefined' ? (this.sax = {}) : exports)\n", "import * as sax from \"sax\"\nimport { newError } from \"./error\"\n\nexport class XElement {\n value = \"\"\n attributes: Record<string, string> | null = null\n isCData = false\n elements: Array<XElement> | null = null\n\n constructor(readonly name: string) {\n if (!name) {\n throw newError(\"Element name cannot be empty\", \"ERR_XML_ELEMENT_NAME_EMPTY\")\n }\n if (!isValidName(name)) {\n throw newError(`Invalid element name: ${name}`, \"ERR_XML_ELEMENT_INVALID_NAME\")\n }\n }\n\n attribute(name: string): string {\n const result = this.attributes === null ? null : this.attributes[name]\n if (result == null) {\n throw newError(`No attribute \"${name}\"`, \"ERR_XML_MISSED_ATTRIBUTE\")\n }\n return result\n }\n\n removeAttribute(name: string): void {\n if (this.attributes !== null) {\n delete this.attributes[name]\n }\n }\n\n element(name: string, ignoreCase = false, errorIfMissed: string | null = null): XElement {\n const result = this.elementOrNull(name, ignoreCase)\n if (result === null) {\n throw newError(errorIfMissed || `No element \"${name}\"`, \"ERR_XML_MISSED_ELEMENT\")\n }\n return result\n }\n\n elementOrNull(name: string, ignoreCase = false): XElement | null {\n if (this.elements === null) {\n return null\n }\n\n for (const element of this.elements) {\n if (isNameEquals(element, name, ignoreCase)) {\n return element\n }\n }\n\n return null\n }\n\n getElements(name: string, ignoreCase = false) {\n if (this.elements === null) {\n return []\n }\n return this.elements.filter(it => isNameEquals(it, name, ignoreCase))\n }\n\n elementValueOrEmpty(name: string, ignoreCase = false): string {\n const element = this.elementOrNull(name, ignoreCase)\n return element === null ? \"\" : element.value\n }\n}\n\nconst NAME_REG_EXP = new RegExp(/^[A-Za-z_][:A-Za-z0-9_-]*$/i)\n\nfunction isValidName(name: string) {\n return NAME_REG_EXP.test(name)\n}\n\nfunction isNameEquals(element: XElement, name: string, ignoreCase: boolean) {\n const elementName = element.name\n return elementName === name || (ignoreCase === true && elementName.length === name.length && elementName.toLowerCase() === name.toLowerCase())\n}\n\nexport function parseXml(data: string): XElement {\n let rootElement: XElement | null = null\n const parser = sax.parser(true, {})\n const elements: Array<XElement> = []\n\n parser.onopentag = saxElement => {\n const element = new XElement(saxElement.name)\n element.attributes = saxElement.attributes as Record<string, string>\n\n if (rootElement === null) {\n rootElement = element\n } else {\n const parent = elements[elements.length - 1]\n if (parent.elements == null) {\n parent.elements = []\n }\n parent.elements.push(element)\n }\n elements.push(element)\n }\n\n parser.onclosetag = () => {\n elements.pop()\n }\n\n parser.ontext = text => {\n if (elements.length > 0) {\n elements[elements.length - 1].value = text\n }\n }\n\n parser.oncdata = cdata => {\n const element = elements[elements.length - 1]\n element.value = cdata\n element.isCData = true\n }\n\n parser.onerror = err => {\n throw err\n }\n\n parser.write(data)\n return rootElement!\n}\n", "export { BlockMap } from \"./blockMapApi\"\nexport { CancellationError, CancellationToken } from \"./CancellationToken\"\nexport { newError } from \"./error\"\nexport {\n configureRequestOptions,\n configureRequestOptionsFromUrl,\n configureRequestUrl,\n createHttpError,\n DigestTransform,\n DownloadOptions,\n HttpError,\n HttpExecutor,\n parseJson,\n RequestHeaders,\n safeGetHeader,\n safeStringifyJson,\n} from \"./httpExecutor\"\nexport { MemoLazy } from \"./MemoLazy\"\nexport { ProgressCallbackTransform, ProgressInfo } from \"./ProgressCallbackTransform\"\nexport {\n AllPublishOptions,\n BaseS3Options,\n BitbucketOptions,\n CustomPublishOptions,\n GenericServerOptions,\n getS3LikeProviderBaseUrl,\n GithubOptions,\n githubUrl,\n githubTagPrefix,\n GitlabOptions,\n KeygenOptions,\n PublishConfiguration,\n PublishProvider,\n S3Options,\n SnapStoreOptions,\n SpacesOptions,\n GitlabReleaseInfo,\n GitlabReleaseAsset,\n} from \"./publishOptions\"\nexport { retry } from \"./retry\"\nexport { parseDn } from \"./rfc2253Parser\"\nexport { BlockMapDataHolder, PackageFileInfo, ReleaseNoteInfo, UpdateFileInfo, UpdateInfo, WindowsUpdateInfo } from \"./updateInfo\"\nexport { UUID } from \"./uuid\"\nexport { parseXml, XElement } from \"./xml\"\n\n// nsis\nexport const CURRENT_APP_INSTALLER_FILE_NAME = \"installer.exe\"\n// nsis-web\nexport const CURRENT_APP_PACKAGE_FILE_NAME = \"package.7z\"\n\nexport function asArray<T>(v: Nullish | T | Array<T>): Array<T> {\n if (v == null) {\n return []\n } else if (Array.isArray(v)) {\n return v\n } else {\n return [v]\n }\n}\n\nexport type Nullish = null | undefined\n", "'use strict';\n\n\nfunction isNothing(subject) {\n return (typeof subject === 'undefined') || (subject === null);\n}\n\n\nfunction isObject(subject) {\n return (typeof subject === 'object') && (subject !== null);\n}\n\n\nfunction toArray(sequence) {\n if (Array.isArray(sequence)) return sequence;\n else if (isNothing(sequence)) return [];\n\n return [ sequence ];\n}\n\n\nfunction extend(target, source) {\n var index, length, key, sourceKeys;\n\n if (source) {\n sourceKeys = Object.keys(source);\n\n for (index = 0, length = sourceKeys.length; index < length; index += 1) {\n key = sourceKeys[index];\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\n\nfunction repeat(string, count) {\n var result = '', cycle;\n\n for (cycle = 0; cycle < count; cycle += 1) {\n result += string;\n }\n\n return result;\n}\n\n\nfunction isNegativeZero(number) {\n return (number === 0) && (Number.NEGATIVE_INFINITY === 1 / number);\n}\n\n\nmodule.exports.isNothing = isNothing;\nmodule.exports.isObject = isObject;\nmodule.exports.toArray = toArray;\nmodule.exports.repeat = repeat;\nmodule.exports.isNegativeZero = isNegativeZero;\nmodule.exports.extend = extend;\n", "// YAML error class. http://stackoverflow.com/questions/8458984\n//\n'use strict';\n\n\nfunction formatError(exception, compact) {\n var where = '', message = exception.reason || '(unknown reason)';\n\n if (!exception.mark) return message;\n\n if (exception.mark.name) {\n where += 'in \"' + exception.mark.name + '\" ';\n }\n\n where += '(' + (exception.mark.line + 1) + ':' + (exception.mark.column + 1) + ')';\n\n if (!compact && exception.mark.snippet) {\n where += '\\n\\n' + exception.mark.snippet;\n }\n\n return message + ' ' + where;\n}\n\n\nfunction YAMLException(reason, mark) {\n // Super constructor\n Error.call(this);\n\n this.name = 'YAMLException';\n this.reason = reason;\n this.mark = mark;\n this.message = formatError(this, false);\n\n // Include stack trace in error object\n if (Error.captureStackTrace) {\n // Chrome and NodeJS\n Error.captureStackTrace(this, this.constructor);\n } else {\n // FF, IE 10+ and Safari 6+. Fallback for others\n this.stack = (new Error()).stack || '';\n }\n}\n\n\n// Inherit from Error\nYAMLException.prototype = Object.create(Error.prototype);\nYAMLException.prototype.constructor = YAMLException;\n\n\nYAMLException.prototype.toString = function toString(compact) {\n return this.name + ': ' + formatError(this, compact);\n};\n\n\nmodule.exports = YAMLException;\n", "'use strict';\n\n\nvar common = require('./common');\n\n\n// get snippet for a single line, respecting maxLength\nfunction getLine(buffer, lineStart, lineEnd, position, maxLineLength) {\n var head = '';\n var tail = '';\n var maxHalfLength = Math.floor(maxLineLength / 2) - 1;\n\n if (position - lineStart > maxHalfLength) {\n head = ' ... ';\n lineStart = position - maxHalfLength + head.length;\n }\n\n if (lineEnd - position > maxHalfLength) {\n tail = ' ...';\n lineEnd = position + maxHalfLength - tail.length;\n }\n\n return {\n str: head + buffer.slice(lineStart, lineEnd).replace(/\\t/g, '\u2192') + tail,\n pos: position - lineStart + head.length // relative position\n };\n}\n\n\nfunction padStart(string, max) {\n return common.repeat(' ', max - string.length) + string;\n}\n\n\nfunction makeSnippet(mark, options) {\n options = Object.create(options || null);\n\n if (!mark.buffer) return null;\n\n if (!options.maxLength) options.maxLength = 79;\n if (typeof options.indent !== 'number') options.indent = 1;\n if (typeof options.linesBefore !== 'number') options.linesBefore = 3;\n if (typeof options.linesAfter !== 'number') options.linesAfter = 2;\n\n var re = /\\r?\\n|\\r|\\0/g;\n var lineStarts = [ 0 ];\n var lineEnds = [];\n var match;\n var foundLineNo = -1;\n\n while ((match = re.exec(mark.buffer))) {\n lineEnds.push(match.index);\n lineStarts.push(match.index + match[0].length);\n\n if (mark.position <= match.index && foundLineNo < 0) {\n foundLineNo = lineStarts.length - 2;\n }\n }\n\n if (foundLineNo < 0) foundLineNo = lineStarts.length - 1;\n\n var result = '', i, line;\n var lineNoLength = Math.min(mark.line + options.linesAfter, lineEnds.length).toString().length;\n var maxLineLength = options.maxLength - (options.indent + lineNoLength + 3);\n\n for (i = 1; i <= options.linesBefore; i++) {\n if (foundLineNo - i < 0) break;\n line = getLine(\n mark.buffer,\n lineStarts[foundLineNo - i],\n lineEnds[foundLineNo - i],\n mark.position - (lineStarts[foundLineNo] - lineStarts[foundLineNo - i]),\n maxLineLength\n );\n result = common.repeat(' ', options.indent) + padStart((mark.line - i + 1).toString(), lineNoLength) +\n ' | ' + line.str + '\\n' + result;\n }\n\n line = getLine(mark.buffer, lineStarts[foundLineNo], lineEnds[foundLineNo], mark.position, maxLineLength);\n result += common.repeat(' ', options.indent) + padStart((mark.line + 1).toString(), lineNoLength) +\n ' | ' + line.str + '\\n';\n result += common.repeat('-', options.indent + lineNoLength + 3 + line.pos) + '^' + '\\n';\n\n for (i = 1; i <= options.linesAfter; i++) {\n if (foundLineNo + i >= lineEnds.length) break;\n line = getLine(\n mark.buffer,\n lineStarts[foundLineNo + i],\n lineEnds[foundLineNo + i],\n mark.position - (lineStarts[foundLineNo] - lineStarts[foundLineNo + i]),\n maxLineLength\n );\n result += common.repeat(' ', options.indent) + padStart((mark.line + i + 1).toString(), lineNoLength) +\n ' | ' + line.str + '\\n';\n }\n\n return result.replace(/\\n$/, '');\n}\n\n\nmodule.exports = makeSnippet;\n", "'use strict';\n\nvar YAMLException = require('./exception');\n\nvar TYPE_CONSTRUCTOR_OPTIONS = [\n 'kind',\n 'multi',\n 'resolve',\n 'construct',\n 'instanceOf',\n 'predicate',\n 'represent',\n 'representName',\n 'defaultStyle',\n 'styleAliases'\n];\n\nvar YAML_NODE_KINDS = [\n 'scalar',\n 'sequence',\n 'mapping'\n];\n\nfunction compileStyleAliases(map) {\n var result = {};\n\n if (map !== null) {\n Object.keys(map).forEach(function (style) {\n map[style].forEach(function (alias) {\n result[String(alias)] = style;\n });\n });\n }\n\n return result;\n}\n\nfunction Type(tag, options) {\n options = options || {};\n\n Object.keys(options).forEach(function (name) {\n if (TYPE_CONSTRUCTOR_OPTIONS.indexOf(name) === -1) {\n throw new YAMLException('Unknown option \"' + name + '\" is met in definition of \"' + tag + '\" YAML type.');\n }\n });\n\n // TODO: Add tag format check.\n this.options = options; // keep original options in case user wants to extend this type later\n this.tag = tag;\n this.kind = options['kind'] || null;\n this.resolve = options['resolve'] || function () { return true; };\n this.construct = options['construct'] || function (data) { return data; };\n this.instanceOf = options['instanceOf'] || null;\n this.predicate = options['predicate'] || null;\n this.represent = options['represent'] || null;\n this.representName = options['representName'] || null;\n this.defaultStyle = options['defaultStyle'] || null;\n this.multi = options['multi'] || false;\n this.styleAliases = compileStyleAliases(options['styleAliases'] || null);\n\n if (YAML_NODE_KINDS.indexOf(this.kind) === -1) {\n throw new YAMLException('Unknown kind \"' + this.kind + '\" is specified for \"' + tag + '\" YAML type.');\n }\n}\n\nmodule.exports = Type;\n", "'use strict';\n\n/*eslint-disable max-len*/\n\nvar YAMLException = require('./exception');\nvar Type = require('./type');\n\n\nfunction compileList(schema, name) {\n var result = [];\n\n schema[name].forEach(function (currentType) {\n var newIndex = result.length;\n\n result.forEach(function (previousType, previousIndex) {\n if (previousType.tag === currentType.tag &&\n previousType.kind === currentType.kind &&\n previousType.multi === currentType.multi) {\n\n newIndex = previousIndex;\n }\n });\n\n result[newIndex] = currentType;\n });\n\n return result;\n}\n\n\nfunction compileMap(/* lists... */) {\n var result = {\n scalar: {},\n sequence: {},\n mapping: {},\n fallback: {},\n multi: {\n scalar: [],\n sequence: [],\n mapping: [],\n fallback: []\n }\n }, index, length;\n\n function collectType(type) {\n if (type.multi) {\n result.multi[type.kind].push(type);\n result.multi['fallback'].push(type);\n } else {\n result[type.kind][type.tag] = result['fallback'][type.tag] = type;\n }\n }\n\n for (index = 0, length = arguments.length; index < length; index += 1) {\n arguments[index].forEach(collectType);\n }\n return result;\n}\n\n\nfunction Schema(definition) {\n return this.extend(definition);\n}\n\n\nSchema.prototype.extend = function extend(definition) {\n var implicit = [];\n var explicit = [];\n\n if (definition instanceof Type) {\n // Schema.extend(type)\n explicit.push(definition);\n\n } else if (Array.isArray(definition)) {\n // Schema.extend([ type1, type2, ... ])\n explicit = explicit.concat(definition);\n\n } else if (definition && (Array.isArray(definition.implicit) || Array.isArray(definition.explicit))) {\n // Schema.extend({ explicit: [ type1, type2, ... ], implicit: [ type1, type2, ... ] })\n if (definition.implicit) implicit = implicit.concat(definition.implicit);\n if (definition.explicit) explicit = explicit.concat(definition.explicit);\n\n } else {\n throw new YAMLException('Schema.extend argument should be a Type, [ Type ], ' +\n 'or a schema definition ({ implicit: [...], explicit: [...] })');\n }\n\n implicit.forEach(function (type) {\n if (!(type instanceof Type)) {\n throw new YAMLException('Specified list of YAML types (or a single Type object) contains a non-Type object.');\n }\n\n if (type.loadKind && type.loadKind !== 'scalar') {\n throw new YAMLException('There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.');\n }\n\n if (type.multi) {\n throw new YAMLException('There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.');\n }\n });\n\n explicit.forEach(function (type) {\n if (!(type instanceof Type)) {\n throw new YAMLException('Specified list of YAML types (or a single Type object) contains a non-Type object.');\n }\n });\n\n var result = Object.create(Schema.prototype);\n\n result.implicit = (this.implicit || []).concat(implicit);\n result.explicit = (this.explicit || []).concat(explicit);\n\n result.compiledImplicit = compileList(result, 'implicit');\n result.compiledExplicit = compileList(result, 'explicit');\n result.compiledTypeMap = compileMap(result.compiledImplicit, result.compiledExplicit);\n\n return result;\n};\n\n\nmodule.exports = Schema;\n", "'use strict';\n\nvar Type = require('../type');\n\nmodule.exports = new Type('tag:yaml.org,2002:str', {\n kind: 'scalar',\n construct: function (data) { return data !== null ? data : ''; }\n});\n", "'use strict';\n\nvar Type = require('../type');\n\nmodule.exports = new Type('tag:yaml.org,2002:seq', {\n kind: 'sequence',\n construct: function (data) { return data !== null ? data : []; }\n});\n", "'use strict';\n\nvar Type = require('../type');\n\nmodule.exports = new Type('tag:yaml.org,2002:map', {\n kind: 'mapping',\n construct: function (data) { return data !== null ? data : {}; }\n});\n", "// Standard YAML's Failsafe schema.\n// http://www.yaml.org/spec/1.2/spec.html#id2802346\n\n\n'use strict';\n\n\nvar Schema = require('../schema');\n\n\nmodule.exports = new Schema({\n explicit: [\n require('../type/str'),\n require('../type/seq'),\n require('../type/map')\n ]\n});\n", "'use strict';\n\nvar Type = require('../type');\n\nfunction resolveYamlNull(data) {\n if (data === null) return true;\n\n var max = data.length;\n\n return (max === 1 && data === '~') ||\n (max === 4 && (data === 'null' || data === 'Null' || data === 'NULL'));\n}\n\nfunction constructYamlNull() {\n return null;\n}\n\nfunction isNull(object) {\n return object === null;\n}\n\nmodule.exports = new Type('tag:yaml.org,2002:null', {\n kind: 'scalar',\n resolve: resolveYamlNull,\n construct: constructYamlNull,\n predicate: isNull,\n represent: {\n canonical: function () { return '~'; },\n lowercase: function () { return 'null'; },\n uppercase: function () { return 'NULL'; },\n camelcase: function () { return 'Null'; },\n empty: function () { return ''; }\n },\n defaultStyle: 'lowercase'\n});\n", "'use strict';\n\nvar Type = require('../type');\n\nfunction resolveYamlBoolean(data) {\n if (data === null) return false;\n\n var max = data.length;\n\n return (max === 4 && (data === 'true' || data === 'True' || data === 'TRUE')) ||\n (max === 5 && (data === 'false' || data === 'False' || data === 'FALSE'));\n}\n\nfunction constructYamlBoolean(data) {\n return data === 'true' ||\n data === 'True' ||\n data === 'TRUE';\n}\n\nfunction isBoolean(object) {\n return Object.prototype.toString.call(object) === '[object Boolean]';\n}\n\nmodule.exports = new Type('tag:yaml.org,2002:bool', {\n kind: 'scalar',\n resolve: resolveYamlBoolean,\n construct: constructYamlBoolean,\n predicate: isBoolean,\n represent: {\n lowercase: function (object) { return object ? 'true' : 'false'; },\n uppercase: function (object) { return object ? 'TRUE' : 'FALSE'; },\n camelcase: function (object) { return object ? 'True' : 'False'; }\n },\n defaultStyle: 'lowercase'\n});\n", "'use strict';\n\nvar common = require('../common');\nvar Type = require('../type');\n\nfunction isHexCode(c) {\n return ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) ||\n ((0x41/* A */ <= c) && (c <= 0x46/* F */)) ||\n ((0x61/* a */ <= c) && (c <= 0x66/* f */));\n}\n\nfunction isOctCode(c) {\n return ((0x30/* 0 */ <= c) && (c <= 0x37/* 7 */));\n}\n\nfunction isDecCode(c) {\n return ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */));\n}\n\nfunction resolveYamlInteger(data) {\n if (data === null) return false;\n\n var max = data.length,\n index = 0,\n hasDigits = false,\n ch;\n\n if (!max) return false;\n\n ch = data[index];\n\n // sign\n if (ch === '-' || ch === '+') {\n ch = data[++index];\n }\n\n if (ch === '0') {\n // 0\n if (index + 1 === max) return true;\n ch = data[++index];\n\n // base 2, base 8, base 16\n\n if (ch === 'b') {\n // base 2\n index++;\n\n for (; index < max; index++) {\n ch = data[index];\n if (ch === '_') continue;\n if (ch !== '0' && ch !== '1') return false;\n hasDigits = true;\n }\n return hasDigits && ch !== '_';\n }\n\n\n if (ch === 'x') {\n // base 16\n index++;\n\n for (; index < max; index++) {\n ch = data[index];\n if (ch === '_') continue;\n if (!isHexCode(data.charCodeAt(index))) return false;\n hasDigits = true;\n }\n return hasDigits && ch !== '_';\n }\n\n\n if (ch === 'o') {\n // base 8\n index++;\n\n for (; index < max; index++) {\n ch = data[index];\n if (ch === '_') continue;\n if (!isOctCode(data.charCodeAt(index))) return false;\n hasDigits = true;\n }\n return hasDigits && ch !== '_';\n }\n }\n\n // base 10 (except 0)\n\n // value should not start with `_`;\n if (ch === '_') return false;\n\n for (; index < max; index++) {\n ch = data[index];\n if (ch === '_') continue;\n if (!isDecCode(data.charCodeAt(index))) {\n return false;\n }\n hasDigits = true;\n }\n\n // Should have digits and should not end with `_`\n if (!hasDigits || ch === '_') return false;\n\n return true;\n}\n\nfunction constructYamlInteger(data) {\n var value = data, sign = 1, ch;\n\n if (value.indexOf('_') !== -1) {\n value = value.replace(/_/g, '');\n }\n\n ch = value[0];\n\n if (ch === '-' || ch === '+') {\n if (ch === '-') sign = -1;\n value = value.slice(1);\n ch = value[0];\n }\n\n if (value === '0') return 0;\n\n if (ch === '0') {\n if (value[1] === 'b') return sign * parseInt(value.slice(2), 2);\n if (value[1] === 'x') return sign * parseInt(value.slice(2), 16);\n if (value[1] === 'o') return sign * parseInt(value.slice(2), 8);\n }\n\n return sign * parseInt(value, 10);\n}\n\nfunction isInteger(object) {\n return (Object.prototype.toString.call(object)) === '[object Number]' &&\n (object % 1 === 0 && !common.isNegativeZero(object));\n}\n\nmodule.exports = new Type('tag:yaml.org,2002:int', {\n kind: 'scalar',\n resolve: resolveYamlInteger,\n construct: constructYamlInteger,\n predicate: isInteger,\n represent: {\n binary: function (obj) { return obj >= 0 ? '0b' + obj.toString(2) : '-0b' + obj.toString(2).slice(1); },\n octal: function (obj) { return obj >= 0 ? '0o' + obj.toString(8) : '-0o' + obj.toString(8).slice(1); },\n decimal: function (obj) { return obj.toString(10); },\n /* eslint-disable max-len */\n hexadecimal: function (obj) { return obj >= 0 ? '0x' + obj.toString(16).toUpperCase() : '-0x' + obj.toString(16).toUpperCase().slice(1); }\n },\n defaultStyle: 'decimal',\n styleAliases: {\n binary: [ 2, 'bin' ],\n octal: [ 8, 'oct' ],\n decimal: [ 10, 'dec' ],\n hexadecimal: [ 16, 'hex' ]\n }\n});\n", "'use strict';\n\nvar common = require('../common');\nvar Type = require('../type');\n\nvar YAML_FLOAT_PATTERN = new RegExp(\n // 2.5e4, 2.5 and integers\n '^(?:[-+]?(?:[0-9][0-9_]*)(?:\\\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?' +\n // .2e4, .2\n // special case, seems not from spec\n '|\\\\.[0-9_]+(?:[eE][-+]?[0-9]+)?' +\n // .inf\n '|[-+]?\\\\.(?:inf|Inf|INF)' +\n // .nan\n '|\\\\.(?:nan|NaN|NAN))$');\n\nfunction resolveYamlFloat(data) {\n if (data === null) return false;\n\n if (!YAML_FLOAT_PATTERN.test(data) ||\n // Quick hack to not allow integers end with `_`\n // Probably should update regexp & check speed\n data[data.length - 1] === '_') {\n return false;\n }\n\n return true;\n}\n\nfunction constructYamlFloat(data) {\n var value, sign;\n\n value = data.replace(/_/g, '').toLowerCase();\n sign = value[0] === '-' ? -1 : 1;\n\n if ('+-'.indexOf(value[0]) >= 0) {\n value = value.slice(1);\n }\n\n if (value === '.inf') {\n return (sign === 1) ? Number.POSITIVE_INFINITY : Number.NEGATIVE_INFINITY;\n\n } else if (value === '.nan') {\n return NaN;\n }\n return sign * parseFloat(value, 10);\n}\n\n\nvar SCIENTIFIC_WITHOUT_DOT = /^[-+]?[0-9]+e/;\n\nfunction representYamlFloat(object, style) {\n var res;\n\n if (isNaN(object)) {\n switch (style) {\n case 'lowercase': return '.nan';\n case 'uppercase': return '.NAN';\n case 'camelcase': return '.NaN';\n }\n } else if (Number.POSITIVE_INFINITY === object) {\n switch (style) {\n case 'lowercase': return '.inf';\n case 'uppercase': return '.INF';\n case 'camelcase': return '.Inf';\n }\n } else if (Number.NEGATIVE_INFINITY === object) {\n switch (style) {\n case 'lowercase': return '-.inf';\n case 'uppercase': return '-.INF';\n case 'camelcase': return '-.Inf';\n }\n } else if (common.isNegativeZero(object)) {\n return '-0.0';\n }\n\n res = object.toString(10);\n\n // JS stringifier can build scientific format without dots: 5e-100,\n // while YAML requres dot: 5.e-100. Fix it with simple hack\n\n return SCIENTIFIC_WITHOUT_DOT.test(res) ? res.replace('e', '.e') : res;\n}\n\nfunction isFloat(object) {\n return (Object.prototype.toString.call(object) === '[object Number]') &&\n (object % 1 !== 0 || common.isNegativeZero(object));\n}\n\nmodule.exports = new Type('tag:yaml.org,2002:float', {\n kind: 'scalar',\n resolve: resolveYamlFloat,\n construct: constructYamlFloat,\n predicate: isFloat,\n represent: representYamlFloat,\n defaultStyle: 'lowercase'\n});\n", "// Standard YAML's JSON schema.\n// http://www.yaml.org/spec/1.2/spec.html#id2803231\n//\n// NOTE: JS-YAML does not support schema-specific tag resolution restrictions.\n// So, this schema is not such strict as defined in the YAML specification.\n// It allows numbers in binary notaion, use `Null` and `NULL` as `null`, etc.\n\n\n'use strict';\n\n\nmodule.exports = require('./failsafe').extend({\n implicit: [\n require('../type/null'),\n require('../type/bool'),\n require('../type/int'),\n require('../type/float')\n ]\n});\n", "// Standard YAML's Core schema.\n// http://www.yaml.org/spec/1.2/spec.html#id2804923\n//\n// NOTE: JS-YAML does not support schema-specific tag resolution restrictions.\n// So, Core schema has no distinctions from JSON schema is JS-YAML.\n\n\n'use strict';\n\n\nmodule.exports = require('./json');\n", "'use strict';\n\nvar Type = require('../type');\n\nvar YAML_DATE_REGEXP = new RegExp(\n '^([0-9][0-9][0-9][0-9])' + // [1] year\n '-([0-9][0-9])' + // [2] month\n '-([0-9][0-9])$'); // [3] day\n\nvar YAML_TIMESTAMP_REGEXP = new RegExp(\n '^([0-9][0-9][0-9][0-9])' + // [1] year\n '-([0-9][0-9]?)' + // [2] month\n '-([0-9][0-9]?)' + // [3] day\n '(?:[Tt]|[ \\\\t]+)' + // ...\n '([0-9][0-9]?)' + // [4] hour\n ':([0-9][0-9])' + // [5] minute\n ':([0-9][0-9])' + // [6] second\n '(?:\\\\.([0-9]*))?' + // [7] fraction\n '(?:[ \\\\t]*(Z|([-+])([0-9][0-9]?)' + // [8] tz [9] tz_sign [10] tz_hour\n '(?::([0-9][0-9]))?))?$'); // [11] tz_minute\n\nfunction resolveYamlTimestamp(data) {\n if (data === null) return false;\n if (YAML_DATE_REGEXP.exec(data) !== null) return true;\n if (YAML_TIMESTAMP_REGEXP.exec(data) !== null) return true;\n return false;\n}\n\nfunction constructYamlTimestamp(data) {\n var match, year, month, day, hour, minute, second, fraction = 0,\n delta = null, tz_hour, tz_minute, date;\n\n match = YAML_DATE_REGEXP.exec(data);\n if (match === null) match = YAML_TIMESTAMP_REGEXP.exec(data);\n\n if (match === null) throw new Error('Date resolve error');\n\n // match: [1] year [2] month [3] day\n\n year = +(match[1]);\n month = +(match[2]) - 1; // JS month starts with 0\n day = +(match[3]);\n\n if (!match[4]) { // no hour\n return new Date(Date.UTC(year, month, day));\n }\n\n // match: [4] hour [5] minute [6] second [7] fraction\n\n hour = +(match[4]);\n minute = +(match[5]);\n second = +(match[6]);\n\n if (match[7]) {\n fraction = match[7].slice(0, 3);\n while (fraction.length < 3) { // milli-seconds\n fraction += '0';\n }\n fraction = +fraction;\n }\n\n // match: [8] tz [9] tz_sign [10] tz_hour [11] tz_minute\n\n if (match[9]) {\n tz_hour = +(match[10]);\n tz_minute = +(match[11] || 0);\n delta = (tz_hour * 60 + tz_minute) * 60000; // delta in mili-seconds\n if (match[9] === '-') delta = -delta;\n }\n\n date = new Date(Date.UTC(year, month, day, hour, minute, second, fraction));\n\n if (delta) date.setTime(date.getTime() - delta);\n\n return date;\n}\n\nfunction representYamlTimestamp(object /*, style*/) {\n return object.toISOString();\n}\n\nmodule.exports = new Type('tag:yaml.org,2002:timestamp', {\n kind: 'scalar',\n resolve: resolveYamlTimestamp,\n construct: constructYamlTimestamp,\n instanceOf: Date,\n represent: representYamlTimestamp\n});\n", "'use strict';\n\nvar Type = require('../type');\n\nfunction resolveYamlMerge(data) {\n return data === '<<' || data === null;\n}\n\nmodule.exports = new Type('tag:yaml.org,2002:merge', {\n kind: 'scalar',\n resolve: resolveYamlMerge\n});\n", "'use strict';\n\n/*eslint-disable no-bitwise*/\n\n\nvar Type = require('../type');\n\n\n// [ 64, 65, 66 ] -> [ padding, CR, LF ]\nvar BASE64_MAP = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\\n\\r';\n\n\nfunction resolveYamlBinary(data) {\n if (data === null) return false;\n\n var code, idx, bitlen = 0, max = data.length, map = BASE64_MAP;\n\n // Convert one by one.\n for (idx = 0; idx < max; idx++) {\n code = map.indexOf(data.charAt(idx));\n\n // Skip CR/LF\n if (code > 64) continue;\n\n // Fail on illegal characters\n if (code < 0) return false;\n\n bitlen += 6;\n }\n\n // If there are any bits left, source was corrupted\n return (bitlen % 8) === 0;\n}\n\nfunction constructYamlBinary(data) {\n var idx, tailbits,\n input = data.replace(/[\\r\\n=]/g, ''), // remove CR/LF & padding to simplify scan\n max = input.length,\n map = BASE64_MAP,\n bits = 0,\n result = [];\n\n // Collect by 6*4 bits (3 bytes)\n\n for (idx = 0; idx < max; idx++) {\n if ((idx % 4 === 0) && idx) {\n result.push((bits >> 16) & 0xFF);\n result.push((bits >> 8) & 0xFF);\n result.push(bits & 0xFF);\n }\n\n bits = (bits << 6) | map.indexOf(input.charAt(idx));\n }\n\n // Dump tail\n\n tailbits = (max % 4) * 6;\n\n if (tailbits === 0) {\n result.push((bits >> 16) & 0xFF);\n result.push((bits >> 8) & 0xFF);\n result.push(bits & 0xFF);\n } else if (tailbits === 18) {\n result.push((bits >> 10) & 0xFF);\n result.push((bits >> 2) & 0xFF);\n } else if (tailbits === 12) {\n result.push((bits >> 4) & 0xFF);\n }\n\n return new Uint8Array(result);\n}\n\nfunction representYamlBinary(object /*, style*/) {\n var result = '', bits = 0, idx, tail,\n max = object.length,\n map = BASE64_MAP;\n\n // Convert every three bytes to 4 ASCII characters.\n\n for (idx = 0; idx < max; idx++) {\n if ((idx % 3 === 0) && idx) {\n result += map[(bits >> 18) & 0x3F];\n result += map[(bits >> 12) & 0x3F];\n result += map[(bits >> 6) & 0x3F];\n result += map[bits & 0x3F];\n }\n\n bits = (bits << 8) + object[idx];\n }\n\n // Dump tail\n\n tail = max % 3;\n\n if (tail === 0) {\n result += map[(bits >> 18) & 0x3F];\n result += map[(bits >> 12) & 0x3F];\n result += map[(bits >> 6) & 0x3F];\n result += map[bits & 0x3F];\n } else if (tail === 2) {\n result += map[(bits >> 10) & 0x3F];\n result += map[(bits >> 4) & 0x3F];\n result += map[(bits << 2) & 0x3F];\n result += map[64];\n } else if (tail === 1) {\n result += map[(bits >> 2) & 0x3F];\n result += map[(bits << 4) & 0x3F];\n result += map[64];\n result += map[64];\n }\n\n return result;\n}\n\nfunction isBinary(obj) {\n return Object.prototype.toString.call(obj) === '[object Uint8Array]';\n}\n\nmodule.exports = new Type('tag:yaml.org,2002:binary', {\n kind: 'scalar',\n resolve: resolveYamlBinary,\n construct: constructYamlBinary,\n predicate: isBinary,\n represent: representYamlBinary\n});\n", "'use strict';\n\nvar Type = require('../type');\n\nvar _hasOwnProperty = Object.prototype.hasOwnProperty;\nvar _toString = Object.prototype.toString;\n\nfunction resolveYamlOmap(data) {\n if (data === null) return true;\n\n var objectKeys = [], index, length, pair, pairKey, pairHasKey,\n object = data;\n\n for (index = 0, length = object.length; index < length; index += 1) {\n pair = object[index];\n pairHasKey = false;\n\n if (_toString.call(pair) !== '[object Object]') return false;\n\n for (pairKey in pair) {\n if (_hasOwnProperty.call(pair, pairKey)) {\n if (!pairHasKey) pairHasKey = true;\n else return false;\n }\n }\n\n if (!pairHasKey) return false;\n\n if (objectKeys.indexOf(pairKey) === -1) objectKeys.push(pairKey);\n else return false;\n }\n\n return true;\n}\n\nfunction constructYamlOmap(data) {\n return data !== null ? data : [];\n}\n\nmodule.exports = new Type('tag:yaml.org,2002:omap', {\n kind: 'sequence',\n resolve: resolveYamlOmap,\n construct: constructYamlOmap\n});\n", "'use strict';\n\nvar Type = require('../type');\n\nvar _toString = Object.prototype.toString;\n\nfunction resolveYamlPairs(data) {\n if (data === null) return true;\n\n var index, length, pair, keys, result,\n object = data;\n\n result = new Array(object.length);\n\n for (index = 0, length = object.length; index < length; index += 1) {\n pair = object[index];\n\n if (_toString.call(pair) !== '[object Object]') return false;\n\n keys = Object.keys(pair);\n\n if (keys.length !== 1) return false;\n\n result[index] = [ keys[0], pair[keys[0]] ];\n }\n\n return true;\n}\n\nfunction constructYamlPairs(data) {\n if (data === null) return [];\n\n var index, length, pair, keys, result,\n object = data;\n\n result = new Array(object.length);\n\n for (index = 0, length = object.length; index < length; index += 1) {\n pair = object[index];\n\n keys = Object.keys(pair);\n\n result[index] = [ keys[0], pair[keys[0]] ];\n }\n\n return result;\n}\n\nmodule.exports = new Type('tag:yaml.org,2002:pairs', {\n kind: 'sequence',\n resolve: resolveYamlPairs,\n construct: constructYamlPairs\n});\n", "'use strict';\n\nvar Type = require('../type');\n\nvar _hasOwnProperty = Object.prototype.hasOwnProperty;\n\nfunction resolveYamlSet(data) {\n if (data === null) return true;\n\n var key, object = data;\n\n for (key in object) {\n if (_hasOwnProperty.call(object, key)) {\n if (object[key] !== null) return false;\n }\n }\n\n return true;\n}\n\nfunction constructYamlSet(data) {\n return data !== null ? data : {};\n}\n\nmodule.exports = new Type('tag:yaml.org,2002:set', {\n kind: 'mapping',\n resolve: resolveYamlSet,\n construct: constructYamlSet\n});\n", "// JS-YAML's default schema for `safeLoad` function.\n// It is not described in the YAML specification.\n//\n// This schema is based on standard YAML's Core schema and includes most of\n// extra types described at YAML tag repository. (http://yaml.org/type/)\n\n\n'use strict';\n\n\nmodule.exports = require('./core').extend({\n implicit: [\n require('../type/timestamp'),\n require('../type/merge')\n ],\n explicit: [\n require('../type/binary'),\n require('../type/omap'),\n require('../type/pairs'),\n require('../type/set')\n ]\n});\n", "'use strict';\n\n/*eslint-disable max-len,no-use-before-define*/\n\nvar common = require('./common');\nvar YAMLException = require('./exception');\nvar makeSnippet = require('./snippet');\nvar DEFAULT_SCHEMA = require('./schema/default');\n\n\nvar _hasOwnProperty = Object.prototype.hasOwnProperty;\n\n\nvar CONTEXT_FLOW_IN = 1;\nvar CONTEXT_FLOW_OUT = 2;\nvar CONTEXT_BLOCK_IN = 3;\nvar CONTEXT_BLOCK_OUT = 4;\n\n\nvar CHOMPING_CLIP = 1;\nvar CHOMPING_STRIP = 2;\nvar CHOMPING_KEEP = 3;\n\n\nvar PATTERN_NON_PRINTABLE = /[\\x00-\\x08\\x0B\\x0C\\x0E-\\x1F\\x7F-\\x84\\x86-\\x9F\\uFFFE\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/;\nvar PATTERN_NON_ASCII_LINE_BREAKS = /[\\x85\\u2028\\u2029]/;\nvar PATTERN_FLOW_INDICATORS = /[,\\[\\]\\{\\}]/;\nvar PATTERN_TAG_HANDLE = /^(?:!|!!|![a-z\\-]+!)$/i;\nvar PATTERN_TAG_URI = /^(?:!|[^,\\[\\]\\{\\}])(?:%[0-9a-f]{2}|[0-9a-z\\-#;\\/\\?:@&=\\+\\$,_\\.!~\\*'\\(\\)\\[\\]])*$/i;\n\n\nfunction _class(obj) { return Object.prototype.toString.call(obj); }\n\nfunction is_EOL(c) {\n return (c === 0x0A/* LF */) || (c === 0x0D/* CR */);\n}\n\nfunction is_WHITE_SPACE(c) {\n return (c === 0x09/* Tab */) || (c === 0x20/* Space */);\n}\n\nfunction is_WS_OR_EOL(c) {\n return (c === 0x09/* Tab */) ||\n (c === 0x20/* Space */) ||\n (c === 0x0A/* LF */) ||\n (c === 0x0D/* CR */);\n}\n\nfunction is_FLOW_INDICATOR(c) {\n return c === 0x2C/* , */ ||\n c === 0x5B/* [ */ ||\n c === 0x5D/* ] */ ||\n c === 0x7B/* { */ ||\n c === 0x7D/* } */;\n}\n\nfunction fromHexCode(c) {\n var lc;\n\n if ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) {\n return c - 0x30;\n }\n\n /*eslint-disable no-bitwise*/\n lc = c | 0x20;\n\n if ((0x61/* a */ <= lc) && (lc <= 0x66/* f */)) {\n return lc - 0x61 + 10;\n }\n\n return -1;\n}\n\nfunction escapedHexLen(c) {\n if (c === 0x78/* x */) { return 2; }\n if (c === 0x75/* u */) { return 4; }\n if (c === 0x55/* U */) { return 8; }\n return 0;\n}\n\nfunction fromDecimalCode(c) {\n if ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) {\n return c - 0x30;\n }\n\n return -1;\n}\n\nfunction simpleEscapeSequence(c) {\n /* eslint-disable indent */\n return (c === 0x30/* 0 */) ? '\\x00' :\n (c === 0x61/* a */) ? '\\x07' :\n (c === 0x62/* b */) ? '\\x08' :\n (c === 0x74/* t */) ? '\\x09' :\n (c === 0x09/* Tab */) ? '\\x09' :\n (c === 0x6E/* n */) ? '\\x0A' :\n (c === 0x76/* v */) ? '\\x0B' :\n (c === 0x66/* f */) ? '\\x0C' :\n (c === 0x72/* r */) ? '\\x0D' :\n (c === 0x65/* e */) ? '\\x1B' :\n (c === 0x20/* Space */) ? ' ' :\n (c === 0x22/* \" */) ? '\\x22' :\n (c === 0x2F/* / */) ? '/' :\n (c === 0x5C/* \\ */) ? '\\x5C' :\n (c === 0x4E/* N */) ? '\\x85' :\n (c === 0x5F/* _ */) ? '\\xA0' :\n (c === 0x4C/* L */) ? '\\u2028' :\n (c === 0x50/* P */) ? '\\u2029' : '';\n}\n\nfunction charFromCodepoint(c) {\n if (c <= 0xFFFF) {\n return String.fromCharCode(c);\n }\n // Encode UTF-16 surrogate pair\n // https://en.wikipedia.org/wiki/UTF-16#Code_points_U.2B010000_to_U.2B10FFFF\n return String.fromCharCode(\n ((c - 0x010000) >> 10) + 0xD800,\n ((c - 0x010000) & 0x03FF) + 0xDC00\n );\n}\n\n// set a property of a literal object, while protecting against prototype pollution,\n// see https://github.com/nodeca/js-yaml/issues/164 for more details\nfunction setProperty(object, key, value) {\n // used for this specific key only because Object.defineProperty is slow\n if (key === '__proto__') {\n Object.defineProperty(object, key, {\n configurable: true,\n enumerable: true,\n writable: true,\n value: value\n });\n } else {\n object[key] = value;\n }\n}\n\nvar simpleEscapeCheck = new Array(256); // integer, for fast access\nvar simpleEscapeMap = new Array(256);\nfor (var i = 0; i < 256; i++) {\n simpleEscapeCheck[i] = simpleEscapeSequence(i) ? 1 : 0;\n simpleEscapeMap[i] = simpleEscapeSequence(i);\n}\n\n\nfunction State(input, options) {\n this.input = input;\n\n this.filename = options['filename'] || null;\n this.schema = options['schema'] || DEFAULT_SCHEMA;\n this.onWarning = options['onWarning'] || null;\n // (Hidden) Remove? makes the loader to expect YAML 1.1 documents\n // if such documents have no explicit %YAML directive\n this.legacy = options['legacy'] || false;\n\n this.json = options['json'] || false;\n this.listener = options['listener'] || null;\n\n this.implicitTypes = this.schema.compiledImplicit;\n this.typeMap = this.schema.compiledTypeMap;\n\n this.length = input.length;\n this.position = 0;\n this.line = 0;\n this.lineStart = 0;\n this.lineIndent = 0;\n\n // position of first leading tab in the current line,\n // used to make sure there are no tabs in the indentation\n this.firstTabInLine = -1;\n\n this.documents = [];\n\n /*\n this.version;\n this.checkLineBreaks;\n this.tagMap;\n this.anchorMap;\n this.tag;\n this.anchor;\n this.kind;\n this.result;*/\n\n}\n\n\nfunction generateError(state, message) {\n var mark = {\n name: state.filename,\n buffer: state.input.slice(0, -1), // omit trailing \\0\n position: state.position,\n line: state.line,\n column: state.position - state.lineStart\n };\n\n mark.snippet = makeSnippet(mark);\n\n return new YAMLException(message, mark);\n}\n\nfunction throwError(state, message) {\n throw generateError(state, message);\n}\n\nfunction throwWarning(state, message) {\n if (state.onWarning) {\n state.onWarning.call(null, generateError(state, message));\n }\n}\n\n\nvar directiveHandlers = {\n\n YAML: function handleYamlDirective(state, name, args) {\n\n var match, major, minor;\n\n if (state.version !== null) {\n throwError(state, 'duplication of %YAML directive');\n }\n\n if (args.length !== 1) {\n throwError(state, 'YAML directive accepts exactly one argument');\n }\n\n match = /^([0-9]+)\\.([0-9]+)$/.exec(args[0]);\n\n if (match === null) {\n throwError(state, 'ill-formed argument of the YAML directive');\n }\n\n major = parseInt(match[1], 10);\n minor = parseInt(match[2], 10);\n\n if (major !== 1) {\n throwError(state, 'unacceptable YAML version of the document');\n }\n\n state.version = args[0];\n state.checkLineBreaks = (minor < 2);\n\n if (minor !== 1 && minor !== 2) {\n throwWarning(state, 'unsupported YAML version of the document');\n }\n },\n\n TAG: function handleTagDirective(state, name, args) {\n\n var handle, prefix;\n\n if (args.length !== 2) {\n throwError(state, 'TAG directive accepts exactly two arguments');\n }\n\n handle = args[0];\n prefix = args[1];\n\n if (!PATTERN_TAG_HANDLE.test(handle)) {\n throwError(state, 'ill-formed tag handle (first argument) of the TAG directive');\n }\n\n if (_hasOwnProperty.call(state.tagMap, handle)) {\n throwError(state, 'there is a previously declared suffix for \"' + handle + '\" tag handle');\n }\n\n if (!PATTERN_TAG_URI.test(prefix)) {\n throwError(state, 'ill-formed tag prefix (second argument) of the TAG directive');\n }\n\n try {\n prefix = decodeURIComponent(prefix);\n } catch (err) {\n throwError(state, 'tag prefix is malformed: ' + prefix);\n }\n\n state.tagMap[handle] = prefix;\n }\n};\n\n\nfunction captureSegment(state, start, end, checkJson) {\n var _position, _length, _character, _result;\n\n if (start < end) {\n _result = state.input.slice(start, end);\n\n if (checkJson) {\n for (_position = 0, _length = _result.length; _position < _length; _position += 1) {\n _character = _result.charCodeAt(_position);\n if (!(_character === 0x09 ||\n (0x20 <= _character && _character <= 0x10FFFF))) {\n throwError(state, 'expected valid JSON character');\n }\n }\n } else if (PATTERN_NON_PRINTABLE.test(_result)) {\n throwError(state, 'the stream contains non-printable characters');\n }\n\n state.result += _result;\n }\n}\n\nfunction mergeMappings(state, destination, source, overridableKeys) {\n var sourceKeys, key, index, quantity;\n\n if (!common.isObject(source)) {\n throwError(state, 'cannot merge mappings; the provided source object is unacceptable');\n }\n\n sourceKeys = Object.keys(source);\n\n for (index = 0, quantity = sourceKeys.length; index < quantity; index += 1) {\n key = sourceKeys[index];\n\n if (!_hasOwnProperty.call(destination, key)) {\n setProperty(destination, key, source[key]);\n overridableKeys[key] = true;\n }\n }\n}\n\nfunction storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode,\n startLine, startLineStart, startPos) {\n\n var index, quantity;\n\n // The output is a plain object here, so keys can only be strings.\n // We need to convert keyNode to a string, but doing so can hang the process\n // (deeply nested arrays that explode exponentially using aliases).\n if (Array.isArray(keyNode)) {\n keyNode = Array.prototype.slice.call(keyNode);\n\n for (index = 0, quantity = keyNode.length; index < quantity; index += 1) {\n if (Array.isArray(keyNode[index])) {\n throwError(state, 'nested arrays are not supported inside keys');\n }\n\n if (typeof keyNode === 'object' && _class(keyNode[index]) === '[object Object]') {\n keyNode[index] = '[object Object]';\n }\n }\n }\n\n // Avoid code execution in load() via toString property\n // (still use its own toString for arrays, timestamps,\n // and whatever user schema extensions happen to have @@toStringTag)\n if (typeof keyNode === 'object' && _class(keyNode) === '[object Object]') {\n keyNode = '[object Object]';\n }\n\n\n keyNode = String(keyNode);\n\n if (_result === null) {\n _result = {};\n }\n\n if (keyTag === 'tag:yaml.org,2002:merge') {\n if (Array.isArray(valueNode)) {\n for (index = 0, quantity = valueNode.length; index < quantity; index += 1) {\n mergeMappings(state, _result, valueNode[index], overridableKeys);\n }\n } else {\n mergeMappings(state, _result, valueNode, overridableKeys);\n }\n } else {\n if (!state.json &&\n !_hasOwnProperty.call(overridableKeys, keyNode) &&\n _hasOwnProperty.call(_result, keyNode)) {\n state.line = startLine || state.line;\n state.lineStart = startLineStart || state.lineStart;\n state.position = startPos || state.position;\n throwError(state, 'duplicated mapping key');\n }\n\n setProperty(_result, keyNode, valueNode);\n delete overridableKeys[keyNode];\n }\n\n return _result;\n}\n\nfunction readLineBreak(state) {\n var ch;\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch === 0x0A/* LF */) {\n state.position++;\n } else if (ch === 0x0D/* CR */) {\n state.position++;\n if (state.input.charCodeAt(state.position) === 0x0A/* LF */) {\n state.position++;\n }\n } else {\n throwError(state, 'a line break is expected');\n }\n\n state.line += 1;\n state.lineStart = state.position;\n state.firstTabInLine = -1;\n}\n\nfunction skipSeparationSpace(state, allowComments, checkIndent) {\n var lineBreaks = 0,\n ch = state.input.charCodeAt(state.position);\n\n while (ch !== 0) {\n while (is_WHITE_SPACE(ch)) {\n if (ch === 0x09/* Tab */ && state.firstTabInLine === -1) {\n state.firstTabInLine = state.position;\n }\n ch = state.input.charCodeAt(++state.position);\n }\n\n if (allowComments && ch === 0x23/* # */) {\n do {\n ch = state.input.charCodeAt(++state.position);\n } while (ch !== 0x0A/* LF */ && ch !== 0x0D/* CR */ && ch !== 0);\n }\n\n if (is_EOL(ch)) {\n readLineBreak(state);\n\n ch = state.input.charCodeAt(state.position);\n lineBreaks++;\n state.lineIndent = 0;\n\n while (ch === 0x20/* Space */) {\n state.lineIndent++;\n ch = state.input.charCodeAt(++state.position);\n }\n } else {\n break;\n }\n }\n\n if (checkIndent !== -1 && lineBreaks !== 0 && state.lineIndent < checkIndent) {\n throwWarning(state, 'deficient indentation');\n }\n\n return lineBreaks;\n}\n\nfunction testDocumentSeparator(state) {\n var _position = state.position,\n ch;\n\n ch = state.input.charCodeAt(_position);\n\n // Condition state.position === state.lineStart is tested\n // in parent on each call, for efficiency. No needs to test here again.\n if ((ch === 0x2D/* - */ || ch === 0x2E/* . */) &&\n ch === state.input.charCodeAt(_position + 1) &&\n ch === state.input.charCodeAt(_position + 2)) {\n\n _position += 3;\n\n ch = state.input.charCodeAt(_position);\n\n if (ch === 0 || is_WS_OR_EOL(ch)) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction writeFoldedLines(state, count) {\n if (count === 1) {\n state.result += ' ';\n } else if (count > 1) {\n state.result += common.repeat('\\n', count - 1);\n }\n}\n\n\nfunction readPlainScalar(state, nodeIndent, withinFlowCollection) {\n var preceding,\n following,\n captureStart,\n captureEnd,\n hasPendingContent,\n _line,\n _lineStart,\n _lineIndent,\n _kind = state.kind,\n _result = state.result,\n ch;\n\n ch = state.input.charCodeAt(state.position);\n\n if (is_WS_OR_EOL(ch) ||\n is_FLOW_INDICATOR(ch) ||\n ch === 0x23/* # */ ||\n ch === 0x26/* & */ ||\n ch === 0x2A/* * */ ||\n ch === 0x21/* ! */ ||\n ch === 0x7C/* | */ ||\n ch === 0x3E/* > */ ||\n ch === 0x27/* ' */ ||\n ch === 0x22/* \" */ ||\n ch === 0x25/* % */ ||\n ch === 0x40/* @ */ ||\n ch === 0x60/* ` */) {\n return false;\n }\n\n if (ch === 0x3F/* ? */ || ch === 0x2D/* - */) {\n following = state.input.charCodeAt(state.position + 1);\n\n if (is_WS_OR_EOL(following) ||\n withinFlowCollection && is_FLOW_INDICATOR(following)) {\n return false;\n }\n }\n\n state.kind = 'scalar';\n state.result = '';\n captureStart = captureEnd = state.position;\n hasPendingContent = false;\n\n while (ch !== 0) {\n if (ch === 0x3A/* : */) {\n following = state.input.charCodeAt(state.position + 1);\n\n if (is_WS_OR_EOL(following) ||\n withinFlowCollection && is_FLOW_INDICATOR(following)) {\n break;\n }\n\n } else if (ch === 0x23/* # */) {\n preceding = state.input.charCodeAt(state.position - 1);\n\n if (is_WS_OR_EOL(preceding)) {\n break;\n }\n\n } else if ((state.position === state.lineStart && testDocumentSeparator(state)) ||\n withinFlowCollection && is_FLOW_INDICATOR(ch)) {\n break;\n\n } else if (is_EOL(ch)) {\n _line = state.line;\n _lineStart = state.lineStart;\n _lineIndent = state.lineIndent;\n skipSeparationSpace(state, false, -1);\n\n if (state.lineIndent >= nodeIndent) {\n hasPendingContent = true;\n ch = state.input.charCodeAt(state.position);\n continue;\n } else {\n state.position = captureEnd;\n state.line = _line;\n state.lineStart = _lineStart;\n state.lineIndent = _lineIndent;\n break;\n }\n }\n\n if (hasPendingContent) {\n captureSegment(state, captureStart, captureEnd, false);\n writeFoldedLines(state, state.line - _line);\n captureStart = captureEnd = state.position;\n hasPendingContent = false;\n }\n\n if (!is_WHITE_SPACE(ch)) {\n captureEnd = state.position + 1;\n }\n\n ch = state.input.charCodeAt(++state.position);\n }\n\n captureSegment(state, captureStart, captureEnd, false);\n\n if (state.result) {\n return true;\n }\n\n state.kind = _kind;\n state.result = _result;\n return false;\n}\n\nfunction readSingleQuotedScalar(state, nodeIndent) {\n var ch,\n captureStart, captureEnd;\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch !== 0x27/* ' */) {\n return false;\n }\n\n state.kind = 'scalar';\n state.result = '';\n state.position++;\n captureStart = captureEnd = state.position;\n\n while ((ch = state.input.charCodeAt(state.position)) !== 0) {\n if (ch === 0x27/* ' */) {\n captureSegment(state, captureStart, state.position, true);\n ch = state.input.charCodeAt(++state.position);\n\n if (ch === 0x27/* ' */) {\n captureStart = state.position;\n state.position++;\n captureEnd = state.position;\n } else {\n return true;\n }\n\n } else if (is_EOL(ch)) {\n captureSegment(state, captureStart, captureEnd, true);\n writeFoldedLines(state, skipSeparationSpace(state, false, nodeIndent));\n captureStart = captureEnd = state.position;\n\n } else if (state.position === state.lineStart && testDocumentSeparator(state)) {\n throwError(state, 'unexpected end of the document within a single quoted scalar');\n\n } else {\n state.position++;\n captureEnd = state.position;\n }\n }\n\n throwError(state, 'unexpected end of the stream within a single quoted scalar');\n}\n\nfunction readDoubleQuotedScalar(state, nodeIndent) {\n var captureStart,\n captureEnd,\n hexLength,\n hexResult,\n tmp,\n ch;\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch !== 0x22/* \" */) {\n return false;\n }\n\n state.kind = 'scalar';\n state.result = '';\n state.position++;\n captureStart = captureEnd = state.position;\n\n while ((ch = state.input.charCodeAt(state.position)) !== 0) {\n if (ch === 0x22/* \" */) {\n captureSegment(state, captureStart, state.position, true);\n state.position++;\n return true;\n\n } else if (ch === 0x5C/* \\ */) {\n captureSegment(state, captureStart, state.position, true);\n ch = state.input.charCodeAt(++state.position);\n\n if (is_EOL(ch)) {\n skipSeparationSpace(state, false, nodeIndent);\n\n // TODO: rework to inline fn with no type cast?\n } else if (ch < 256 && simpleEscapeCheck[ch]) {\n state.result += simpleEscapeMap[ch];\n state.position++;\n\n } else if ((tmp = escapedHexLen(ch)) > 0) {\n hexLength = tmp;\n hexResult = 0;\n\n for (; hexLength > 0; hexLength--) {\n ch = state.input.charCodeAt(++state.position);\n\n if ((tmp = fromHexCode(ch)) >= 0) {\n hexResult = (hexResult << 4) + tmp;\n\n } else {\n throwError(state, 'expected hexadecimal character');\n }\n }\n\n state.result += charFromCodepoint(hexResult);\n\n state.position++;\n\n } else {\n throwError(state, 'unknown escape sequence');\n }\n\n captureStart = captureEnd = state.position;\n\n } else if (is_EOL(ch)) {\n captureSegment(state, captureStart, captureEnd, true);\n writeFoldedLines(state, skipSeparationSpace(state, false, nodeIndent));\n captureStart = captureEnd = state.position;\n\n } else if (state.position === state.lineStart && testDocumentSeparator(state)) {\n throwError(state, 'unexpected end of the document within a double quoted scalar');\n\n } else {\n state.position++;\n captureEnd = state.position;\n }\n }\n\n throwError(state, 'unexpected end of the stream within a double quoted scalar');\n}\n\nfunction readFlowCollection(state, nodeIndent) {\n var readNext = true,\n _line,\n _lineStart,\n _pos,\n _tag = state.tag,\n _result,\n _anchor = state.anchor,\n following,\n terminator,\n isPair,\n isExplicitPair,\n isMapping,\n overridableKeys = Object.create(null),\n keyNode,\n keyTag,\n valueNode,\n ch;\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch === 0x5B/* [ */) {\n terminator = 0x5D;/* ] */\n isMapping = false;\n _result = [];\n } else if (ch === 0x7B/* { */) {\n terminator = 0x7D;/* } */\n isMapping = true;\n _result = {};\n } else {\n return false;\n }\n\n if (state.anchor !== null) {\n state.anchorMap[state.anchor] = _result;\n }\n\n ch = state.input.charCodeAt(++state.position);\n\n while (ch !== 0) {\n skipSeparationSpace(state, true, nodeIndent);\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch === terminator) {\n state.position++;\n state.tag = _tag;\n state.anchor = _anchor;\n state.kind = isMapping ? 'mapping' : 'sequence';\n state.result = _result;\n return true;\n } else if (!readNext) {\n throwError(state, 'missed comma between flow collection entries');\n } else if (ch === 0x2C/* , */) {\n // \"flow collection entries can never be completely empty\", as per YAML 1.2, section 7.4\n throwError(state, \"expected the node content, but found ','\");\n }\n\n keyTag = keyNode = valueNode = null;\n isPair = isExplicitPair = false;\n\n if (ch === 0x3F/* ? */) {\n following = state.input.charCodeAt(state.position + 1);\n\n if (is_WS_OR_EOL(following)) {\n isPair = isExplicitPair = true;\n state.position++;\n skipSeparationSpace(state, true, nodeIndent);\n }\n }\n\n _line = state.line; // Save the current line.\n _lineStart = state.lineStart;\n _pos = state.position;\n composeNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true);\n keyTag = state.tag;\n keyNode = state.result;\n skipSeparationSpace(state, true, nodeIndent);\n\n ch = state.input.charCodeAt(state.position);\n\n if ((isExplicitPair || state.line === _line) && ch === 0x3A/* : */) {\n isPair = true;\n ch = state.input.charCodeAt(++state.position);\n skipSeparationSpace(state, true, nodeIndent);\n composeNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true);\n valueNode = state.result;\n }\n\n if (isMapping) {\n storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, _line, _lineStart, _pos);\n } else if (isPair) {\n _result.push(storeMappingPair(state, null, overridableKeys, keyTag, keyNode, valueNode, _line, _lineStart, _pos));\n } else {\n _result.push(keyNode);\n }\n\n skipSeparationSpace(state, true, nodeIndent);\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch === 0x2C/* , */) {\n readNext = true;\n ch = state.input.charCodeAt(++state.position);\n } else {\n readNext = false;\n }\n }\n\n throwError(state, 'unexpected end of the stream within a flow collection');\n}\n\nfunction readBlockScalar(state, nodeIndent) {\n var captureStart,\n folding,\n chomping = CHOMPING_CLIP,\n didReadContent = false,\n detectedIndent = false,\n textIndent = nodeIndent,\n emptyLines = 0,\n atMoreIndented = false,\n tmp,\n ch;\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch === 0x7C/* | */) {\n folding = false;\n } else if (ch === 0x3E/* > */) {\n folding = true;\n } else {\n return false;\n }\n\n state.kind = 'scalar';\n state.result = '';\n\n while (ch !== 0) {\n ch = state.input.charCodeAt(++state.position);\n\n if (ch === 0x2B/* + */ || ch === 0x2D/* - */) {\n if (CHOMPING_CLIP === chomping) {\n chomping = (ch === 0x2B/* + */) ? CHOMPING_KEEP : CHOMPING_STRIP;\n } else {\n throwError(state, 'repeat of a chomping mode identifier');\n }\n\n } else if ((tmp = fromDecimalCode(ch)) >= 0) {\n if (tmp === 0) {\n throwError(state, 'bad explicit indentation width of a block scalar; it cannot be less than one');\n } else if (!detectedIndent) {\n textIndent = nodeIndent + tmp - 1;\n detectedIndent = true;\n } else {\n throwError(state, 'repeat of an indentation width identifier');\n }\n\n } else {\n break;\n }\n }\n\n if (is_WHITE_SPACE(ch)) {\n do { ch = state.input.charCodeAt(++state.position); }\n while (is_WHITE_SPACE(ch));\n\n if (ch === 0x23/* # */) {\n do { ch = state.input.charCodeAt(++state.position); }\n while (!is_EOL(ch) && (ch !== 0));\n }\n }\n\n while (ch !== 0) {\n readLineBreak(state);\n state.lineIndent = 0;\n\n ch = state.input.charCodeAt(state.position);\n\n while ((!detectedIndent || state.lineIndent < textIndent) &&\n (ch === 0x20/* Space */)) {\n state.lineIndent++;\n ch = state.input.charCodeAt(++state.position);\n }\n\n if (!detectedIndent && state.lineIndent > textIndent) {\n textIndent = state.lineIndent;\n }\n\n if (is_EOL(ch)) {\n emptyLines++;\n continue;\n }\n\n // End of the scalar.\n if (state.lineIndent < textIndent) {\n\n // Perform the chomping.\n if (chomping === CHOMPING_KEEP) {\n state.result += common.repeat('\\n', didReadContent ? 1 + emptyLines : emptyLines);\n } else if (chomping === CHOMPING_CLIP) {\n if (didReadContent) { // i.e. only if the scalar is not empty.\n state.result += '\\n';\n }\n }\n\n // Break this `while` cycle and go to the funciton's epilogue.\n break;\n }\n\n // Folded style: use fancy rules to handle line breaks.\n if (folding) {\n\n // Lines starting with white space characters (more-indented lines) are not folded.\n if (is_WHITE_SPACE(ch)) {\n atMoreIndented = true;\n // except for the first content line (cf. Example 8.1)\n state.result += common.repeat('\\n', didReadContent ? 1 + emptyLines : emptyLines);\n\n // End of more-indented block.\n } else if (atMoreIndented) {\n atMoreIndented = false;\n state.result += common.repeat('\\n', emptyLines + 1);\n\n // Just one line break - perceive as the same line.\n } else if (emptyLines === 0) {\n if (didReadContent) { // i.e. only if we have already read some scalar content.\n state.result += ' ';\n }\n\n // Several line breaks - perceive as different lines.\n } else {\n state.result += common.repeat('\\n', emptyLines);\n }\n\n // Literal style: just add exact number of line breaks between content lines.\n } else {\n // Keep all line breaks except the header line break.\n state.result += common.repeat('\\n', didReadContent ? 1 + emptyLines : emptyLines);\n }\n\n didReadContent = true;\n detectedIndent = true;\n emptyLines = 0;\n captureStart = state.position;\n\n while (!is_EOL(ch) && (ch !== 0)) {\n ch = state.input.charCodeAt(++state.position);\n }\n\n captureSegment(state, captureStart, state.position, false);\n }\n\n return true;\n}\n\nfunction readBlockSequence(state, nodeIndent) {\n var _line,\n _tag = state.tag,\n _anchor = state.anchor,\n _result = [],\n following,\n detected = false,\n ch;\n\n // there is a leading tab before this token, so it can't be a block sequence/mapping;\n // it can still be flow sequence/mapping or a scalar\n if (state.firstTabInLine !== -1) return false;\n\n if (state.anchor !== null) {\n state.anchorMap[state.anchor] = _result;\n }\n\n ch = state.input.charCodeAt(state.position);\n\n while (ch !== 0) {\n if (state.firstTabInLine !== -1) {\n state.position = state.firstTabInLine;\n throwError(state, 'tab characters must not be used in indentation');\n }\n\n if (ch !== 0x2D/* - */) {\n break;\n }\n\n following = state.input.charCodeAt(state.position + 1);\n\n if (!is_WS_OR_EOL(following)) {\n break;\n }\n\n detected = true;\n state.position++;\n\n if (skipSeparationSpace(state, true, -1)) {\n if (state.lineIndent <= nodeIndent) {\n _result.push(null);\n ch = state.input.charCodeAt(state.position);\n continue;\n }\n }\n\n _line = state.line;\n composeNode(state, nodeIndent, CONTEXT_BLOCK_IN, false, true);\n _result.push(state.result);\n skipSeparationSpace(state, true, -1);\n\n ch = state.input.charCodeAt(state.position);\n\n if ((state.line === _line || state.lineIndent > nodeIndent) && (ch !== 0)) {\n throwError(state, 'bad indentation of a sequence entry');\n } else if (state.lineIndent < nodeIndent) {\n break;\n }\n }\n\n if (detected) {\n state.tag = _tag;\n state.anchor = _anchor;\n state.kind = 'sequence';\n state.result = _result;\n return true;\n }\n return false;\n}\n\nfunction readBlockMapping(state, nodeIndent, flowIndent) {\n var following,\n allowCompact,\n _line,\n _keyLine,\n _keyLineStart,\n _keyPos,\n _tag = state.tag,\n _anchor = state.anchor,\n _result = {},\n overridableKeys = Object.create(null),\n keyTag = null,\n keyNode = null,\n valueNode = null,\n atExplicitKey = false,\n detected = false,\n ch;\n\n // there is a leading tab before this token, so it can't be a block sequence/mapping;\n // it can still be flow sequence/mapping or a scalar\n if (state.firstTabInLine !== -1) return false;\n\n if (state.anchor !== null) {\n state.anchorMap[state.anchor] = _result;\n }\n\n ch = state.input.charCodeAt(state.position);\n\n while (ch !== 0) {\n if (!atExplicitKey && state.firstTabInLine !== -1) {\n state.position = state.firstTabInLine;\n throwError(state, 'tab characters must not be used in indentation');\n }\n\n following = state.input.charCodeAt(state.position + 1);\n _line = state.line; // Save the current line.\n\n //\n // Explicit notation case. There are two separate blocks:\n // first for the key (denoted by \"?\") and second for the value (denoted by \":\")\n //\n if ((ch === 0x3F/* ? */ || ch === 0x3A/* : */) && is_WS_OR_EOL(following)) {\n\n if (ch === 0x3F/* ? */) {\n if (atExplicitKey) {\n storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos);\n keyTag = keyNode = valueNode = null;\n }\n\n detected = true;\n atExplicitKey = true;\n allowCompact = true;\n\n } else if (atExplicitKey) {\n // i.e. 0x3A/* : */ === character after the explicit key.\n atExplicitKey = false;\n allowCompact = true;\n\n } else {\n throwError(state, 'incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line');\n }\n\n state.position += 1;\n ch = following;\n\n //\n // Implicit notation case. Flow-style node as the key first, then \":\", and the value.\n //\n } else {\n _keyLine = state.line;\n _keyLineStart = state.lineStart;\n _keyPos = state.position;\n\n if (!composeNode(state, flowIndent, CONTEXT_FLOW_OUT, false, true)) {\n // Neither implicit nor explicit notation.\n // Reading is done. Go to the epilogue.\n break;\n }\n\n if (state.line === _line) {\n ch = state.input.charCodeAt(state.position);\n\n while (is_WHITE_SPACE(ch)) {\n ch = state.input.charCodeAt(++state.position);\n }\n\n if (ch === 0x3A/* : */) {\n ch = state.input.charCodeAt(++state.position);\n\n if (!is_WS_OR_EOL(ch)) {\n throwError(state, 'a whitespace character is expected after the key-value separator within a block mapping');\n }\n\n if (atExplicitKey) {\n storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos);\n keyTag = keyNode = valueNode = null;\n }\n\n detected = true;\n atExplicitKey = false;\n allowCompact = false;\n keyTag = state.tag;\n keyNode = state.result;\n\n } else if (detected) {\n throwError(state, 'can not read an implicit mapping pair; a colon is missed');\n\n } else {\n state.tag = _tag;\n state.anchor = _anchor;\n return true; // Keep the result of `composeNode`.\n }\n\n } else if (detected) {\n throwError(state, 'can not read a block mapping entry; a multiline key may not be an implicit key');\n\n } else {\n state.tag = _tag;\n state.anchor = _anchor;\n return true; // Keep the result of `composeNode`.\n }\n }\n\n //\n // Common reading code for both explicit and implicit notations.\n //\n if (state.line === _line || state.lineIndent > nodeIndent) {\n if (atExplicitKey) {\n _keyLine = state.line;\n _keyLineStart = state.lineStart;\n _keyPos = state.position;\n }\n\n if (composeNode(state, nodeIndent, CONTEXT_BLOCK_OUT, true, allowCompact)) {\n if (atExplicitKey) {\n keyNode = state.result;\n } else {\n valueNode = state.result;\n }\n }\n\n if (!atExplicitKey) {\n storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, _keyLine, _keyLineStart, _keyPos);\n keyTag = keyNode = valueNode = null;\n }\n\n skipSeparationSpace(state, true, -1);\n ch = state.input.charCodeAt(state.position);\n }\n\n if ((state.line === _line || state.lineIndent > nodeIndent) && (ch !== 0)) {\n throwError(state, 'bad indentation of a mapping entry');\n } else if (state.lineIndent < nodeIndent) {\n break;\n }\n }\n\n //\n // Epilogue.\n //\n\n // Special case: last mapping's node contains only the key in explicit notation.\n if (atExplicitKey) {\n storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos);\n }\n\n // Expose the resulting mapping.\n if (detected) {\n state.tag = _tag;\n state.anchor = _anchor;\n state.kind = 'mapping';\n state.result = _result;\n }\n\n return detected;\n}\n\nfunction readTagProperty(state) {\n var _position,\n isVerbatim = false,\n isNamed = false,\n tagHandle,\n tagName,\n ch;\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch !== 0x21/* ! */) return false;\n\n if (state.tag !== null) {\n throwError(state, 'duplication of a tag property');\n }\n\n ch = state.input.charCodeAt(++state.position);\n\n if (ch === 0x3C/* < */) {\n isVerbatim = true;\n ch = state.input.charCodeAt(++state.position);\n\n } else if (ch === 0x21/* ! */) {\n isNamed = true;\n tagHandle = '!!';\n ch = state.input.charCodeAt(++state.position);\n\n } else {\n tagHandle = '!';\n }\n\n _position = state.position;\n\n if (isVerbatim) {\n do { ch = state.input.charCodeAt(++state.position); }\n while (ch !== 0 && ch !== 0x3E/* > */);\n\n if (state.position < state.length) {\n tagName = state.input.slice(_position, state.position);\n ch = state.input.charCodeAt(++state.position);\n } else {\n throwError(state, 'unexpected end of the stream within a verbatim tag');\n }\n } else {\n while (ch !== 0 && !is_WS_OR_EOL(ch)) {\n\n if (ch === 0x21/* ! */) {\n if (!isNamed) {\n tagHandle = state.input.slice(_position - 1, state.position + 1);\n\n if (!PATTERN_TAG_HANDLE.test(tagHandle)) {\n throwError(state, 'named tag handle cannot contain such characters');\n }\n\n isNamed = true;\n _position = state.position + 1;\n } else {\n throwError(state, 'tag suffix cannot contain exclamation marks');\n }\n }\n\n ch = state.input.charCodeAt(++state.position);\n }\n\n tagName = state.input.slice(_position, state.position);\n\n if (PATTERN_FLOW_INDICATORS.test(tagName)) {\n throwError(state, 'tag suffix cannot contain flow indicator characters');\n }\n }\n\n if (tagName && !PATTERN_TAG_URI.test(tagName)) {\n throwError(state, 'tag name cannot contain such characters: ' + tagName);\n }\n\n try {\n tagName = decodeURIComponent(tagName);\n } catch (err) {\n throwError(state, 'tag name is malformed: ' + tagName);\n }\n\n if (isVerbatim) {\n state.tag = tagName;\n\n } else if (_hasOwnProperty.call(state.tagMap, tagHandle)) {\n state.tag = state.tagMap[tagHandle] + tagName;\n\n } else if (tagHandle === '!') {\n state.tag = '!' + tagName;\n\n } else if (tagHandle === '!!') {\n state.tag = 'tag:yaml.org,2002:' + tagName;\n\n } else {\n throwError(state, 'undeclared tag handle \"' + tagHandle + '\"');\n }\n\n return true;\n}\n\nfunction readAnchorProperty(state) {\n var _position,\n ch;\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch !== 0x26/* & */) return false;\n\n if (state.anchor !== null) {\n throwError(state, 'duplication of an anchor property');\n }\n\n ch = state.input.charCodeAt(++state.position);\n _position = state.position;\n\n while (ch !== 0 && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)) {\n ch = state.input.charCodeAt(++state.position);\n }\n\n if (state.position === _position) {\n throwError(state, 'name of an anchor node must contain at least one character');\n }\n\n state.anchor = state.input.slice(_position, state.position);\n return true;\n}\n\nfunction readAlias(state) {\n var _position, alias,\n ch;\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch !== 0x2A/* * */) return false;\n\n ch = state.input.charCodeAt(++state.position);\n _position = state.position;\n\n while (ch !== 0 && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)) {\n ch = state.input.charCodeAt(++state.position);\n }\n\n if (state.position === _position) {\n throwError(state, 'name of an alias node must contain at least one character');\n }\n\n alias = state.input.slice(_position, state.position);\n\n if (!_hasOwnProperty.call(state.anchorMap, alias)) {\n throwError(state, 'unidentified alias \"' + alias + '\"');\n }\n\n state.result = state.anchorMap[alias];\n skipSeparationSpace(state, true, -1);\n return true;\n}\n\nfunction composeNode(state, parentIndent, nodeContext, allowToSeek, allowCompact) {\n var allowBlockStyles,\n allowBlockScalars,\n allowBlockCollections,\n indentStatus = 1, // 1: this>parent, 0: this=parent, -1: this<parent\n atNewLine = false,\n hasContent = false,\n typeIndex,\n typeQuantity,\n typeList,\n type,\n flowIndent,\n blockIndent;\n\n if (state.listener !== null) {\n state.listener('open', state);\n }\n\n state.tag = null;\n state.anchor = null;\n state.kind = null;\n state.result = null;\n\n allowBlockStyles = allowBlockScalars = allowBlockCollections =\n CONTEXT_BLOCK_OUT === nodeContext ||\n CONTEXT_BLOCK_IN === nodeContext;\n\n if (allowToSeek) {\n if (skipSeparationSpace(state, true, -1)) {\n atNewLine = true;\n\n if (state.lineIndent > parentIndent) {\n indentStatus = 1;\n } else if (state.lineIndent === parentIndent) {\n indentStatus = 0;\n } else if (state.lineIndent < parentIndent) {\n indentStatus = -1;\n }\n }\n }\n\n if (indentStatus === 1) {\n while (readTagProperty(state) || readAnchorProperty(state)) {\n if (skipSeparationSpace(state, true, -1)) {\n atNewLine = true;\n allowBlockCollections = allowBlockStyles;\n\n if (state.lineIndent > parentIndent) {\n indentStatus = 1;\n } else if (state.lineIndent === parentIndent) {\n indentStatus = 0;\n } else if (state.lineIndent < parentIndent) {\n indentStatus = -1;\n }\n } else {\n allowBlockCollections = false;\n }\n }\n }\n\n if (allowBlockCollections) {\n allowBlockCollections = atNewLine || allowCompact;\n }\n\n if (indentStatus === 1 || CONTEXT_BLOCK_OUT === nodeContext) {\n if (CONTEXT_FLOW_IN === nodeContext || CONTEXT_FLOW_OUT === nodeContext) {\n flowIndent = parentIndent;\n } else {\n flowIndent = parentIndent + 1;\n }\n\n blockIndent = state.position - state.lineStart;\n\n if (indentStatus === 1) {\n if (allowBlockCollections &&\n (readBlockSequence(state, blockIndent) ||\n readBlockMapping(state, blockIndent, flowIndent)) ||\n readFlowCollection(state, flowIndent)) {\n hasContent = true;\n } else {\n if ((allowBlockScalars && readBlockScalar(state, flowIndent)) ||\n readSingleQuotedScalar(state, flowIndent) ||\n readDoubleQuotedScalar(state, flowIndent)) {\n hasContent = true;\n\n } else if (readAlias(state)) {\n hasContent = true;\n\n if (state.tag !== null || state.anchor !== null) {\n throwError(state, 'alias node should not have any properties');\n }\n\n } else if (readPlainScalar(state, flowIndent, CONTEXT_FLOW_IN === nodeContext)) {\n hasContent = true;\n\n if (state.tag === null) {\n state.tag = '?';\n }\n }\n\n if (state.anchor !== null) {\n state.anchorMap[state.anchor] = state.result;\n }\n }\n } else if (indentStatus === 0) {\n // Special case: block sequences are allowed to have same indentation level as the parent.\n // http://www.yaml.org/spec/1.2/spec.html#id2799784\n hasContent = allowBlockCollections && readBlockSequence(state, blockIndent);\n }\n }\n\n if (state.tag === null) {\n if (state.anchor !== null) {\n state.anchorMap[state.anchor] = state.result;\n }\n\n } else if (state.tag === '?') {\n // Implicit resolving is not allowed for non-scalar types, and '?'\n // non-specific tag is only automatically assigned to plain scalars.\n //\n // We only need to check kind conformity in case user explicitly assigns '?'\n // tag, for example like this: \"!<?> [0]\"\n //\n if (state.result !== null && state.kind !== 'scalar') {\n throwError(state, 'unacceptable node kind for !<?> tag; it should be \"scalar\", not \"' + state.kind + '\"');\n }\n\n for (typeIndex = 0, typeQuantity = state.implicitTypes.length; typeIndex < typeQuantity; typeIndex += 1) {\n type = state.implicitTypes[typeIndex];\n\n if (type.resolve(state.result)) { // `state.result` updated in resolver if matched\n state.result = type.construct(state.result);\n state.tag = type.tag;\n if (state.anchor !== null) {\n state.anchorMap[state.anchor] = state.result;\n }\n break;\n }\n }\n } else if (state.tag !== '!') {\n if (_hasOwnProperty.call(state.typeMap[state.kind || 'fallback'], state.tag)) {\n type = state.typeMap[state.kind || 'fallback'][state.tag];\n } else {\n // looking for multi type\n type = null;\n typeList = state.typeMap.multi[state.kind || 'fallback'];\n\n for (typeIndex = 0, typeQuantity = typeList.length; typeIndex < typeQuantity; typeIndex += 1) {\n if (state.tag.slice(0, typeList[typeIndex].tag.length) === typeList[typeIndex].tag) {\n type = typeList[typeIndex];\n break;\n }\n }\n }\n\n if (!type) {\n throwError(state, 'unknown tag !<' + state.tag + '>');\n }\n\n if (state.result !== null && type.kind !== state.kind) {\n throwError(state, 'unacceptable node kind for !<' + state.tag + '> tag; it should be \"' + type.kind + '\", not \"' + state.kind + '\"');\n }\n\n if (!type.resolve(state.result, state.tag)) { // `state.result` updated in resolver if matched\n throwError(state, 'cannot resolve a node with !<' + state.tag + '> explicit tag');\n } else {\n state.result = type.construct(state.result, state.tag);\n if (state.anchor !== null) {\n state.anchorMap[state.anchor] = state.result;\n }\n }\n }\n\n if (state.listener !== null) {\n state.listener('close', state);\n }\n return state.tag !== null || state.anchor !== null || hasContent;\n}\n\nfunction readDocument(state) {\n var documentStart = state.position,\n _position,\n directiveName,\n directiveArgs,\n hasDirectives = false,\n ch;\n\n state.version = null;\n state.checkLineBreaks = state.legacy;\n state.tagMap = Object.create(null);\n state.anchorMap = Object.create(null);\n\n while ((ch = state.input.charCodeAt(state.position)) !== 0) {\n skipSeparationSpace(state, true, -1);\n\n ch = state.input.charCodeAt(state.position);\n\n if (state.lineIndent > 0 || ch !== 0x25/* % */) {\n break;\n }\n\n hasDirectives = true;\n ch = state.input.charCodeAt(++state.position);\n _position = state.position;\n\n while (ch !== 0 && !is_WS_OR_EOL(ch)) {\n ch = state.input.charCodeAt(++state.position);\n }\n\n directiveName = state.input.slice(_position, state.position);\n directiveArgs = [];\n\n if (directiveName.length < 1) {\n throwError(state, 'directive name must not be less than one character in length');\n }\n\n while (ch !== 0) {\n while (is_WHITE_SPACE(ch)) {\n ch = state.input.charCodeAt(++state.position);\n }\n\n if (ch === 0x23/* # */) {\n do { ch = state.input.charCodeAt(++state.position); }\n while (ch !== 0 && !is_EOL(ch));\n break;\n }\n\n if (is_EOL(ch)) break;\n\n _position = state.position;\n\n while (ch !== 0 && !is_WS_OR_EOL(ch)) {\n ch = state.input.charCodeAt(++state.position);\n }\n\n directiveArgs.push(state.input.slice(_position, state.position));\n }\n\n if (ch !== 0) readLineBreak(state);\n\n if (_hasOwnProperty.call(directiveHandlers, directiveName)) {\n directiveHandlers[directiveName](state, directiveName, directiveArgs);\n } else {\n throwWarning(state, 'unknown document directive \"' + directiveName + '\"');\n }\n }\n\n skipSeparationSpace(state, true, -1);\n\n if (state.lineIndent === 0 &&\n state.input.charCodeAt(state.position) === 0x2D/* - */ &&\n state.input.charCodeAt(state.position + 1) === 0x2D/* - */ &&\n state.input.charCodeAt(state.position + 2) === 0x2D/* - */) {\n state.position += 3;\n skipSeparationSpace(state, true, -1);\n\n } else if (hasDirectives) {\n throwError(state, 'directives end mark is expected');\n }\n\n composeNode(state, state.lineIndent - 1, CONTEXT_BLOCK_OUT, false, true);\n skipSeparationSpace(state, true, -1);\n\n if (state.checkLineBreaks &&\n PATTERN_NON_ASCII_LINE_BREAKS.test(state.input.slice(documentStart, state.position))) {\n throwWarning(state, 'non-ASCII line breaks are interpreted as content');\n }\n\n state.documents.push(state.result);\n\n if (state.position === state.lineStart && testDocumentSeparator(state)) {\n\n if (state.input.charCodeAt(state.position) === 0x2E/* . */) {\n state.position += 3;\n skipSeparationSpace(state, true, -1);\n }\n return;\n }\n\n if (state.position < (state.length - 1)) {\n throwError(state, 'end of the stream or a document separator is expected');\n } else {\n return;\n }\n}\n\n\nfunction loadDocuments(input, options) {\n input = String(input);\n options = options || {};\n\n if (input.length !== 0) {\n\n // Add tailing `\\n` if not exists\n if (input.charCodeAt(input.length - 1) !== 0x0A/* LF */ &&\n input.charCodeAt(input.length - 1) !== 0x0D/* CR */) {\n input += '\\n';\n }\n\n // Strip BOM\n if (input.charCodeAt(0) === 0xFEFF) {\n input = input.slice(1);\n }\n }\n\n var state = new State(input, options);\n\n var nullpos = input.indexOf('\\0');\n\n if (nullpos !== -1) {\n state.position = nullpos;\n throwError(state, 'null byte is not allowed in input');\n }\n\n // Use 0 as string terminator. That significantly simplifies bounds check.\n state.input += '\\0';\n\n while (state.input.charCodeAt(state.position) === 0x20/* Space */) {\n state.lineIndent += 1;\n state.position += 1;\n }\n\n while (state.position < (state.length - 1)) {\n readDocument(state);\n }\n\n return state.documents;\n}\n\n\nfunction loadAll(input, iterator, options) {\n if (iterator !== null && typeof iterator === 'object' && typeof options === 'undefined') {\n options = iterator;\n iterator = null;\n }\n\n var documents = loadDocuments(input, options);\n\n if (typeof iterator !== 'function') {\n return documents;\n }\n\n for (var index = 0, length = documents.length; index < length; index += 1) {\n iterator(documents[index]);\n }\n}\n\n\nfunction load(input, options) {\n var documents = loadDocuments(input, options);\n\n if (documents.length === 0) {\n /*eslint-disable no-undefined*/\n return undefined;\n } else if (documents.length === 1) {\n return documents[0];\n }\n throw new YAMLException('expected a single document in the stream, but found more');\n}\n\n\nmodule.exports.loadAll = loadAll;\nmodule.exports.load = load;\n", "'use strict';\n\n/*eslint-disable no-use-before-define*/\n\nvar common = require('./common');\nvar YAMLException = require('./exception');\nvar DEFAULT_SCHEMA = require('./schema/default');\n\nvar _toString = Object.prototype.toString;\nvar _hasOwnProperty = Object.prototype.hasOwnProperty;\n\nvar CHAR_BOM = 0xFEFF;\nvar CHAR_TAB = 0x09; /* Tab */\nvar CHAR_LINE_FEED = 0x0A; /* LF */\nvar CHAR_CARRIAGE_RETURN = 0x0D; /* CR */\nvar CHAR_SPACE = 0x20; /* Space */\nvar CHAR_EXCLAMATION = 0x21; /* ! */\nvar CHAR_DOUBLE_QUOTE = 0x22; /* \" */\nvar CHAR_SHARP = 0x23; /* # */\nvar CHAR_PERCENT = 0x25; /* % */\nvar CHAR_AMPERSAND = 0x26; /* & */\nvar CHAR_SINGLE_QUOTE = 0x27; /* ' */\nvar CHAR_ASTERISK = 0x2A; /* * */\nvar CHAR_COMMA = 0x2C; /* , */\nvar CHAR_MINUS = 0x2D; /* - */\nvar CHAR_COLON = 0x3A; /* : */\nvar CHAR_EQUALS = 0x3D; /* = */\nvar CHAR_GREATER_THAN = 0x3E; /* > */\nvar CHAR_QUESTION = 0x3F; /* ? */\nvar CHAR_COMMERCIAL_AT = 0x40; /* @ */\nvar CHAR_LEFT_SQUARE_BRACKET = 0x5B; /* [ */\nvar CHAR_RIGHT_SQUARE_BRACKET = 0x5D; /* ] */\nvar CHAR_GRAVE_ACCENT = 0x60; /* ` */\nvar CHAR_LEFT_CURLY_BRACKET = 0x7B; /* { */\nvar CHAR_VERTICAL_LINE = 0x7C; /* | */\nvar CHAR_RIGHT_CURLY_BRACKET = 0x7D; /* } */\n\nvar ESCAPE_SEQUENCES = {};\n\nESCAPE_SEQUENCES[0x00] = '\\\\0';\nESCAPE_SEQUENCES[0x07] = '\\\\a';\nESCAPE_SEQUENCES[0x08] = '\\\\b';\nESCAPE_SEQUENCES[0x09] = '\\\\t';\nESCAPE_SEQUENCES[0x0A] = '\\\\n';\nESCAPE_SEQUENCES[0x0B] = '\\\\v';\nESCAPE_SEQUENCES[0x0C] = '\\\\f';\nESCAPE_SEQUENCES[0x0D] = '\\\\r';\nESCAPE_SEQUENCES[0x1B] = '\\\\e';\nESCAPE_SEQUENCES[0x22] = '\\\\\"';\nESCAPE_SEQUENCES[0x5C] = '\\\\\\\\';\nESCAPE_SEQUENCES[0x85] = '\\\\N';\nESCAPE_SEQUENCES[0xA0] = '\\\\_';\nESCAPE_SEQUENCES[0x2028] = '\\\\L';\nESCAPE_SEQUENCES[0x2029] = '\\\\P';\n\nvar DEPRECATED_BOOLEANS_SYNTAX = [\n 'y', 'Y', 'yes', 'Yes', 'YES', 'on', 'On', 'ON',\n 'n', 'N', 'no', 'No', 'NO', 'off', 'Off', 'OFF'\n];\n\nvar DEPRECATED_BASE60_SYNTAX = /^[-+]?[0-9_]+(?::[0-9_]+)+(?:\\.[0-9_]*)?$/;\n\nfunction compileStyleMap(schema, map) {\n var result, keys, index, length, tag, style, type;\n\n if (map === null) return {};\n\n result = {};\n keys = Object.keys(map);\n\n for (index = 0, length = keys.length; index < length; index += 1) {\n tag = keys[index];\n style = String(map[tag]);\n\n if (tag.slice(0, 2) === '!!') {\n tag = 'tag:yaml.org,2002:' + tag.slice(2);\n }\n type = schema.compiledTypeMap['fallback'][tag];\n\n if (type && _hasOwnProperty.call(type.styleAliases, style)) {\n style = type.styleAliases[style];\n }\n\n result[tag] = style;\n }\n\n return result;\n}\n\nfunction encodeHex(character) {\n var string, handle, length;\n\n string = character.toString(16).toUpperCase();\n\n if (character <= 0xFF) {\n handle = 'x';\n length = 2;\n } else if (character <= 0xFFFF) {\n handle = 'u';\n length = 4;\n } else if (character <= 0xFFFFFFFF) {\n handle = 'U';\n length = 8;\n } else {\n throw new YAMLException('code point within a string may not be greater than 0xFFFFFFFF');\n }\n\n return '\\\\' + handle + common.repeat('0', length - string.length) + string;\n}\n\n\nvar QUOTING_TYPE_SINGLE = 1,\n QUOTING_TYPE_DOUBLE = 2;\n\nfunction State(options) {\n this.schema = options['schema'] || DEFAULT_SCHEMA;\n this.indent = Math.max(1, (options['indent'] || 2));\n this.noArrayIndent = options['noArrayIndent'] || false;\n this.skipInvalid = options['skipInvalid'] || false;\n this.flowLevel = (common.isNothing(options['flowLevel']) ? -1 : options['flowLevel']);\n this.styleMap = compileStyleMap(this.schema, options['styles'] || null);\n this.sortKeys = options['sortKeys'] || false;\n this.lineWidth = options['lineWidth'] || 80;\n this.noRefs = options['noRefs'] || false;\n this.noCompatMode = options['noCompatMode'] || false;\n this.condenseFlow = options['condenseFlow'] || false;\n this.quotingType = options['quotingType'] === '\"' ? QUOTING_TYPE_DOUBLE : QUOTING_TYPE_SINGLE;\n this.forceQuotes = options['forceQuotes'] || false;\n this.replacer = typeof options['replacer'] === 'function' ? options['replacer'] : null;\n\n this.implicitTypes = this.schema.compiledImplicit;\n this.explicitTypes = this.schema.compiledExplicit;\n\n this.tag = null;\n this.result = '';\n\n this.duplicates = [];\n this.usedDuplicates = null;\n}\n\n// Indents every line in a string. Empty lines (\\n only) are not indented.\nfunction indentString(string, spaces) {\n var ind = common.repeat(' ', spaces),\n position = 0,\n next = -1,\n result = '',\n line,\n length = string.length;\n\n while (position < length) {\n next = string.indexOf('\\n', position);\n if (next === -1) {\n line = string.slice(position);\n position = length;\n } else {\n line = string.slice(position, next + 1);\n position = next + 1;\n }\n\n if (line.length && line !== '\\n') result += ind;\n\n result += line;\n }\n\n return result;\n}\n\nfunction generateNextLine(state, level) {\n return '\\n' + common.repeat(' ', state.indent * level);\n}\n\nfunction testImplicitResolving(state, str) {\n var index, length, type;\n\n for (index = 0, length = state.implicitTypes.length; index < length; index += 1) {\n type = state.implicitTypes[index];\n\n if (type.resolve(str)) {\n return true;\n }\n }\n\n return false;\n}\n\n// [33] s-white ::= s-space | s-tab\nfunction isWhitespace(c) {\n return c === CHAR_SPACE || c === CHAR_TAB;\n}\n\n// Returns true if the character can be printed without escaping.\n// From YAML 1.2: \"any allowed characters known to be non-printable\n// should also be escaped. [However,] This isn\u2019t mandatory\"\n// Derived from nb-char - \\t - #x85 - #xA0 - #x2028 - #x2029.\nfunction isPrintable(c) {\n return (0x00020 <= c && c <= 0x00007E)\n || ((0x000A1 <= c && c <= 0x00D7FF) && c !== 0x2028 && c !== 0x2029)\n || ((0x0E000 <= c && c <= 0x00FFFD) && c !== CHAR_BOM)\n || (0x10000 <= c && c <= 0x10FFFF);\n}\n\n// [34] ns-char ::= nb-char - s-white\n// [27] nb-char ::= c-printable - b-char - c-byte-order-mark\n// [26] b-char ::= b-line-feed | b-carriage-return\n// Including s-white (for some reason, examples doesn't match specs in this aspect)\n// ns-char ::= c-printable - b-line-feed - b-carriage-return - c-byte-order-mark\nfunction isNsCharOrWhitespace(c) {\n return isPrintable(c)\n && c !== CHAR_BOM\n // - b-char\n && c !== CHAR_CARRIAGE_RETURN\n && c !== CHAR_LINE_FEED;\n}\n\n// [127] ns-plain-safe(c) ::= c = flow-out \u21D2 ns-plain-safe-out\n// c = flow-in \u21D2 ns-plain-safe-in\n// c = block-key \u21D2 ns-plain-safe-out\n// c = flow-key \u21D2 ns-plain-safe-in\n// [128] ns-plain-safe-out ::= ns-char\n// [129] ns-plain-safe-in ::= ns-char - c-flow-indicator\n// [130] ns-plain-char(c) ::= ( ns-plain-safe(c) - \u201C:\u201D - \u201C#\u201D )\n// | ( /* An ns-char preceding */ \u201C#\u201D )\n// | ( \u201C:\u201D /* Followed by an ns-plain-safe(c) */ )\nfunction isPlainSafe(c, prev, inblock) {\n var cIsNsCharOrWhitespace = isNsCharOrWhitespace(c);\n var cIsNsChar = cIsNsCharOrWhitespace && !isWhitespace(c);\n return (\n // ns-plain-safe\n inblock ? // c = flow-in\n cIsNsCharOrWhitespace\n : cIsNsCharOrWhitespace\n // - c-flow-indicator\n && c !== CHAR_COMMA\n && c !== CHAR_LEFT_SQUARE_BRACKET\n && c !== CHAR_RIGHT_SQUARE_BRACKET\n && c !== CHAR_LEFT_CURLY_BRACKET\n && c !== CHAR_RIGHT_CURLY_BRACKET\n )\n // ns-plain-char\n && c !== CHAR_SHARP // false on '#'\n && !(prev === CHAR_COLON && !cIsNsChar) // false on ': '\n || (isNsCharOrWhitespace(prev) && !isWhitespace(prev) && c === CHAR_SHARP) // change to true on '[^ ]#'\n || (prev === CHAR_COLON && cIsNsChar); // change to true on ':[^ ]'\n}\n\n// Simplified test for values allowed as the first character in plain style.\nfunction isPlainSafeFirst(c) {\n // Uses a subset of ns-char - c-indicator\n // where ns-char = nb-char - s-white.\n // No support of ( ( \u201C?\u201D | \u201C:\u201D | \u201C-\u201D ) /* Followed by an ns-plain-safe(c)) */ ) part\n return isPrintable(c) && c !== CHAR_BOM\n && !isWhitespace(c) // - s-white\n // - (c-indicator ::=\n // \u201C-\u201D | \u201C?\u201D | \u201C:\u201D | \u201C,\u201D | \u201C[\u201D | \u201C]\u201D | \u201C{\u201D | \u201C}\u201D\n && c !== CHAR_MINUS\n && c !== CHAR_QUESTION\n && c !== CHAR_COLON\n && c !== CHAR_COMMA\n && c !== CHAR_LEFT_SQUARE_BRACKET\n && c !== CHAR_RIGHT_SQUARE_BRACKET\n && c !== CHAR_LEFT_CURLY_BRACKET\n && c !== CHAR_RIGHT_CURLY_BRACKET\n // | \u201C#\u201D | \u201C&\u201D | \u201C*\u201D | \u201C!\u201D | \u201C|\u201D | \u201C=\u201D | \u201C>\u201D | \u201C'\u201D | \u201C\"\u201D\n && c !== CHAR_SHARP\n && c !== CHAR_AMPERSAND\n && c !== CHAR_ASTERISK\n && c !== CHAR_EXCLAMATION\n && c !== CHAR_VERTICAL_LINE\n && c !== CHAR_EQUALS\n && c !== CHAR_GREATER_THAN\n && c !== CHAR_SINGLE_QUOTE\n && c !== CHAR_DOUBLE_QUOTE\n // | \u201C%\u201D | \u201C@\u201D | \u201C`\u201D)\n && c !== CHAR_PERCENT\n && c !== CHAR_COMMERCIAL_AT\n && c !== CHAR_GRAVE_ACCENT;\n}\n\n// Simplified test for values allowed as the last character in plain style.\nfunction isPlainSafeLast(c) {\n // just not whitespace or colon, it will be checked to be plain character later\n return !isWhitespace(c) && c !== CHAR_COLON;\n}\n\n// Same as 'string'.codePointAt(pos), but works in older browsers.\nfunction codePointAt(string, pos) {\n var first = string.charCodeAt(pos), second;\n if (first >= 0xD800 && first <= 0xDBFF && pos + 1 < string.length) {\n second = string.charCodeAt(pos + 1);\n if (second >= 0xDC00 && second <= 0xDFFF) {\n // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\n return (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n }\n }\n return first;\n}\n\n// Determines whether block indentation indicator is required.\nfunction needIndentIndicator(string) {\n var leadingSpaceRe = /^\\n* /;\n return leadingSpaceRe.test(string);\n}\n\nvar STYLE_PLAIN = 1,\n STYLE_SINGLE = 2,\n STYLE_LITERAL = 3,\n STYLE_FOLDED = 4,\n STYLE_DOUBLE = 5;\n\n// Determines which scalar styles are possible and returns the preferred style.\n// lineWidth = -1 => no limit.\n// Pre-conditions: str.length > 0.\n// Post-conditions:\n// STYLE_PLAIN or STYLE_SINGLE => no \\n are in the string.\n// STYLE_LITERAL => no lines are suitable for folding (or lineWidth is -1).\n// STYLE_FOLDED => a line > lineWidth and can be folded (and lineWidth != -1).\nfunction chooseScalarStyle(string, singleLineOnly, indentPerLevel, lineWidth,\n testAmbiguousType, quotingType, forceQuotes, inblock) {\n\n var i;\n var char = 0;\n var prevChar = null;\n var hasLineBreak = false;\n var hasFoldableLine = false; // only checked if shouldTrackWidth\n var shouldTrackWidth = lineWidth !== -1;\n var previousLineBreak = -1; // count the first line correctly\n var plain = isPlainSafeFirst(codePointAt(string, 0))\n && isPlainSafeLast(codePointAt(string, string.length - 1));\n\n if (singleLineOnly || forceQuotes) {\n // Case: no block styles.\n // Check for disallowed characters to rule out plain and single.\n for (i = 0; i < string.length; char >= 0x10000 ? i += 2 : i++) {\n char = codePointAt(string, i);\n if (!isPrintable(char)) {\n return STYLE_DOUBLE;\n }\n plain = plain && isPlainSafe(char, prevChar, inblock);\n prevChar = char;\n }\n } else {\n // Case: block styles permitted.\n for (i = 0; i < string.length; char >= 0x10000 ? i += 2 : i++) {\n char = codePointAt(string, i);\n if (char === CHAR_LINE_FEED) {\n hasLineBreak = true;\n // Check if any line can be folded.\n if (shouldTrackWidth) {\n hasFoldableLine = hasFoldableLine ||\n // Foldable line = too long, and not more-indented.\n (i - previousLineBreak - 1 > lineWidth &&\n string[previousLineBreak + 1] !== ' ');\n previousLineBreak = i;\n }\n } else if (!isPrintable(char)) {\n return STYLE_DOUBLE;\n }\n plain = plain && isPlainSafe(char, prevChar, inblock);\n prevChar = char;\n }\n // in case the end is missing a \\n\n hasFoldableLine = hasFoldableLine || (shouldTrackWidth &&\n (i - previousLineBreak - 1 > lineWidth &&\n string[previousLineBreak + 1] !== ' '));\n }\n // Although every style can represent \\n without escaping, prefer block styles\n // for multiline, since they're more readable and they don't add empty lines.\n // Also prefer folding a super-long line.\n if (!hasLineBreak && !hasFoldableLine) {\n // Strings interpretable as another type have to be quoted;\n // e.g. the string 'true' vs. the boolean true.\n if (plain && !forceQuotes && !testAmbiguousType(string)) {\n return STYLE_PLAIN;\n }\n return quotingType === QUOTING_TYPE_DOUBLE ? STYLE_DOUBLE : STYLE_SINGLE;\n }\n // Edge case: block indentation indicator can only have one digit.\n if (indentPerLevel > 9 && needIndentIndicator(string)) {\n return STYLE_DOUBLE;\n }\n // At this point we know block styles are valid.\n // Prefer literal style unless we want to fold.\n if (!forceQuotes) {\n return hasFoldableLine ? STYLE_FOLDED : STYLE_LITERAL;\n }\n return quotingType === QUOTING_TYPE_DOUBLE ? STYLE_DOUBLE : STYLE_SINGLE;\n}\n\n// Note: line breaking/folding is implemented for only the folded style.\n// NB. We drop the last trailing newline (if any) of a returned block scalar\n// since the dumper adds its own newline. This always works:\n// \u2022 No ending newline => unaffected; already using strip \"-\" chomping.\n// \u2022 Ending newline => removed then restored.\n// Importantly, this keeps the \"+\" chomp indicator from gaining an extra line.\nfunction writeScalar(state, string, level, iskey, inblock) {\n state.dump = (function () {\n if (string.length === 0) {\n return state.quotingType === QUOTING_TYPE_DOUBLE ? '\"\"' : \"''\";\n }\n if (!state.noCompatMode) {\n if (DEPRECATED_BOOLEANS_SYNTAX.indexOf(string) !== -1 || DEPRECATED_BASE60_SYNTAX.test(string)) {\n return state.quotingType === QUOTING_TYPE_DOUBLE ? ('\"' + string + '\"') : (\"'\" + string + \"'\");\n }\n }\n\n var indent = state.indent * Math.max(1, level); // no 0-indent scalars\n // As indentation gets deeper, let the width decrease monotonically\n // to the lower bound min(state.lineWidth, 40).\n // Note that this implies\n // state.lineWidth \u2264 40 + state.indent: width is fixed at the lower bound.\n // state.lineWidth > 40 + state.indent: width decreases until the lower bound.\n // This behaves better than a constant minimum width which disallows narrower options,\n // or an indent threshold which causes the width to suddenly increase.\n var lineWidth = state.lineWidth === -1\n ? -1 : Math.max(Math.min(state.lineWidth, 40), state.lineWidth - indent);\n\n // Without knowing if keys are implicit/explicit, assume implicit for safety.\n var singleLineOnly = iskey\n // No block styles in flow mode.\n || (state.flowLevel > -1 && level >= state.flowLevel);\n function testAmbiguity(string) {\n return testImplicitResolving(state, string);\n }\n\n switch (chooseScalarStyle(string, singleLineOnly, state.indent, lineWidth,\n testAmbiguity, state.quotingType, state.forceQuotes && !iskey, inblock)) {\n\n case STYLE_PLAIN:\n return string;\n case STYLE_SINGLE:\n return \"'\" + string.replace(/'/g, \"''\") + \"'\";\n case STYLE_LITERAL:\n return '|' + blockHeader(string, state.indent)\n + dropEndingNewline(indentString(string, indent));\n case STYLE_FOLDED:\n return '>' + blockHeader(string, state.indent)\n + dropEndingNewline(indentString(foldString(string, lineWidth), indent));\n case STYLE_DOUBLE:\n return '\"' + escapeString(string, lineWidth) + '\"';\n default:\n throw new YAMLException('impossible error: invalid scalar style');\n }\n }());\n}\n\n// Pre-conditions: string is valid for a block scalar, 1 <= indentPerLevel <= 9.\nfunction blockHeader(string, indentPerLevel) {\n var indentIndicator = needIndentIndicator(string) ? String(indentPerLevel) : '';\n\n // note the special case: the string '\\n' counts as a \"trailing\" empty line.\n var clip = string[string.length - 1] === '\\n';\n var keep = clip && (string[string.length - 2] === '\\n' || string === '\\n');\n var chomp = keep ? '+' : (clip ? '' : '-');\n\n return indentIndicator + chomp + '\\n';\n}\n\n// (See the note for writeScalar.)\nfunction dropEndingNewline(string) {\n return string[string.length - 1] === '\\n' ? string.slice(0, -1) : string;\n}\n\n// Note: a long line without a suitable break point will exceed the width limit.\n// Pre-conditions: every char in str isPrintable, str.length > 0, width > 0.\nfunction foldString(string, width) {\n // In folded style, $k$ consecutive newlines output as $k+1$ newlines\u2014\n // unless they're before or after a more-indented line, or at the very\n // beginning or end, in which case $k$ maps to $k$.\n // Therefore, parse each chunk as newline(s) followed by a content line.\n var lineRe = /(\\n+)([^\\n]*)/g;\n\n // first line (possibly an empty line)\n var result = (function () {\n var nextLF = string.indexOf('\\n');\n nextLF = nextLF !== -1 ? nextLF : string.length;\n lineRe.lastIndex = nextLF;\n return foldLine(string.slice(0, nextLF), width);\n }());\n // If we haven't reached the first content line yet, don't add an extra \\n.\n var prevMoreIndented = string[0] === '\\n' || string[0] === ' ';\n var moreIndented;\n\n // rest of the lines\n var match;\n while ((match = lineRe.exec(string))) {\n var prefix = match[1], line = match[2];\n moreIndented = (line[0] === ' ');\n result += prefix\n + (!prevMoreIndented && !moreIndented && line !== ''\n ? '\\n' : '')\n + foldLine(line, width);\n prevMoreIndented = moreIndented;\n }\n\n return result;\n}\n\n// Greedy line breaking.\n// Picks the longest line under the limit each time,\n// otherwise settles for the shortest line over the limit.\n// NB. More-indented lines *cannot* be folded, as that would add an extra \\n.\nfunction foldLine(line, width) {\n if (line === '' || line[0] === ' ') return line;\n\n // Since a more-indented line adds a \\n, breaks can't be followed by a space.\n var breakRe = / [^ ]/g; // note: the match index will always be <= length-2.\n var match;\n // start is an inclusive index. end, curr, and next are exclusive.\n var start = 0, end, curr = 0, next = 0;\n var result = '';\n\n // Invariants: 0 <= start <= length-1.\n // 0 <= curr <= next <= max(0, length-2). curr - start <= width.\n // Inside the loop:\n // A match implies length >= 2, so curr and next are <= length-2.\n while ((match = breakRe.exec(line))) {\n next = match.index;\n // maintain invariant: curr - start <= width\n if (next - start > width) {\n end = (curr > start) ? curr : next; // derive end <= length-2\n result += '\\n' + line.slice(start, end);\n // skip the space that was output as \\n\n start = end + 1; // derive start <= length-1\n }\n curr = next;\n }\n\n // By the invariants, start <= length-1, so there is something left over.\n // It is either the whole string or a part starting from non-whitespace.\n result += '\\n';\n // Insert a break if the remainder is too long and there is a break available.\n if (line.length - start > width && curr > start) {\n result += line.slice(start, curr) + '\\n' + line.slice(curr + 1);\n } else {\n result += line.slice(start);\n }\n\n return result.slice(1); // drop extra \\n joiner\n}\n\n// Escapes a double-quoted string.\nfunction escapeString(string) {\n var result = '';\n var char = 0;\n var escapeSeq;\n\n for (var i = 0; i < string.length; char >= 0x10000 ? i += 2 : i++) {\n char = codePointAt(string, i);\n escapeSeq = ESCAPE_SEQUENCES[char];\n\n if (!escapeSeq && isPrintable(char)) {\n result += string[i];\n if (char >= 0x10000) result += string[i + 1];\n } else {\n result += escapeSeq || encodeHex(char);\n }\n }\n\n return result;\n}\n\nfunction writeFlowSequence(state, level, object) {\n var _result = '',\n _tag = state.tag,\n index,\n length,\n value;\n\n for (index = 0, length = object.length; index < length; index += 1) {\n value = object[index];\n\n if (state.replacer) {\n value = state.replacer.call(object, String(index), value);\n }\n\n // Write only valid elements, put null instead of invalid elements.\n if (writeNode(state, level, value, false, false) ||\n (typeof value === 'undefined' &&\n writeNode(state, level, null, false, false))) {\n\n if (_result !== '') _result += ',' + (!state.condenseFlow ? ' ' : '');\n _result += state.dump;\n }\n }\n\n state.tag = _tag;\n state.dump = '[' + _result + ']';\n}\n\nfunction writeBlockSequence(state, level, object, compact) {\n var _result = '',\n _tag = state.tag,\n index,\n length,\n value;\n\n for (index = 0, length = object.length; index < length; index += 1) {\n value = object[index];\n\n if (state.replacer) {\n value = state.replacer.call(object, String(index), value);\n }\n\n // Write only valid elements, put null instead of invalid elements.\n if (writeNode(state, level + 1, value, true, true, false, true) ||\n (typeof value === 'undefined' &&\n writeNode(state, level + 1, null, true, true, false, true))) {\n\n if (!compact || _result !== '') {\n _result += generateNextLine(state, level);\n }\n\n if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) {\n _result += '-';\n } else {\n _result += '- ';\n }\n\n _result += state.dump;\n }\n }\n\n state.tag = _tag;\n state.dump = _result || '[]'; // Empty sequence if no valid values.\n}\n\nfunction writeFlowMapping(state, level, object) {\n var _result = '',\n _tag = state.tag,\n objectKeyList = Object.keys(object),\n index,\n length,\n objectKey,\n objectValue,\n pairBuffer;\n\n for (index = 0, length = objectKeyList.length; index < length; index += 1) {\n\n pairBuffer = '';\n if (_result !== '') pairBuffer += ', ';\n\n if (state.condenseFlow) pairBuffer += '\"';\n\n objectKey = objectKeyList[index];\n objectValue = object[objectKey];\n\n if (state.replacer) {\n objectValue = state.replacer.call(object, objectKey, objectValue);\n }\n\n if (!writeNode(state, level, objectKey, false, false)) {\n continue; // Skip this pair because of invalid key;\n }\n\n if (state.dump.length > 1024) pairBuffer += '? ';\n\n pairBuffer += state.dump + (state.condenseFlow ? '\"' : '') + ':' + (state.condenseFlow ? '' : ' ');\n\n if (!writeNode(state, level, objectValue, false, false)) {\n continue; // Skip this pair because of invalid value.\n }\n\n pairBuffer += state.dump;\n\n // Both key and value are valid.\n _result += pairBuffer;\n }\n\n state.tag = _tag;\n state.dump = '{' + _result + '}';\n}\n\nfunction writeBlockMapping(state, level, object, compact) {\n var _result = '',\n _tag = state.tag,\n objectKeyList = Object.keys(object),\n index,\n length,\n objectKey,\n objectValue,\n explicitPair,\n pairBuffer;\n\n // Allow sorting keys so that the output file is deterministic\n if (state.sortKeys === true) {\n // Default sorting\n objectKeyList.sort();\n } else if (typeof state.sortKeys === 'function') {\n // Custom sort function\n objectKeyList.sort(state.sortKeys);\n } else if (state.sortKeys) {\n // Something is wrong\n throw new YAMLException('sortKeys must be a boolean or a function');\n }\n\n for (index = 0, length = objectKeyList.length; index < length; index += 1) {\n pairBuffer = '';\n\n if (!compact || _result !== '') {\n pairBuffer += generateNextLine(state, level);\n }\n\n objectKey = objectKeyList[index];\n objectValue = object[objectKey];\n\n if (state.replacer) {\n objectValue = state.replacer.call(object, objectKey, objectValue);\n }\n\n if (!writeNode(state, level + 1, objectKey, true, true, true)) {\n continue; // Skip this pair because of invalid key.\n }\n\n explicitPair = (state.tag !== null && state.tag !== '?') ||\n (state.dump && state.dump.length > 1024);\n\n if (explicitPair) {\n if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) {\n pairBuffer += '?';\n } else {\n pairBuffer += '? ';\n }\n }\n\n pairBuffer += state.dump;\n\n if (explicitPair) {\n pairBuffer += generateNextLine(state, level);\n }\n\n if (!writeNode(state, level + 1, objectValue, true, explicitPair)) {\n continue; // Skip this pair because of invalid value.\n }\n\n if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) {\n pairBuffer += ':';\n } else {\n pairBuffer += ': ';\n }\n\n pairBuffer += state.dump;\n\n // Both key and value are valid.\n _result += pairBuffer;\n }\n\n state.tag = _tag;\n state.dump = _result || '{}'; // Empty mapping if no valid pairs.\n}\n\nfunction detectType(state, object, explicit) {\n var _result, typeList, index, length, type, style;\n\n typeList = explicit ? state.explicitTypes : state.implicitTypes;\n\n for (index = 0, length = typeList.length; index < length; index += 1) {\n type = typeList[index];\n\n if ((type.instanceOf || type.predicate) &&\n (!type.instanceOf || ((typeof object === 'object') && (object instanceof type.instanceOf))) &&\n (!type.predicate || type.predicate(object))) {\n\n if (explicit) {\n if (type.multi && type.representName) {\n state.tag = type.representName(object);\n } else {\n state.tag = type.tag;\n }\n } else {\n state.tag = '?';\n }\n\n if (type.represent) {\n style = state.styleMap[type.tag] || type.defaultStyle;\n\n if (_toString.call(type.represent) === '[object Function]') {\n _result = type.represent(object, style);\n } else if (_hasOwnProperty.call(type.represent, style)) {\n _result = type.represent[style](object, style);\n } else {\n throw new YAMLException('!<' + type.tag + '> tag resolver accepts not \"' + style + '\" style');\n }\n\n state.dump = _result;\n }\n\n return true;\n }\n }\n\n return false;\n}\n\n// Serializes `object` and writes it to global `result`.\n// Returns true on success, or false on invalid object.\n//\nfunction writeNode(state, level, object, block, compact, iskey, isblockseq) {\n state.tag = null;\n state.dump = object;\n\n if (!detectType(state, object, false)) {\n detectType(state, object, true);\n }\n\n var type = _toString.call(state.dump);\n var inblock = block;\n var tagStr;\n\n if (block) {\n block = (state.flowLevel < 0 || state.flowLevel > level);\n }\n\n var objectOrArray = type === '[object Object]' || type === '[object Array]',\n duplicateIndex,\n duplicate;\n\n if (objectOrArray) {\n duplicateIndex = state.duplicates.indexOf(object);\n duplicate = duplicateIndex !== -1;\n }\n\n if ((state.tag !== null && state.tag !== '?') || duplicate || (state.indent !== 2 && level > 0)) {\n compact = false;\n }\n\n if (duplicate && state.usedDuplicates[duplicateIndex]) {\n state.dump = '*ref_' + duplicateIndex;\n } else {\n if (objectOrArray && duplicate && !state.usedDuplicates[duplicateIndex]) {\n state.usedDuplicates[duplicateIndex] = true;\n }\n if (type === '[object Object]') {\n if (block && (Object.keys(state.dump).length !== 0)) {\n writeBlockMapping(state, level, state.dump, compact);\n if (duplicate) {\n state.dump = '&ref_' + duplicateIndex + state.dump;\n }\n } else {\n writeFlowMapping(state, level, state.dump);\n if (duplicate) {\n state.dump = '&ref_' + duplicateIndex + ' ' + state.dump;\n }\n }\n } else if (type === '[object Array]') {\n if (block && (state.dump.length !== 0)) {\n if (state.noArrayIndent && !isblockseq && level > 0) {\n writeBlockSequence(state, level - 1, state.dump, compact);\n } else {\n writeBlockSequence(state, level, state.dump, compact);\n }\n if (duplicate) {\n state.dump = '&ref_' + duplicateIndex + state.dump;\n }\n } else {\n writeFlowSequence(state, level, state.dump);\n if (duplicate) {\n state.dump = '&ref_' + duplicateIndex + ' ' + state.dump;\n }\n }\n } else if (type === '[object String]') {\n if (state.tag !== '?') {\n writeScalar(state, state.dump, level, iskey, inblock);\n }\n } else if (type === '[object Undefined]') {\n return false;\n } else {\n if (state.skipInvalid) return false;\n throw new YAMLException('unacceptable kind of an object to dump ' + type);\n }\n\n if (state.tag !== null && state.tag !== '?') {\n // Need to encode all characters except those allowed by the spec:\n //\n // [35] ns-dec-digit ::= [#x30-#x39] /* 0-9 */\n // [36] ns-hex-digit ::= ns-dec-digit\n // | [#x41-#x46] /* A-F */ | [#x61-#x66] /* a-f */\n // [37] ns-ascii-letter ::= [#x41-#x5A] /* A-Z */ | [#x61-#x7A] /* a-z */\n // [38] ns-word-char ::= ns-dec-digit | ns-ascii-letter | \u201C-\u201D\n // [39] ns-uri-char ::= \u201C%\u201D ns-hex-digit ns-hex-digit | ns-word-char | \u201C#\u201D\n // | \u201C;\u201D | \u201C/\u201D | \u201C?\u201D | \u201C:\u201D | \u201C@\u201D | \u201C&\u201D | \u201C=\u201D | \u201C+\u201D | \u201C$\u201D | \u201C,\u201D\n // | \u201C_\u201D | \u201C.\u201D | \u201C!\u201D | \u201C~\u201D | \u201C*\u201D | \u201C'\u201D | \u201C(\u201D | \u201C)\u201D | \u201C[\u201D | \u201C]\u201D\n //\n // Also need to encode '!' because it has special meaning (end of tag prefix).\n //\n tagStr = encodeURI(\n state.tag[0] === '!' ? state.tag.slice(1) : state.tag\n ).replace(/!/g, '%21');\n\n if (state.tag[0] === '!') {\n tagStr = '!' + tagStr;\n } else if (tagStr.slice(0, 18) === 'tag:yaml.org,2002:') {\n tagStr = '!!' + tagStr.slice(18);\n } else {\n tagStr = '!<' + tagStr + '>';\n }\n\n state.dump = tagStr + ' ' + state.dump;\n }\n }\n\n return true;\n}\n\nfunction getDuplicateReferences(object, state) {\n var objects = [],\n duplicatesIndexes = [],\n index,\n length;\n\n inspectNode(object, objects, duplicatesIndexes);\n\n for (index = 0, length = duplicatesIndexes.length; index < length; index += 1) {\n state.duplicates.push(objects[duplicatesIndexes[index]]);\n }\n state.usedDuplicates = new Array(length);\n}\n\nfunction inspectNode(object, objects, duplicatesIndexes) {\n var objectKeyList,\n index,\n length;\n\n if (object !== null && typeof object === 'object') {\n index = objects.indexOf(object);\n if (index !== -1) {\n if (duplicatesIndexes.indexOf(index) === -1) {\n duplicatesIndexes.push(index);\n }\n } else {\n objects.push(object);\n\n if (Array.isArray(object)) {\n for (index = 0, length = object.length; index < length; index += 1) {\n inspectNode(object[index], objects, duplicatesIndexes);\n }\n } else {\n objectKeyList = Object.keys(object);\n\n for (index = 0, length = objectKeyList.length; index < length; index += 1) {\n inspectNode(object[objectKeyList[index]], objects, duplicatesIndexes);\n }\n }\n }\n }\n}\n\nfunction dump(input, options) {\n options = options || {};\n\n var state = new State(options);\n\n if (!state.noRefs) getDuplicateReferences(input, state);\n\n var value = input;\n\n if (state.replacer) {\n value = state.replacer.call({ '': value }, '', value);\n }\n\n if (writeNode(state, 0, value, true, true)) return state.dump + '\\n';\n\n return '';\n}\n\nmodule.exports.dump = dump;\n", "'use strict';\n\n\nvar loader = require('./lib/loader');\nvar dumper = require('./lib/dumper');\n\n\nfunction renamed(from, to) {\n return function () {\n throw new Error('Function yaml.' + from + ' is removed in js-yaml 4. ' +\n 'Use yaml.' + to + ' instead, which is now safe by default.');\n };\n}\n\n\nmodule.exports.Type = require('./lib/type');\nmodule.exports.Schema = require('./lib/schema');\nmodule.exports.FAILSAFE_SCHEMA = require('./lib/schema/failsafe');\nmodule.exports.JSON_SCHEMA = require('./lib/schema/json');\nmodule.exports.CORE_SCHEMA = require('./lib/schema/core');\nmodule.exports.DEFAULT_SCHEMA = require('./lib/schema/default');\nmodule.exports.load = loader.load;\nmodule.exports.loadAll = loader.loadAll;\nmodule.exports.dump = dumper.dump;\nmodule.exports.YAMLException = require('./lib/exception');\n\n// Re-export all types in case user wants to create custom schema\nmodule.exports.types = {\n binary: require('./lib/type/binary'),\n float: require('./lib/type/float'),\n map: require('./lib/type/map'),\n null: require('./lib/type/null'),\n pairs: require('./lib/type/pairs'),\n set: require('./lib/type/set'),\n timestamp: require('./lib/type/timestamp'),\n bool: require('./lib/type/bool'),\n int: require('./lib/type/int'),\n merge: require('./lib/type/merge'),\n omap: require('./lib/type/omap'),\n seq: require('./lib/type/seq'),\n str: require('./lib/type/str')\n};\n\n// Removed functions from JS-YAML 3.0.x\nmodule.exports.safeLoad = renamed('safeLoad', 'load');\nmodule.exports.safeLoadAll = renamed('safeLoadAll', 'loadAll');\nmodule.exports.safeDump = renamed('safeDump', 'dump');\n", "export class Lazy<T> {\n private _value: Promise<T> | null = null\n private creator: (() => Promise<T>) | null\n\n constructor(creator: () => Promise<T>) {\n this.creator = creator\n }\n\n get hasValue() {\n return this.creator == null\n }\n\n get value(): Promise<T> {\n if (this.creator == null) {\n return this._value!!\n }\n\n const result = this.creator()\n this.value = result\n return result\n }\n\n set value(value: Promise<T>) {\n this._value = value\n this.creator = null\n }\n}", "'use strict'\n\n// Note: this is the semver.org version of the spec that it implements\n// Not necessarily the package version of this code.\nconst SEMVER_SPEC_VERSION = '2.0.0'\n\nconst MAX_LENGTH = 256\nconst MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER ||\n/* istanbul ignore next */ 9007199254740991\n\n// Max safe segment length for coercion.\nconst MAX_SAFE_COMPONENT_LENGTH = 16\n\n// Max safe length for a build identifier. The max length minus 6 characters for\n// the shortest version with a build 0.0.0+BUILD.\nconst MAX_SAFE_BUILD_LENGTH = MAX_LENGTH - 6\n\nconst RELEASE_TYPES = [\n 'major',\n 'premajor',\n 'minor',\n 'preminor',\n 'patch',\n 'prepatch',\n 'prerelease',\n]\n\nmodule.exports = {\n MAX_LENGTH,\n MAX_SAFE_COMPONENT_LENGTH,\n MAX_SAFE_BUILD_LENGTH,\n MAX_SAFE_INTEGER,\n RELEASE_TYPES,\n SEMVER_SPEC_VERSION,\n FLAG_INCLUDE_PRERELEASE: 0b001,\n FLAG_LOOSE: 0b010,\n}\n", "'use strict'\n\nconst debug = (\n typeof process === 'object' &&\n process.env &&\n process.env.NODE_DEBUG &&\n /\\bsemver\\b/i.test(process.env.NODE_DEBUG)\n) ? (...args) => console.error('SEMVER', ...args)\n : () => {}\n\nmodule.exports = debug\n", "'use strict'\n\nconst {\n MAX_SAFE_COMPONENT_LENGTH,\n MAX_SAFE_BUILD_LENGTH,\n MAX_LENGTH,\n} = require('./constants')\nconst debug = require('./debug')\nexports = module.exports = {}\n\n// The actual regexps go on exports.re\nconst re = exports.re = []\nconst safeRe = exports.safeRe = []\nconst src = exports.src = []\nconst safeSrc = exports.safeSrc = []\nconst t = exports.t = {}\nlet R = 0\n\nconst LETTERDASHNUMBER = '[a-zA-Z0-9-]'\n\n// Replace some greedy regex tokens to prevent regex dos issues. These regex are\n// used internally via the safeRe object since all inputs in this library get\n// normalized first to trim and collapse all extra whitespace. The original\n// regexes are exported for userland consumption and lower level usage. A\n// future breaking change could export the safer regex only with a note that\n// all input should have extra whitespace removed.\nconst safeRegexReplacements = [\n ['\\\\s', 1],\n ['\\\\d', MAX_LENGTH],\n [LETTERDASHNUMBER, MAX_SAFE_BUILD_LENGTH],\n]\n\nconst makeSafeRegex = (value) => {\n for (const [token, max] of safeRegexReplacements) {\n value = value\n .split(`${token}*`).join(`${token}{0,${max}}`)\n .split(`${token}+`).join(`${token}{1,${max}}`)\n }\n return value\n}\n\nconst createToken = (name, value, isGlobal) => {\n const safe = makeSafeRegex(value)\n const index = R++\n debug(name, index, value)\n t[name] = index\n src[index] = value\n safeSrc[index] = safe\n re[index] = new RegExp(value, isGlobal ? 'g' : undefined)\n safeRe[index] = new RegExp(safe, isGlobal ? 'g' : undefined)\n}\n\n// The following Regular Expressions can be used for tokenizing,\n// validating, and parsing SemVer version strings.\n\n// ## Numeric Identifier\n// A single `0`, or a non-zero digit followed by zero or more digits.\n\ncreateToken('NUMERICIDENTIFIER', '0|[1-9]\\\\d*')\ncreateToken('NUMERICIDENTIFIERLOOSE', '\\\\d+')\n\n// ## Non-numeric Identifier\n// Zero or more digits, followed by a letter or hyphen, and then zero or\n// more letters, digits, or hyphens.\n\ncreateToken('NONNUMERICIDENTIFIER', `\\\\d*[a-zA-Z-]${LETTERDASHNUMBER}*`)\n\n// ## Main Version\n// Three dot-separated numeric identifiers.\n\ncreateToken('MAINVERSION', `(${src[t.NUMERICIDENTIFIER]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIER]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIER]})`)\n\ncreateToken('MAINVERSIONLOOSE', `(${src[t.NUMERICIDENTIFIERLOOSE]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIERLOOSE]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIERLOOSE]})`)\n\n// ## Pre-release Version Identifier\n// A numeric identifier, or a non-numeric identifier.\n// Non-numeric identifiers include numeric identifiers but can be longer.\n// Therefore non-numeric identifiers must go first.\n\ncreateToken('PRERELEASEIDENTIFIER', `(?:${src[t.NONNUMERICIDENTIFIER]\n}|${src[t.NUMERICIDENTIFIER]})`)\n\ncreateToken('PRERELEASEIDENTIFIERLOOSE', `(?:${src[t.NONNUMERICIDENTIFIER]\n}|${src[t.NUMERICIDENTIFIERLOOSE]})`)\n\n// ## Pre-release Version\n// Hyphen, followed by one or more dot-separated pre-release version\n// identifiers.\n\ncreateToken('PRERELEASE', `(?:-(${src[t.PRERELEASEIDENTIFIER]\n}(?:\\\\.${src[t.PRERELEASEIDENTIFIER]})*))`)\n\ncreateToken('PRERELEASELOOSE', `(?:-?(${src[t.PRERELEASEIDENTIFIERLOOSE]\n}(?:\\\\.${src[t.PRERELEASEIDENTIFIERLOOSE]})*))`)\n\n// ## Build Metadata Identifier\n// Any combination of digits, letters, or hyphens.\n\ncreateToken('BUILDIDENTIFIER', `${LETTERDASHNUMBER}+`)\n\n// ## Build Metadata\n// Plus sign, followed by one or more period-separated build metadata\n// identifiers.\n\ncreateToken('BUILD', `(?:\\\\+(${src[t.BUILDIDENTIFIER]\n}(?:\\\\.${src[t.BUILDIDENTIFIER]})*))`)\n\n// ## Full Version String\n// A main version, followed optionally by a pre-release version and\n// build metadata.\n\n// Note that the only major, minor, patch, and pre-release sections of\n// the version string are capturing groups. The build metadata is not a\n// capturing group, because it should not ever be used in version\n// comparison.\n\ncreateToken('FULLPLAIN', `v?${src[t.MAINVERSION]\n}${src[t.PRERELEASE]}?${\n src[t.BUILD]}?`)\n\ncreateToken('FULL', `^${src[t.FULLPLAIN]}$`)\n\n// like full, but allows v1.2.3 and =1.2.3, which people do sometimes.\n// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty\n// common in the npm registry.\ncreateToken('LOOSEPLAIN', `[v=\\\\s]*${src[t.MAINVERSIONLOOSE]\n}${src[t.PRERELEASELOOSE]}?${\n src[t.BUILD]}?`)\n\ncreateToken('LOOSE', `^${src[t.LOOSEPLAIN]}$`)\n\ncreateToken('GTLT', '((?:<|>)?=?)')\n\n// Something like \"2.*\" or \"1.2.x\".\n// Note that \"x.x\" is a valid xRange identifer, meaning \"any version\"\n// Only the first item is strictly required.\ncreateToken('XRANGEIDENTIFIERLOOSE', `${src[t.NUMERICIDENTIFIERLOOSE]}|x|X|\\\\*`)\ncreateToken('XRANGEIDENTIFIER', `${src[t.NUMERICIDENTIFIER]}|x|X|\\\\*`)\n\ncreateToken('XRANGEPLAIN', `[v=\\\\s]*(${src[t.XRANGEIDENTIFIER]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIER]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIER]})` +\n `(?:${src[t.PRERELEASE]})?${\n src[t.BUILD]}?` +\n `)?)?`)\n\ncreateToken('XRANGEPLAINLOOSE', `[v=\\\\s]*(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n `(?:${src[t.PRERELEASELOOSE]})?${\n src[t.BUILD]}?` +\n `)?)?`)\n\ncreateToken('XRANGE', `^${src[t.GTLT]}\\\\s*${src[t.XRANGEPLAIN]}$`)\ncreateToken('XRANGELOOSE', `^${src[t.GTLT]}\\\\s*${src[t.XRANGEPLAINLOOSE]}$`)\n\n// Coercion.\n// Extract anything that could conceivably be a part of a valid semver\ncreateToken('COERCEPLAIN', `${'(^|[^\\\\d])' +\n '(\\\\d{1,'}${MAX_SAFE_COMPONENT_LENGTH}})` +\n `(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` +\n `(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?`)\ncreateToken('COERCE', `${src[t.COERCEPLAIN]}(?:$|[^\\\\d])`)\ncreateToken('COERCEFULL', src[t.COERCEPLAIN] +\n `(?:${src[t.PRERELEASE]})?` +\n `(?:${src[t.BUILD]})?` +\n `(?:$|[^\\\\d])`)\ncreateToken('COERCERTL', src[t.COERCE], true)\ncreateToken('COERCERTLFULL', src[t.COERCEFULL], true)\n\n// Tilde ranges.\n// Meaning is \"reasonably at or greater than\"\ncreateToken('LONETILDE', '(?:~>?)')\n\ncreateToken('TILDETRIM', `(\\\\s*)${src[t.LONETILDE]}\\\\s+`, true)\nexports.tildeTrimReplace = '$1~'\n\ncreateToken('TILDE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAIN]}$`)\ncreateToken('TILDELOOSE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAINLOOSE]}$`)\n\n// Caret ranges.\n// Meaning is \"at least and backwards compatible with\"\ncreateToken('LONECARET', '(?:\\\\^)')\n\ncreateToken('CARETTRIM', `(\\\\s*)${src[t.LONECARET]}\\\\s+`, true)\nexports.caretTrimReplace = '$1^'\n\ncreateToken('CARET', `^${src[t.LONECARET]}${src[t.XRANGEPLAIN]}$`)\ncreateToken('CARETLOOSE', `^${src[t.LONECARET]}${src[t.XRANGEPLAINLOOSE]}$`)\n\n// A simple gt/lt/eq thing, or just \"\" to indicate \"any version\"\ncreateToken('COMPARATORLOOSE', `^${src[t.GTLT]}\\\\s*(${src[t.LOOSEPLAIN]})$|^$`)\ncreateToken('COMPARATOR', `^${src[t.GTLT]}\\\\s*(${src[t.FULLPLAIN]})$|^$`)\n\n// An expression to strip any whitespace between the gtlt and the thing\n// it modifies, so that `> 1.2.3` ==> `>1.2.3`\ncreateToken('COMPARATORTRIM', `(\\\\s*)${src[t.GTLT]\n}\\\\s*(${src[t.LOOSEPLAIN]}|${src[t.XRANGEPLAIN]})`, true)\nexports.comparatorTrimReplace = '$1$2$3'\n\n// Something like `1.2.3 - 1.2.4`\n// Note that these all use the loose form, because they'll be\n// checked against either the strict or loose comparator form\n// later.\ncreateToken('HYPHENRANGE', `^\\\\s*(${src[t.XRANGEPLAIN]})` +\n `\\\\s+-\\\\s+` +\n `(${src[t.XRANGEPLAIN]})` +\n `\\\\s*$`)\n\ncreateToken('HYPHENRANGELOOSE', `^\\\\s*(${src[t.XRANGEPLAINLOOSE]})` +\n `\\\\s+-\\\\s+` +\n `(${src[t.XRANGEPLAINLOOSE]})` +\n `\\\\s*$`)\n\n// Star ranges basically just allow anything at all.\ncreateToken('STAR', '(<|>)?=?\\\\s*\\\\*')\n// >=0.0.0 is like a star\ncreateToken('GTE0', '^\\\\s*>=\\\\s*0\\\\.0\\\\.0\\\\s*$')\ncreateToken('GTE0PRE', '^\\\\s*>=\\\\s*0\\\\.0\\\\.0-0\\\\s*$')\n", "'use strict'\n\n// parse out just the options we care about\nconst looseOption = Object.freeze({ loose: true })\nconst emptyOpts = Object.freeze({ })\nconst parseOptions = options => {\n if (!options) {\n return emptyOpts\n }\n\n if (typeof options !== 'object') {\n return looseOption\n }\n\n return options\n}\nmodule.exports = parseOptions\n", "'use strict'\n\nconst numeric = /^[0-9]+$/\nconst compareIdentifiers = (a, b) => {\n if (typeof a === 'number' && typeof b === 'number') {\n return a === b ? 0 : a < b ? -1 : 1\n }\n\n const anum = numeric.test(a)\n const bnum = numeric.test(b)\n\n if (anum && bnum) {\n a = +a\n b = +b\n }\n\n return a === b ? 0\n : (anum && !bnum) ? -1\n : (bnum && !anum) ? 1\n : a < b ? -1\n : 1\n}\n\nconst rcompareIdentifiers = (a, b) => compareIdentifiers(b, a)\n\nmodule.exports = {\n compareIdentifiers,\n rcompareIdentifiers,\n}\n", "'use strict'\n\nconst debug = require('../internal/debug')\nconst { MAX_LENGTH, MAX_SAFE_INTEGER } = require('../internal/constants')\nconst { safeRe: re, t } = require('../internal/re')\n\nconst parseOptions = require('../internal/parse-options')\nconst { compareIdentifiers } = require('../internal/identifiers')\nclass SemVer {\n constructor (version, options) {\n options = parseOptions(options)\n\n if (version instanceof SemVer) {\n if (version.loose === !!options.loose &&\n version.includePrerelease === !!options.includePrerelease) {\n return version\n } else {\n version = version.version\n }\n } else if (typeof version !== 'string') {\n throw new TypeError(`Invalid version. Must be a string. Got type \"${typeof version}\".`)\n }\n\n if (version.length > MAX_LENGTH) {\n throw new TypeError(\n `version is longer than ${MAX_LENGTH} characters`\n )\n }\n\n debug('SemVer', version, options)\n this.options = options\n this.loose = !!options.loose\n // this isn't actually relevant for versions, but keep it so that we\n // don't run into trouble passing this.options around.\n this.includePrerelease = !!options.includePrerelease\n\n const m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL])\n\n if (!m) {\n throw new TypeError(`Invalid Version: ${version}`)\n }\n\n this.raw = version\n\n // these are actually numbers\n this.major = +m[1]\n this.minor = +m[2]\n this.patch = +m[3]\n\n if (this.major > MAX_SAFE_INTEGER || this.major < 0) {\n throw new TypeError('Invalid major version')\n }\n\n if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) {\n throw new TypeError('Invalid minor version')\n }\n\n if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) {\n throw new TypeError('Invalid patch version')\n }\n\n // numberify any prerelease numeric ids\n if (!m[4]) {\n this.prerelease = []\n } else {\n this.prerelease = m[4].split('.').map((id) => {\n if (/^[0-9]+$/.test(id)) {\n const num = +id\n if (num >= 0 && num < MAX_SAFE_INTEGER) {\n return num\n }\n }\n return id\n })\n }\n\n this.build = m[5] ? m[5].split('.') : []\n this.format()\n }\n\n format () {\n this.version = `${this.major}.${this.minor}.${this.patch}`\n if (this.prerelease.length) {\n this.version += `-${this.prerelease.join('.')}`\n }\n return this.version\n }\n\n toString () {\n return this.version\n }\n\n compare (other) {\n debug('SemVer.compare', this.version, this.options, other)\n if (!(other instanceof SemVer)) {\n if (typeof other === 'string' && other === this.version) {\n return 0\n }\n other = new SemVer(other, this.options)\n }\n\n if (other.version === this.version) {\n return 0\n }\n\n return this.compareMain(other) || this.comparePre(other)\n }\n\n compareMain (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n if (this.major < other.major) {\n return -1\n }\n if (this.major > other.major) {\n return 1\n }\n if (this.minor < other.minor) {\n return -1\n }\n if (this.minor > other.minor) {\n return 1\n }\n if (this.patch < other.patch) {\n return -1\n }\n if (this.patch > other.patch) {\n return 1\n }\n return 0\n }\n\n comparePre (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n // NOT having a prerelease is > having one\n if (this.prerelease.length && !other.prerelease.length) {\n return -1\n } else if (!this.prerelease.length && other.prerelease.length) {\n return 1\n } else if (!this.prerelease.length && !other.prerelease.length) {\n return 0\n }\n\n let i = 0\n do {\n const a = this.prerelease[i]\n const b = other.prerelease[i]\n debug('prerelease compare', i, a, b)\n if (a === undefined && b === undefined) {\n return 0\n } else if (b === undefined) {\n return 1\n } else if (a === undefined) {\n return -1\n } else if (a === b) {\n continue\n } else {\n return compareIdentifiers(a, b)\n }\n } while (++i)\n }\n\n compareBuild (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n let i = 0\n do {\n const a = this.build[i]\n const b = other.build[i]\n debug('build compare', i, a, b)\n if (a === undefined && b === undefined) {\n return 0\n } else if (b === undefined) {\n return 1\n } else if (a === undefined) {\n return -1\n } else if (a === b) {\n continue\n } else {\n return compareIdentifiers(a, b)\n }\n } while (++i)\n }\n\n // preminor will bump the version up to the next minor release, and immediately\n // down to pre-release. premajor and prepatch work the same way.\n inc (release, identifier, identifierBase) {\n if (release.startsWith('pre')) {\n if (!identifier && identifierBase === false) {\n throw new Error('invalid increment argument: identifier is empty')\n }\n // Avoid an invalid semver results\n if (identifier) {\n const match = `-${identifier}`.match(this.options.loose ? re[t.PRERELEASELOOSE] : re[t.PRERELEASE])\n if (!match || match[1] !== identifier) {\n throw new Error(`invalid identifier: ${identifier}`)\n }\n }\n }\n\n switch (release) {\n case 'premajor':\n this.prerelease.length = 0\n this.patch = 0\n this.minor = 0\n this.major++\n this.inc('pre', identifier, identifierBase)\n break\n case 'preminor':\n this.prerelease.length = 0\n this.patch = 0\n this.minor++\n this.inc('pre', identifier, identifierBase)\n break\n case 'prepatch':\n // If this is already a prerelease, it will bump to the next version\n // drop any prereleases that might already exist, since they are not\n // relevant at this point.\n this.prerelease.length = 0\n this.inc('patch', identifier, identifierBase)\n this.inc('pre', identifier, identifierBase)\n break\n // If the input is a non-prerelease version, this acts the same as\n // prepatch.\n case 'prerelease':\n if (this.prerelease.length === 0) {\n this.inc('patch', identifier, identifierBase)\n }\n this.inc('pre', identifier, identifierBase)\n break\n case 'release':\n if (this.prerelease.length === 0) {\n throw new Error(`version ${this.raw} is not a prerelease`)\n }\n this.prerelease.length = 0\n break\n\n case 'major':\n // If this is a pre-major version, bump up to the same major version.\n // Otherwise increment major.\n // 1.0.0-5 bumps to 1.0.0\n // 1.1.0 bumps to 2.0.0\n if (\n this.minor !== 0 ||\n this.patch !== 0 ||\n this.prerelease.length === 0\n ) {\n this.major++\n }\n this.minor = 0\n this.patch = 0\n this.prerelease = []\n break\n case 'minor':\n // If this is a pre-minor version, bump up to the same minor version.\n // Otherwise increment minor.\n // 1.2.0-5 bumps to 1.2.0\n // 1.2.1 bumps to 1.3.0\n if (this.patch !== 0 || this.prerelease.length === 0) {\n this.minor++\n }\n this.patch = 0\n this.prerelease = []\n break\n case 'patch':\n // If this is not a pre-release version, it will increment the patch.\n // If it is a pre-release it will bump up to the same patch version.\n // 1.2.0-5 patches to 1.2.0\n // 1.2.0 patches to 1.2.1\n if (this.prerelease.length === 0) {\n this.patch++\n }\n this.prerelease = []\n break\n // This probably shouldn't be used publicly.\n // 1.0.0 'pre' would become 1.0.0-0 which is the wrong direction.\n case 'pre': {\n const base = Number(identifierBase) ? 1 : 0\n\n if (this.prerelease.length === 0) {\n this.prerelease = [base]\n } else {\n let i = this.prerelease.length\n while (--i >= 0) {\n if (typeof this.prerelease[i] === 'number') {\n this.prerelease[i]++\n i = -2\n }\n }\n if (i === -1) {\n // didn't increment anything\n if (identifier === this.prerelease.join('.') && identifierBase === false) {\n throw new Error('invalid increment argument: identifier already exists')\n }\n this.prerelease.push(base)\n }\n }\n if (identifier) {\n // 1.2.0-beta.1 bumps to 1.2.0-beta.2,\n // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0\n let prerelease = [identifier, base]\n if (identifierBase === false) {\n prerelease = [identifier]\n }\n if (compareIdentifiers(this.prerelease[0], identifier) === 0) {\n if (isNaN(this.prerelease[1])) {\n this.prerelease = prerelease\n }\n } else {\n this.prerelease = prerelease\n }\n }\n break\n }\n default:\n throw new Error(`invalid increment argument: ${release}`)\n }\n this.raw = this.format()\n if (this.build.length) {\n this.raw += `+${this.build.join('.')}`\n }\n return this\n }\n}\n\nmodule.exports = SemVer\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst parse = (version, options, throwErrors = false) => {\n if (version instanceof SemVer) {\n return version\n }\n try {\n return new SemVer(version, options)\n } catch (er) {\n if (!throwErrors) {\n return null\n }\n throw er\n }\n}\n\nmodule.exports = parse\n", "'use strict'\n\nconst parse = require('./parse')\nconst valid = (version, options) => {\n const v = parse(version, options)\n return v ? v.version : null\n}\nmodule.exports = valid\n", "'use strict'\n\nconst parse = require('./parse')\nconst clean = (version, options) => {\n const s = parse(version.trim().replace(/^[=v]+/, ''), options)\n return s ? s.version : null\n}\nmodule.exports = clean\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\n\nconst inc = (version, release, options, identifier, identifierBase) => {\n if (typeof (options) === 'string') {\n identifierBase = identifier\n identifier = options\n options = undefined\n }\n\n try {\n return new SemVer(\n version instanceof SemVer ? version.version : version,\n options\n ).inc(release, identifier, identifierBase).version\n } catch (er) {\n return null\n }\n}\nmodule.exports = inc\n", "'use strict'\n\nconst parse = require('./parse.js')\n\nconst diff = (version1, version2) => {\n const v1 = parse(version1, null, true)\n const v2 = parse(version2, null, true)\n const comparison = v1.compare(v2)\n\n if (comparison === 0) {\n return null\n }\n\n const v1Higher = comparison > 0\n const highVersion = v1Higher ? v1 : v2\n const lowVersion = v1Higher ? v2 : v1\n const highHasPre = !!highVersion.prerelease.length\n const lowHasPre = !!lowVersion.prerelease.length\n\n if (lowHasPre && !highHasPre) {\n // Going from prerelease -> no prerelease requires some special casing\n\n // If the low version has only a major, then it will always be a major\n // Some examples:\n // 1.0.0-1 -> 1.0.0\n // 1.0.0-1 -> 1.1.1\n // 1.0.0-1 -> 2.0.0\n if (!lowVersion.patch && !lowVersion.minor) {\n return 'major'\n }\n\n // If the main part has no difference\n if (lowVersion.compareMain(highVersion) === 0) {\n if (lowVersion.minor && !lowVersion.patch) {\n return 'minor'\n }\n return 'patch'\n }\n }\n\n // add the `pre` prefix if we are going to a prerelease version\n const prefix = highHasPre ? 'pre' : ''\n\n if (v1.major !== v2.major) {\n return prefix + 'major'\n }\n\n if (v1.minor !== v2.minor) {\n return prefix + 'minor'\n }\n\n if (v1.patch !== v2.patch) {\n return prefix + 'patch'\n }\n\n // high and low are prereleases\n return 'prerelease'\n}\n\nmodule.exports = diff\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst major = (a, loose) => new SemVer(a, loose).major\nmodule.exports = major\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst minor = (a, loose) => new SemVer(a, loose).minor\nmodule.exports = minor\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst patch = (a, loose) => new SemVer(a, loose).patch\nmodule.exports = patch\n", "'use strict'\n\nconst parse = require('./parse')\nconst prerelease = (version, options) => {\n const parsed = parse(version, options)\n return (parsed && parsed.prerelease.length) ? parsed.prerelease : null\n}\nmodule.exports = prerelease\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst compare = (a, b, loose) =>\n new SemVer(a, loose).compare(new SemVer(b, loose))\n\nmodule.exports = compare\n", "'use strict'\n\nconst compare = require('./compare')\nconst rcompare = (a, b, loose) => compare(b, a, loose)\nmodule.exports = rcompare\n", "'use strict'\n\nconst compare = require('./compare')\nconst compareLoose = (a, b) => compare(a, b, true)\nmodule.exports = compareLoose\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst compareBuild = (a, b, loose) => {\n const versionA = new SemVer(a, loose)\n const versionB = new SemVer(b, loose)\n return versionA.compare(versionB) || versionA.compareBuild(versionB)\n}\nmodule.exports = compareBuild\n", "'use strict'\n\nconst compareBuild = require('./compare-build')\nconst sort = (list, loose) => list.sort((a, b) => compareBuild(a, b, loose))\nmodule.exports = sort\n", "'use strict'\n\nconst compareBuild = require('./compare-build')\nconst rsort = (list, loose) => list.sort((a, b) => compareBuild(b, a, loose))\nmodule.exports = rsort\n", "'use strict'\n\nconst compare = require('./compare')\nconst gt = (a, b, loose) => compare(a, b, loose) > 0\nmodule.exports = gt\n", "'use strict'\n\nconst compare = require('./compare')\nconst lt = (a, b, loose) => compare(a, b, loose) < 0\nmodule.exports = lt\n", "'use strict'\n\nconst compare = require('./compare')\nconst eq = (a, b, loose) => compare(a, b, loose) === 0\nmodule.exports = eq\n", "'use strict'\n\nconst compare = require('./compare')\nconst neq = (a, b, loose) => compare(a, b, loose) !== 0\nmodule.exports = neq\n", "'use strict'\n\nconst compare = require('./compare')\nconst gte = (a, b, loose) => compare(a, b, loose) >= 0\nmodule.exports = gte\n", "'use strict'\n\nconst compare = require('./compare')\nconst lte = (a, b, loose) => compare(a, b, loose) <= 0\nmodule.exports = lte\n", "'use strict'\n\nconst eq = require('./eq')\nconst neq = require('./neq')\nconst gt = require('./gt')\nconst gte = require('./gte')\nconst lt = require('./lt')\nconst lte = require('./lte')\n\nconst cmp = (a, op, b, loose) => {\n switch (op) {\n case '===':\n if (typeof a === 'object') {\n a = a.version\n }\n if (typeof b === 'object') {\n b = b.version\n }\n return a === b\n\n case '!==':\n if (typeof a === 'object') {\n a = a.version\n }\n if (typeof b === 'object') {\n b = b.version\n }\n return a !== b\n\n case '':\n case '=':\n case '==':\n return eq(a, b, loose)\n\n case '!=':\n return neq(a, b, loose)\n\n case '>':\n return gt(a, b, loose)\n\n case '>=':\n return gte(a, b, loose)\n\n case '<':\n return lt(a, b, loose)\n\n case '<=':\n return lte(a, b, loose)\n\n default:\n throw new TypeError(`Invalid operator: ${op}`)\n }\n}\nmodule.exports = cmp\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst parse = require('./parse')\nconst { safeRe: re, t } = require('../internal/re')\n\nconst coerce = (version, options) => {\n if (version instanceof SemVer) {\n return version\n }\n\n if (typeof version === 'number') {\n version = String(version)\n }\n\n if (typeof version !== 'string') {\n return null\n }\n\n options = options || {}\n\n let match = null\n if (!options.rtl) {\n match = version.match(options.includePrerelease ? re[t.COERCEFULL] : re[t.COERCE])\n } else {\n // Find the right-most coercible string that does not share\n // a terminus with a more left-ward coercible string.\n // Eg, '1.2.3.4' wants to coerce '2.3.4', not '3.4' or '4'\n // With includePrerelease option set, '1.2.3.4-rc' wants to coerce '2.3.4-rc', not '2.3.4'\n //\n // Walk through the string checking with a /g regexp\n // Manually set the index so as to pick up overlapping matches.\n // Stop when we get a match that ends at the string end, since no\n // coercible string can be more right-ward without the same terminus.\n const coerceRtlRegex = options.includePrerelease ? re[t.COERCERTLFULL] : re[t.COERCERTL]\n let next\n while ((next = coerceRtlRegex.exec(version)) &&\n (!match || match.index + match[0].length !== version.length)\n ) {\n if (!match ||\n next.index + next[0].length !== match.index + match[0].length) {\n match = next\n }\n coerceRtlRegex.lastIndex = next.index + next[1].length + next[2].length\n }\n // leave it in a clean state\n coerceRtlRegex.lastIndex = -1\n }\n\n if (match === null) {\n return null\n }\n\n const major = match[2]\n const minor = match[3] || '0'\n const patch = match[4] || '0'\n const prerelease = options.includePrerelease && match[5] ? `-${match[5]}` : ''\n const build = options.includePrerelease && match[6] ? `+${match[6]}` : ''\n\n return parse(`${major}.${minor}.${patch}${prerelease}${build}`, options)\n}\nmodule.exports = coerce\n", "'use strict'\n\nclass LRUCache {\n constructor () {\n this.max = 1000\n this.map = new Map()\n }\n\n get (key) {\n const value = this.map.get(key)\n if (value === undefined) {\n return undefined\n } else {\n // Remove the key from the map and add it to the end\n this.map.delete(key)\n this.map.set(key, value)\n return value\n }\n }\n\n delete (key) {\n return this.map.delete(key)\n }\n\n set (key, value) {\n const deleted = this.delete(key)\n\n if (!deleted && value !== undefined) {\n // If cache is full, delete the least recently used item\n if (this.map.size >= this.max) {\n const firstKey = this.map.keys().next().value\n this.delete(firstKey)\n }\n\n this.map.set(key, value)\n }\n\n return this\n }\n}\n\nmodule.exports = LRUCache\n", "'use strict'\n\nconst SPACE_CHARACTERS = /\\s+/g\n\n// hoisted class for cyclic dependency\nclass Range {\n constructor (range, options) {\n options = parseOptions(options)\n\n if (range instanceof Range) {\n if (\n range.loose === !!options.loose &&\n range.includePrerelease === !!options.includePrerelease\n ) {\n return range\n } else {\n return new Range(range.raw, options)\n }\n }\n\n if (range instanceof Comparator) {\n // just put it in the set and return\n this.raw = range.value\n this.set = [[range]]\n this.formatted = undefined\n return this\n }\n\n this.options = options\n this.loose = !!options.loose\n this.includePrerelease = !!options.includePrerelease\n\n // First reduce all whitespace as much as possible so we do not have to rely\n // on potentially slow regexes like \\s*. This is then stored and used for\n // future error messages as well.\n this.raw = range.trim().replace(SPACE_CHARACTERS, ' ')\n\n // First, split on ||\n this.set = this.raw\n .split('||')\n // map the range to a 2d array of comparators\n .map(r => this.parseRange(r.trim()))\n // throw out any comparator lists that are empty\n // this generally means that it was not a valid range, which is allowed\n // in loose mode, but will still throw if the WHOLE range is invalid.\n .filter(c => c.length)\n\n if (!this.set.length) {\n throw new TypeError(`Invalid SemVer Range: ${this.raw}`)\n }\n\n // if we have any that are not the null set, throw out null sets.\n if (this.set.length > 1) {\n // keep the first one, in case they're all null sets\n const first = this.set[0]\n this.set = this.set.filter(c => !isNullSet(c[0]))\n if (this.set.length === 0) {\n this.set = [first]\n } else if (this.set.length > 1) {\n // if we have any that are *, then the range is just *\n for (const c of this.set) {\n if (c.length === 1 && isAny(c[0])) {\n this.set = [c]\n break\n }\n }\n }\n }\n\n this.formatted = undefined\n }\n\n get range () {\n if (this.formatted === undefined) {\n this.formatted = ''\n for (let i = 0; i < this.set.length; i++) {\n if (i > 0) {\n this.formatted += '||'\n }\n const comps = this.set[i]\n for (let k = 0; k < comps.length; k++) {\n if (k > 0) {\n this.formatted += ' '\n }\n this.formatted += comps[k].toString().trim()\n }\n }\n }\n return this.formatted\n }\n\n format () {\n return this.range\n }\n\n toString () {\n return this.range\n }\n\n parseRange (range) {\n // memoize range parsing for performance.\n // this is a very hot path, and fully deterministic.\n const memoOpts =\n (this.options.includePrerelease && FLAG_INCLUDE_PRERELEASE) |\n (this.options.loose && FLAG_LOOSE)\n const memoKey = memoOpts + ':' + range\n const cached = cache.get(memoKey)\n if (cached) {\n return cached\n }\n\n const loose = this.options.loose\n // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4`\n const hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE]\n range = range.replace(hr, hyphenReplace(this.options.includePrerelease))\n debug('hyphen replace', range)\n\n // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5`\n range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace)\n debug('comparator trim', range)\n\n // `~ 1.2.3` => `~1.2.3`\n range = range.replace(re[t.TILDETRIM], tildeTrimReplace)\n debug('tilde trim', range)\n\n // `^ 1.2.3` => `^1.2.3`\n range = range.replace(re[t.CARETTRIM], caretTrimReplace)\n debug('caret trim', range)\n\n // At this point, the range is completely trimmed and\n // ready to be split into comparators.\n\n let rangeList = range\n .split(' ')\n .map(comp => parseComparator(comp, this.options))\n .join(' ')\n .split(/\\s+/)\n // >=0.0.0 is equivalent to *\n .map(comp => replaceGTE0(comp, this.options))\n\n if (loose) {\n // in loose mode, throw out any that are not valid comparators\n rangeList = rangeList.filter(comp => {\n debug('loose invalid filter', comp, this.options)\n return !!comp.match(re[t.COMPARATORLOOSE])\n })\n }\n debug('range list', rangeList)\n\n // if any comparators are the null set, then replace with JUST null set\n // if more than one comparator, remove any * comparators\n // also, don't include the same comparator more than once\n const rangeMap = new Map()\n const comparators = rangeList.map(comp => new Comparator(comp, this.options))\n for (const comp of comparators) {\n if (isNullSet(comp)) {\n return [comp]\n }\n rangeMap.set(comp.value, comp)\n }\n if (rangeMap.size > 1 && rangeMap.has('')) {\n rangeMap.delete('')\n }\n\n const result = [...rangeMap.values()]\n cache.set(memoKey, result)\n return result\n }\n\n intersects (range, options) {\n if (!(range instanceof Range)) {\n throw new TypeError('a Range is required')\n }\n\n return this.set.some((thisComparators) => {\n return (\n isSatisfiable(thisComparators, options) &&\n range.set.some((rangeComparators) => {\n return (\n isSatisfiable(rangeComparators, options) &&\n thisComparators.every((thisComparator) => {\n return rangeComparators.every((rangeComparator) => {\n return thisComparator.intersects(rangeComparator, options)\n })\n })\n )\n })\n )\n })\n }\n\n // if ANY of the sets match ALL of its comparators, then pass\n test (version) {\n if (!version) {\n return false\n }\n\n if (typeof version === 'string') {\n try {\n version = new SemVer(version, this.options)\n } catch (er) {\n return false\n }\n }\n\n for (let i = 0; i < this.set.length; i++) {\n if (testSet(this.set[i], version, this.options)) {\n return true\n }\n }\n return false\n }\n}\n\nmodule.exports = Range\n\nconst LRU = require('../internal/lrucache')\nconst cache = new LRU()\n\nconst parseOptions = require('../internal/parse-options')\nconst Comparator = require('./comparator')\nconst debug = require('../internal/debug')\nconst SemVer = require('./semver')\nconst {\n safeRe: re,\n t,\n comparatorTrimReplace,\n tildeTrimReplace,\n caretTrimReplace,\n} = require('../internal/re')\nconst { FLAG_INCLUDE_PRERELEASE, FLAG_LOOSE } = require('../internal/constants')\n\nconst isNullSet = c => c.value === '<0.0.0-0'\nconst isAny = c => c.value === ''\n\n// take a set of comparators and determine whether there\n// exists a version which can satisfy it\nconst isSatisfiable = (comparators, options) => {\n let result = true\n const remainingComparators = comparators.slice()\n let testComparator = remainingComparators.pop()\n\n while (result && remainingComparators.length) {\n result = remainingComparators.every((otherComparator) => {\n return testComparator.intersects(otherComparator, options)\n })\n\n testComparator = remainingComparators.pop()\n }\n\n return result\n}\n\n// comprised of xranges, tildes, stars, and gtlt's at this point.\n// already replaced the hyphen ranges\n// turn into a set of JUST comparators.\nconst parseComparator = (comp, options) => {\n comp = comp.replace(re[t.BUILD], '')\n debug('comp', comp, options)\n comp = replaceCarets(comp, options)\n debug('caret', comp)\n comp = replaceTildes(comp, options)\n debug('tildes', comp)\n comp = replaceXRanges(comp, options)\n debug('xrange', comp)\n comp = replaceStars(comp, options)\n debug('stars', comp)\n return comp\n}\n\nconst isX = id => !id || id.toLowerCase() === 'x' || id === '*'\n\n// ~, ~> --> * (any, kinda silly)\n// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0-0\n// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0-0\n// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0-0\n// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0-0\n// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0-0\n// ~0.0.1 --> >=0.0.1 <0.1.0-0\nconst replaceTildes = (comp, options) => {\n return comp\n .trim()\n .split(/\\s+/)\n .map((c) => replaceTilde(c, options))\n .join(' ')\n}\n\nconst replaceTilde = (comp, options) => {\n const r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE]\n return comp.replace(r, (_, M, m, p, pr) => {\n debug('tilde', comp, _, M, m, p, pr)\n let ret\n\n if (isX(M)) {\n ret = ''\n } else if (isX(m)) {\n ret = `>=${M}.0.0 <${+M + 1}.0.0-0`\n } else if (isX(p)) {\n // ~1.2 == >=1.2.0 <1.3.0-0\n ret = `>=${M}.${m}.0 <${M}.${+m + 1}.0-0`\n } else if (pr) {\n debug('replaceTilde pr', pr)\n ret = `>=${M}.${m}.${p}-${pr\n } <${M}.${+m + 1}.0-0`\n } else {\n // ~1.2.3 == >=1.2.3 <1.3.0-0\n ret = `>=${M}.${m}.${p\n } <${M}.${+m + 1}.0-0`\n }\n\n debug('tilde return', ret)\n return ret\n })\n}\n\n// ^ --> * (any, kinda silly)\n// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0-0\n// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0-0\n// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0-0\n// ^1.2.3 --> >=1.2.3 <2.0.0-0\n// ^1.2.0 --> >=1.2.0 <2.0.0-0\n// ^0.0.1 --> >=0.0.1 <0.0.2-0\n// ^0.1.0 --> >=0.1.0 <0.2.0-0\nconst replaceCarets = (comp, options) => {\n return comp\n .trim()\n .split(/\\s+/)\n .map((c) => replaceCaret(c, options))\n .join(' ')\n}\n\nconst replaceCaret = (comp, options) => {\n debug('caret', comp, options)\n const r = options.loose ? re[t.CARETLOOSE] : re[t.CARET]\n const z = options.includePrerelease ? '-0' : ''\n return comp.replace(r, (_, M, m, p, pr) => {\n debug('caret', comp, _, M, m, p, pr)\n let ret\n\n if (isX(M)) {\n ret = ''\n } else if (isX(m)) {\n ret = `>=${M}.0.0${z} <${+M + 1}.0.0-0`\n } else if (isX(p)) {\n if (M === '0') {\n ret = `>=${M}.${m}.0${z} <${M}.${+m + 1}.0-0`\n } else {\n ret = `>=${M}.${m}.0${z} <${+M + 1}.0.0-0`\n }\n } else if (pr) {\n debug('replaceCaret pr', pr)\n if (M === '0') {\n if (m === '0') {\n ret = `>=${M}.${m}.${p}-${pr\n } <${M}.${m}.${+p + 1}-0`\n } else {\n ret = `>=${M}.${m}.${p}-${pr\n } <${M}.${+m + 1}.0-0`\n }\n } else {\n ret = `>=${M}.${m}.${p}-${pr\n } <${+M + 1}.0.0-0`\n }\n } else {\n debug('no pr')\n if (M === '0') {\n if (m === '0') {\n ret = `>=${M}.${m}.${p\n }${z} <${M}.${m}.${+p + 1}-0`\n } else {\n ret = `>=${M}.${m}.${p\n }${z} <${M}.${+m + 1}.0-0`\n }\n } else {\n ret = `>=${M}.${m}.${p\n } <${+M + 1}.0.0-0`\n }\n }\n\n debug('caret return', ret)\n return ret\n })\n}\n\nconst replaceXRanges = (comp, options) => {\n debug('replaceXRanges', comp, options)\n return comp\n .split(/\\s+/)\n .map((c) => replaceXRange(c, options))\n .join(' ')\n}\n\nconst replaceXRange = (comp, options) => {\n comp = comp.trim()\n const r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE]\n return comp.replace(r, (ret, gtlt, M, m, p, pr) => {\n debug('xRange', comp, ret, gtlt, M, m, p, pr)\n const xM = isX(M)\n const xm = xM || isX(m)\n const xp = xm || isX(p)\n const anyX = xp\n\n if (gtlt === '=' && anyX) {\n gtlt = ''\n }\n\n // if we're including prereleases in the match, then we need\n // to fix this to -0, the lowest possible prerelease value\n pr = options.includePrerelease ? '-0' : ''\n\n if (xM) {\n if (gtlt === '>' || gtlt === '<') {\n // nothing is allowed\n ret = '<0.0.0-0'\n } else {\n // nothing is forbidden\n ret = '*'\n }\n } else if (gtlt && anyX) {\n // we know patch is an x, because we have any x at all.\n // replace X with 0\n if (xm) {\n m = 0\n }\n p = 0\n\n if (gtlt === '>') {\n // >1 => >=2.0.0\n // >1.2 => >=1.3.0\n gtlt = '>='\n if (xm) {\n M = +M + 1\n m = 0\n p = 0\n } else {\n m = +m + 1\n p = 0\n }\n } else if (gtlt === '<=') {\n // <=0.7.x is actually <0.8.0, since any 0.7.x should\n // pass. Similarly, <=7.x is actually <8.0.0, etc.\n gtlt = '<'\n if (xm) {\n M = +M + 1\n } else {\n m = +m + 1\n }\n }\n\n if (gtlt === '<') {\n pr = '-0'\n }\n\n ret = `${gtlt + M}.${m}.${p}${pr}`\n } else if (xm) {\n ret = `>=${M}.0.0${pr} <${+M + 1}.0.0-0`\n } else if (xp) {\n ret = `>=${M}.${m}.0${pr\n } <${M}.${+m + 1}.0-0`\n }\n\n debug('xRange return', ret)\n\n return ret\n })\n}\n\n// Because * is AND-ed with everything else in the comparator,\n// and '' means \"any version\", just remove the *s entirely.\nconst replaceStars = (comp, options) => {\n debug('replaceStars', comp, options)\n // Looseness is ignored here. star is always as loose as it gets!\n return comp\n .trim()\n .replace(re[t.STAR], '')\n}\n\nconst replaceGTE0 = (comp, options) => {\n debug('replaceGTE0', comp, options)\n return comp\n .trim()\n .replace(re[options.includePrerelease ? t.GTE0PRE : t.GTE0], '')\n}\n\n// This function is passed to string.replace(re[t.HYPHENRANGE])\n// M, m, patch, prerelease, build\n// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5\n// 1.2.3 - 3.4 => >=1.2.0 <3.5.0-0 Any 3.4.x will do\n// 1.2 - 3.4 => >=1.2.0 <3.5.0-0\n// TODO build?\nconst hyphenReplace = incPr => ($0,\n from, fM, fm, fp, fpr, fb,\n to, tM, tm, tp, tpr) => {\n if (isX(fM)) {\n from = ''\n } else if (isX(fm)) {\n from = `>=${fM}.0.0${incPr ? '-0' : ''}`\n } else if (isX(fp)) {\n from = `>=${fM}.${fm}.0${incPr ? '-0' : ''}`\n } else if (fpr) {\n from = `>=${from}`\n } else {\n from = `>=${from}${incPr ? '-0' : ''}`\n }\n\n if (isX(tM)) {\n to = ''\n } else if (isX(tm)) {\n to = `<${+tM + 1}.0.0-0`\n } else if (isX(tp)) {\n to = `<${tM}.${+tm + 1}.0-0`\n } else if (tpr) {\n to = `<=${tM}.${tm}.${tp}-${tpr}`\n } else if (incPr) {\n to = `<${tM}.${tm}.${+tp + 1}-0`\n } else {\n to = `<=${to}`\n }\n\n return `${from} ${to}`.trim()\n}\n\nconst testSet = (set, version, options) => {\n for (let i = 0; i < set.length; i++) {\n if (!set[i].test(version)) {\n return false\n }\n }\n\n if (version.prerelease.length && !options.includePrerelease) {\n // Find the set of versions that are allowed to have prereleases\n // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0\n // That should allow `1.2.3-pr.2` to pass.\n // However, `1.2.4-alpha.notready` should NOT be allowed,\n // even though it's within the range set by the comparators.\n for (let i = 0; i < set.length; i++) {\n debug(set[i].semver)\n if (set[i].semver === Comparator.ANY) {\n continue\n }\n\n if (set[i].semver.prerelease.length > 0) {\n const allowed = set[i].semver\n if (allowed.major === version.major &&\n allowed.minor === version.minor &&\n allowed.patch === version.patch) {\n return true\n }\n }\n }\n\n // Version has a -pre, but it's not one of the ones we like.\n return false\n }\n\n return true\n}\n", "'use strict'\n\nconst ANY = Symbol('SemVer ANY')\n// hoisted class for cyclic dependency\nclass Comparator {\n static get ANY () {\n return ANY\n }\n\n constructor (comp, options) {\n options = parseOptions(options)\n\n if (comp instanceof Comparator) {\n if (comp.loose === !!options.loose) {\n return comp\n } else {\n comp = comp.value\n }\n }\n\n comp = comp.trim().split(/\\s+/).join(' ')\n debug('comparator', comp, options)\n this.options = options\n this.loose = !!options.loose\n this.parse(comp)\n\n if (this.semver === ANY) {\n this.value = ''\n } else {\n this.value = this.operator + this.semver.version\n }\n\n debug('comp', this)\n }\n\n parse (comp) {\n const r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR]\n const m = comp.match(r)\n\n if (!m) {\n throw new TypeError(`Invalid comparator: ${comp}`)\n }\n\n this.operator = m[1] !== undefined ? m[1] : ''\n if (this.operator === '=') {\n this.operator = ''\n }\n\n // if it literally is just '>' or '' then allow anything.\n if (!m[2]) {\n this.semver = ANY\n } else {\n this.semver = new SemVer(m[2], this.options.loose)\n }\n }\n\n toString () {\n return this.value\n }\n\n test (version) {\n debug('Comparator.test', version, this.options.loose)\n\n if (this.semver === ANY || version === ANY) {\n return true\n }\n\n if (typeof version === 'string') {\n try {\n version = new SemVer(version, this.options)\n } catch (er) {\n return false\n }\n }\n\n return cmp(version, this.operator, this.semver, this.options)\n }\n\n intersects (comp, options) {\n if (!(comp instanceof Comparator)) {\n throw new TypeError('a Comparator is required')\n }\n\n if (this.operator === '') {\n if (this.value === '') {\n return true\n }\n return new Range(comp.value, options).test(this.value)\n } else if (comp.operator === '') {\n if (comp.value === '') {\n return true\n }\n return new Range(this.value, options).test(comp.semver)\n }\n\n options = parseOptions(options)\n\n // Special cases where nothing can possibly be lower\n if (options.includePrerelease &&\n (this.value === '<0.0.0-0' || comp.value === '<0.0.0-0')) {\n return false\n }\n if (!options.includePrerelease &&\n (this.value.startsWith('<0.0.0') || comp.value.startsWith('<0.0.0'))) {\n return false\n }\n\n // Same direction increasing (> or >=)\n if (this.operator.startsWith('>') && comp.operator.startsWith('>')) {\n return true\n }\n // Same direction decreasing (< or <=)\n if (this.operator.startsWith('<') && comp.operator.startsWith('<')) {\n return true\n }\n // same SemVer and both sides are inclusive (<= or >=)\n if (\n (this.semver.version === comp.semver.version) &&\n this.operator.includes('=') && comp.operator.includes('=')) {\n return true\n }\n // opposite directions less than\n if (cmp(this.semver, '<', comp.semver, options) &&\n this.operator.startsWith('>') && comp.operator.startsWith('<')) {\n return true\n }\n // opposite directions greater than\n if (cmp(this.semver, '>', comp.semver, options) &&\n this.operator.startsWith('<') && comp.operator.startsWith('>')) {\n return true\n }\n return false\n }\n}\n\nmodule.exports = Comparator\n\nconst parseOptions = require('../internal/parse-options')\nconst { safeRe: re, t } = require('../internal/re')\nconst cmp = require('../functions/cmp')\nconst debug = require('../internal/debug')\nconst SemVer = require('./semver')\nconst Range = require('./range')\n", "'use strict'\n\nconst Range = require('../classes/range')\nconst satisfies = (version, range, options) => {\n try {\n range = new Range(range, options)\n } catch (er) {\n return false\n }\n return range.test(version)\n}\nmodule.exports = satisfies\n", "'use strict'\n\nconst Range = require('../classes/range')\n\n// Mostly just for testing and legacy API reasons\nconst toComparators = (range, options) =>\n new Range(range, options).set\n .map(comp => comp.map(c => c.value).join(' ').trim().split(' '))\n\nmodule.exports = toComparators\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\n\nconst maxSatisfying = (versions, range, options) => {\n let max = null\n let maxSV = null\n let rangeObj = null\n try {\n rangeObj = new Range(range, options)\n } catch (er) {\n return null\n }\n versions.forEach((v) => {\n if (rangeObj.test(v)) {\n // satisfies(v, range, options)\n if (!max || maxSV.compare(v) === -1) {\n // compare(max, v, true)\n max = v\n maxSV = new SemVer(max, options)\n }\n }\n })\n return max\n}\nmodule.exports = maxSatisfying\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\nconst minSatisfying = (versions, range, options) => {\n let min = null\n let minSV = null\n let rangeObj = null\n try {\n rangeObj = new Range(range, options)\n } catch (er) {\n return null\n }\n versions.forEach((v) => {\n if (rangeObj.test(v)) {\n // satisfies(v, range, options)\n if (!min || minSV.compare(v) === 1) {\n // compare(min, v, true)\n min = v\n minSV = new SemVer(min, options)\n }\n }\n })\n return min\n}\nmodule.exports = minSatisfying\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\nconst gt = require('../functions/gt')\n\nconst minVersion = (range, loose) => {\n range = new Range(range, loose)\n\n let minver = new SemVer('0.0.0')\n if (range.test(minver)) {\n return minver\n }\n\n minver = new SemVer('0.0.0-0')\n if (range.test(minver)) {\n return minver\n }\n\n minver = null\n for (let i = 0; i < range.set.length; ++i) {\n const comparators = range.set[i]\n\n let setMin = null\n comparators.forEach((comparator) => {\n // Clone to avoid manipulating the comparator's semver object.\n const compver = new SemVer(comparator.semver.version)\n switch (comparator.operator) {\n case '>':\n if (compver.prerelease.length === 0) {\n compver.patch++\n } else {\n compver.prerelease.push(0)\n }\n compver.raw = compver.format()\n /* fallthrough */\n case '':\n case '>=':\n if (!setMin || gt(compver, setMin)) {\n setMin = compver\n }\n break\n case '<':\n case '<=':\n /* Ignore maximum versions */\n break\n /* istanbul ignore next */\n default:\n throw new Error(`Unexpected operation: ${comparator.operator}`)\n }\n })\n if (setMin && (!minver || gt(minver, setMin))) {\n minver = setMin\n }\n }\n\n if (minver && range.test(minver)) {\n return minver\n }\n\n return null\n}\nmodule.exports = minVersion\n", "'use strict'\n\nconst Range = require('../classes/range')\nconst validRange = (range, options) => {\n try {\n // Return '*' instead of '' so that truthiness works.\n // This will throw if it's invalid anyway\n return new Range(range, options).range || '*'\n } catch (er) {\n return null\n }\n}\nmodule.exports = validRange\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst Comparator = require('../classes/comparator')\nconst { ANY } = Comparator\nconst Range = require('../classes/range')\nconst satisfies = require('../functions/satisfies')\nconst gt = require('../functions/gt')\nconst lt = require('../functions/lt')\nconst lte = require('../functions/lte')\nconst gte = require('../functions/gte')\n\nconst outside = (version, range, hilo, options) => {\n version = new SemVer(version, options)\n range = new Range(range, options)\n\n let gtfn, ltefn, ltfn, comp, ecomp\n switch (hilo) {\n case '>':\n gtfn = gt\n ltefn = lte\n ltfn = lt\n comp = '>'\n ecomp = '>='\n break\n case '<':\n gtfn = lt\n ltefn = gte\n ltfn = gt\n comp = '<'\n ecomp = '<='\n break\n default:\n throw new TypeError('Must provide a hilo val of \"<\" or \">\"')\n }\n\n // If it satisfies the range it is not outside\n if (satisfies(version, range, options)) {\n return false\n }\n\n // From now on, variable terms are as if we're in \"gtr\" mode.\n // but note that everything is flipped for the \"ltr\" function.\n\n for (let i = 0; i < range.set.length; ++i) {\n const comparators = range.set[i]\n\n let high = null\n let low = null\n\n comparators.forEach((comparator) => {\n if (comparator.semver === ANY) {\n comparator = new Comparator('>=0.0.0')\n }\n high = high || comparator\n low = low || comparator\n if (gtfn(comparator.semver, high.semver, options)) {\n high = comparator\n } else if (ltfn(comparator.semver, low.semver, options)) {\n low = comparator\n }\n })\n\n // If the edge version comparator has a operator then our version\n // isn't outside it\n if (high.operator === comp || high.operator === ecomp) {\n return false\n }\n\n // If the lowest version comparator has an operator and our version\n // is less than it then it isn't higher than the range\n if ((!low.operator || low.operator === comp) &&\n ltefn(version, low.semver)) {\n return false\n } else if (low.operator === ecomp && ltfn(version, low.semver)) {\n return false\n }\n }\n return true\n}\n\nmodule.exports = outside\n", "'use strict'\n\n// Determine if version is greater than all the versions possible in the range.\nconst outside = require('./outside')\nconst gtr = (version, range, options) => outside(version, range, '>', options)\nmodule.exports = gtr\n", "'use strict'\n\nconst outside = require('./outside')\n// Determine if version is less than all the versions possible in the range\nconst ltr = (version, range, options) => outside(version, range, '<', options)\nmodule.exports = ltr\n", "'use strict'\n\nconst Range = require('../classes/range')\nconst intersects = (r1, r2, options) => {\n r1 = new Range(r1, options)\n r2 = new Range(r2, options)\n return r1.intersects(r2, options)\n}\nmodule.exports = intersects\n", "'use strict'\n\n// given a set of versions and a range, create a \"simplified\" range\n// that includes the same versions that the original range does\n// If the original range is shorter than the simplified one, return that.\nconst satisfies = require('../functions/satisfies.js')\nconst compare = require('../functions/compare.js')\nmodule.exports = (versions, range, options) => {\n const set = []\n let first = null\n let prev = null\n const v = versions.sort((a, b) => compare(a, b, options))\n for (const version of v) {\n const included = satisfies(version, range, options)\n if (included) {\n prev = version\n if (!first) {\n first = version\n }\n } else {\n if (prev) {\n set.push([first, prev])\n }\n prev = null\n first = null\n }\n }\n if (first) {\n set.push([first, null])\n }\n\n const ranges = []\n for (const [min, max] of set) {\n if (min === max) {\n ranges.push(min)\n } else if (!max && min === v[0]) {\n ranges.push('*')\n } else if (!max) {\n ranges.push(`>=${min}`)\n } else if (min === v[0]) {\n ranges.push(`<=${max}`)\n } else {\n ranges.push(`${min} - ${max}`)\n }\n }\n const simplified = ranges.join(' || ')\n const original = typeof range.raw === 'string' ? range.raw : String(range)\n return simplified.length < original.length ? simplified : range\n}\n", "'use strict'\n\nconst Range = require('../classes/range.js')\nconst Comparator = require('../classes/comparator.js')\nconst { ANY } = Comparator\nconst satisfies = require('../functions/satisfies.js')\nconst compare = require('../functions/compare.js')\n\n// Complex range `r1 || r2 || ...` is a subset of `R1 || R2 || ...` iff:\n// - Every simple range `r1, r2, ...` is a null set, OR\n// - Every simple range `r1, r2, ...` which is not a null set is a subset of\n// some `R1, R2, ...`\n//\n// Simple range `c1 c2 ...` is a subset of simple range `C1 C2 ...` iff:\n// - If c is only the ANY comparator\n// - If C is only the ANY comparator, return true\n// - Else if in prerelease mode, return false\n// - else replace c with `[>=0.0.0]`\n// - If C is only the ANY comparator\n// - if in prerelease mode, return true\n// - else replace C with `[>=0.0.0]`\n// - Let EQ be the set of = comparators in c\n// - If EQ is more than one, return true (null set)\n// - Let GT be the highest > or >= comparator in c\n// - Let LT be the lowest < or <= comparator in c\n// - If GT and LT, and GT.semver > LT.semver, return true (null set)\n// - If any C is a = range, and GT or LT are set, return false\n// - If EQ\n// - If GT, and EQ does not satisfy GT, return true (null set)\n// - If LT, and EQ does not satisfy LT, return true (null set)\n// - If EQ satisfies every C, return true\n// - Else return false\n// - If GT\n// - If GT.semver is lower than any > or >= comp in C, return false\n// - If GT is >=, and GT.semver does not satisfy every C, return false\n// - If GT.semver has a prerelease, and not in prerelease mode\n// - If no C has a prerelease and the GT.semver tuple, return false\n// - If LT\n// - If LT.semver is greater than any < or <= comp in C, return false\n// - If LT is <=, and LT.semver does not satisfy every C, return false\n// - If LT.semver has a prerelease, and not in prerelease mode\n// - If no C has a prerelease and the LT.semver tuple, return false\n// - Else return true\n\nconst subset = (sub, dom, options = {}) => {\n if (sub === dom) {\n return true\n }\n\n sub = new Range(sub, options)\n dom = new Range(dom, options)\n let sawNonNull = false\n\n OUTER: for (const simpleSub of sub.set) {\n for (const simpleDom of dom.set) {\n const isSub = simpleSubset(simpleSub, simpleDom, options)\n sawNonNull = sawNonNull || isSub !== null\n if (isSub) {\n continue OUTER\n }\n }\n // the null set is a subset of everything, but null simple ranges in\n // a complex range should be ignored. so if we saw a non-null range,\n // then we know this isn't a subset, but if EVERY simple range was null,\n // then it is a subset.\n if (sawNonNull) {\n return false\n }\n }\n return true\n}\n\nconst minimumVersionWithPreRelease = [new Comparator('>=0.0.0-0')]\nconst minimumVersion = [new Comparator('>=0.0.0')]\n\nconst simpleSubset = (sub, dom, options) => {\n if (sub === dom) {\n return true\n }\n\n if (sub.length === 1 && sub[0].semver === ANY) {\n if (dom.length === 1 && dom[0].semver === ANY) {\n return true\n } else if (options.includePrerelease) {\n sub = minimumVersionWithPreRelease\n } else {\n sub = minimumVersion\n }\n }\n\n if (dom.length === 1 && dom[0].semver === ANY) {\n if (options.includePrerelease) {\n return true\n } else {\n dom = minimumVersion\n }\n }\n\n const eqSet = new Set()\n let gt, lt\n for (const c of sub) {\n if (c.operator === '>' || c.operator === '>=') {\n gt = higherGT(gt, c, options)\n } else if (c.operator === '<' || c.operator === '<=') {\n lt = lowerLT(lt, c, options)\n } else {\n eqSet.add(c.semver)\n }\n }\n\n if (eqSet.size > 1) {\n return null\n }\n\n let gtltComp\n if (gt && lt) {\n gtltComp = compare(gt.semver, lt.semver, options)\n if (gtltComp > 0) {\n return null\n } else if (gtltComp === 0 && (gt.operator !== '>=' || lt.operator !== '<=')) {\n return null\n }\n }\n\n // will iterate one or zero times\n for (const eq of eqSet) {\n if (gt && !satisfies(eq, String(gt), options)) {\n return null\n }\n\n if (lt && !satisfies(eq, String(lt), options)) {\n return null\n }\n\n for (const c of dom) {\n if (!satisfies(eq, String(c), options)) {\n return false\n }\n }\n\n return true\n }\n\n let higher, lower\n let hasDomLT, hasDomGT\n // if the subset has a prerelease, we need a comparator in the superset\n // with the same tuple and a prerelease, or it's not a subset\n let needDomLTPre = lt &&\n !options.includePrerelease &&\n lt.semver.prerelease.length ? lt.semver : false\n let needDomGTPre = gt &&\n !options.includePrerelease &&\n gt.semver.prerelease.length ? gt.semver : false\n // exception: <1.2.3-0 is the same as <1.2.3\n if (needDomLTPre && needDomLTPre.prerelease.length === 1 &&\n lt.operator === '<' && needDomLTPre.prerelease[0] === 0) {\n needDomLTPre = false\n }\n\n for (const c of dom) {\n hasDomGT = hasDomGT || c.operator === '>' || c.operator === '>='\n hasDomLT = hasDomLT || c.operator === '<' || c.operator === '<='\n if (gt) {\n if (needDomGTPre) {\n if (c.semver.prerelease && c.semver.prerelease.length &&\n c.semver.major === needDomGTPre.major &&\n c.semver.minor === needDomGTPre.minor &&\n c.semver.patch === needDomGTPre.patch) {\n needDomGTPre = false\n }\n }\n if (c.operator === '>' || c.operator === '>=') {\n higher = higherGT(gt, c, options)\n if (higher === c && higher !== gt) {\n return false\n }\n } else if (gt.operator === '>=' && !satisfies(gt.semver, String(c), options)) {\n return false\n }\n }\n if (lt) {\n if (needDomLTPre) {\n if (c.semver.prerelease && c.semver.prerelease.length &&\n c.semver.major === needDomLTPre.major &&\n c.semver.minor === needDomLTPre.minor &&\n c.semver.patch === needDomLTPre.patch) {\n needDomLTPre = false\n }\n }\n if (c.operator === '<' || c.operator === '<=') {\n lower = lowerLT(lt, c, options)\n if (lower === c && lower !== lt) {\n return false\n }\n } else if (lt.operator === '<=' && !satisfies(lt.semver, String(c), options)) {\n return false\n }\n }\n if (!c.operator && (lt || gt) && gtltComp !== 0) {\n return false\n }\n }\n\n // if there was a < or >, and nothing in the dom, then must be false\n // UNLESS it was limited by another range in the other direction.\n // Eg, >1.0.0 <1.0.1 is still a subset of <2.0.0\n if (gt && hasDomLT && !lt && gtltComp !== 0) {\n return false\n }\n\n if (lt && hasDomGT && !gt && gtltComp !== 0) {\n return false\n }\n\n // we needed a prerelease range in a specific tuple, but didn't get one\n // then this isn't a subset. eg >=1.2.3-pre is not a subset of >=1.0.0,\n // because it includes prereleases in the 1.2.3 tuple\n if (needDomGTPre || needDomLTPre) {\n return false\n }\n\n return true\n}\n\n// >=1.2.3 is lower than >1.2.3\nconst higherGT = (a, b, options) => {\n if (!a) {\n return b\n }\n const comp = compare(a.semver, b.semver, options)\n return comp > 0 ? a\n : comp < 0 ? b\n : b.operator === '>' && a.operator === '>=' ? b\n : a\n}\n\n// <=1.2.3 is higher than <1.2.3\nconst lowerLT = (a, b, options) => {\n if (!a) {\n return b\n }\n const comp = compare(a.semver, b.semver, options)\n return comp < 0 ? a\n : comp > 0 ? b\n : b.operator === '<' && a.operator === '<=' ? b\n : a\n}\n\nmodule.exports = subset\n", "'use strict'\n\n// just pre-load all the stuff that index.js lazily exports\nconst internalRe = require('./internal/re')\nconst constants = require('./internal/constants')\nconst SemVer = require('./classes/semver')\nconst identifiers = require('./internal/identifiers')\nconst parse = require('./functions/parse')\nconst valid = require('./functions/valid')\nconst clean = require('./functions/clean')\nconst inc = require('./functions/inc')\nconst diff = require('./functions/diff')\nconst major = require('./functions/major')\nconst minor = require('./functions/minor')\nconst patch = require('./functions/patch')\nconst prerelease = require('./functions/prerelease')\nconst compare = require('./functions/compare')\nconst rcompare = require('./functions/rcompare')\nconst compareLoose = require('./functions/compare-loose')\nconst compareBuild = require('./functions/compare-build')\nconst sort = require('./functions/sort')\nconst rsort = require('./functions/rsort')\nconst gt = require('./functions/gt')\nconst lt = require('./functions/lt')\nconst eq = require('./functions/eq')\nconst neq = require('./functions/neq')\nconst gte = require('./functions/gte')\nconst lte = require('./functions/lte')\nconst cmp = require('./functions/cmp')\nconst coerce = require('./functions/coerce')\nconst Comparator = require('./classes/comparator')\nconst Range = require('./classes/range')\nconst satisfies = require('./functions/satisfies')\nconst toComparators = require('./ranges/to-comparators')\nconst maxSatisfying = require('./ranges/max-satisfying')\nconst minSatisfying = require('./ranges/min-satisfying')\nconst minVersion = require('./ranges/min-version')\nconst validRange = require('./ranges/valid')\nconst outside = require('./ranges/outside')\nconst gtr = require('./ranges/gtr')\nconst ltr = require('./ranges/ltr')\nconst intersects = require('./ranges/intersects')\nconst simplifyRange = require('./ranges/simplify')\nconst subset = require('./ranges/subset')\nmodule.exports = {\n parse,\n valid,\n clean,\n inc,\n diff,\n major,\n minor,\n patch,\n prerelease,\n compare,\n rcompare,\n compareLoose,\n compareBuild,\n sort,\n rsort,\n gt,\n lt,\n eq,\n neq,\n gte,\n lte,\n cmp,\n coerce,\n Comparator,\n Range,\n satisfies,\n toComparators,\n maxSatisfying,\n minSatisfying,\n minVersion,\n validRange,\n outside,\n gtr,\n ltr,\n intersects,\n simplifyRange,\n subset,\n SemVer,\n re: internalRe.re,\n src: internalRe.src,\n tokens: internalRe.t,\n SEMVER_SPEC_VERSION: constants.SEMVER_SPEC_VERSION,\n RELEASE_TYPES: constants.RELEASE_TYPES,\n compareIdentifiers: identifiers.compareIdentifiers,\n rcompareIdentifiers: identifiers.rcompareIdentifiers,\n}\n", "/**\n * Lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright JS Foundation and other contributors <https://js.foundation/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n asyncTag = '[object AsyncFunction]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n nullTag = '[object Null]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n proxyTag = '[object Proxy]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n undefinedTag = '[object Undefined]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n}\n\n/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\n/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\nfunction arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\n/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\n/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\n/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\n/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\n/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\n/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n Symbol = root.Symbol,\n Uint8Array = root.Uint8Array,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice,\n symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols,\n nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n nativeKeys = overArg(Object.keys, Object);\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView'),\n Map = getNative(root, 'Map'),\n Promise = getNative(root, 'Promise'),\n Set = getNative(root, 'Set'),\n WeakMap = getNative(root, 'WeakMap'),\n nativeCreate = getNative(Object, 'create');\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\n/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\n/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n}\n\n/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n}\n\n/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\n/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(array);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n}\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n};\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n length = length == null ? MAX_SAFE_INTEGER : length;\n return !!length &&\n (typeof value == 'number' || reIsUint.test(value)) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\n/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\n/**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\nfunction isEqual(value, other) {\n return baseIsEqual(value, other);\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\n/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\n/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nmodule.exports = isEqual;\n", "import { UpdateInfo } from \"builder-util-runtime\"\nimport { createHash } from \"crypto\"\nimport { createReadStream } from \"fs\"\n// @ts-ignore\nimport * as isEqual from \"lodash.isequal\"\nimport { ResolvedUpdateFileInfo } from \"./types\"\nimport { Logger } from \"./types\"\nimport { pathExists, readJson, emptyDir, outputJson, unlink } from \"fs-extra\"\nimport * as path from \"path\"\n\n/** @private **/\nexport class DownloadedUpdateHelper {\n private _file: string | null = null\n private _packageFile: string | null = null\n\n private versionInfo: UpdateInfo | null = null\n private fileInfo: ResolvedUpdateFileInfo | null = null\n\n constructor(readonly cacheDir: string) {}\n\n private _downloadedFileInfo: CachedUpdateInfo | null = null\n get downloadedFileInfo(): CachedUpdateInfo | null {\n return this._downloadedFileInfo\n }\n\n get file(): string | null {\n return this._file\n }\n\n get packageFile(): string | null {\n return this._packageFile\n }\n\n get cacheDirForPendingUpdate(): string {\n return path.join(this.cacheDir, \"pending\")\n }\n\n async validateDownloadedPath(updateFile: string, updateInfo: UpdateInfo, fileInfo: ResolvedUpdateFileInfo, logger: Logger): Promise<string | null> {\n if (this.versionInfo != null && this.file === updateFile && this.fileInfo != null) {\n // update has already been downloaded from this running instance\n // check here only existence, not checksum\n if (isEqual(this.versionInfo, updateInfo) && isEqual(this.fileInfo.info, fileInfo.info) && (await pathExists(updateFile))) {\n return updateFile\n } else {\n return null\n }\n }\n\n // update has already been downloaded from some previous app launch\n const cachedUpdateFile = await this.getValidCachedUpdateFile(fileInfo, logger)\n if (cachedUpdateFile === null) {\n return null\n }\n logger.info(`Update has already been downloaded to ${updateFile}).`)\n this._file = cachedUpdateFile\n return cachedUpdateFile\n }\n\n async setDownloadedFile(\n downloadedFile: string,\n packageFile: string | null,\n versionInfo: UpdateInfo,\n fileInfo: ResolvedUpdateFileInfo,\n updateFileName: string,\n isSaveCache: boolean\n ): Promise<void> {\n this._file = downloadedFile\n this._packageFile = packageFile\n this.versionInfo = versionInfo\n this.fileInfo = fileInfo\n this._downloadedFileInfo = {\n fileName: updateFileName,\n sha512: fileInfo.info.sha512,\n isAdminRightsRequired: fileInfo.info.isAdminRightsRequired === true,\n }\n\n if (isSaveCache) {\n await outputJson(this.getUpdateInfoFile(), this._downloadedFileInfo)\n }\n }\n\n async clear(): Promise<void> {\n this._file = null\n this._packageFile = null\n this.versionInfo = null\n this.fileInfo = null\n await this.cleanCacheDirForPendingUpdate()\n }\n\n private async cleanCacheDirForPendingUpdate(): Promise<void> {\n try {\n // remove stale data\n await emptyDir(this.cacheDirForPendingUpdate)\n } catch (_ignore) {\n // ignore\n }\n }\n\n /**\n * Returns \"update-info.json\" which is created in the update cache directory's \"pending\" subfolder after the first update is downloaded. If the update file does not exist then the cache is cleared and recreated. If the update file exists then its properties are validated.\n * @param fileInfo\n * @param logger\n */\n private async getValidCachedUpdateFile(fileInfo: ResolvedUpdateFileInfo, logger: Logger): Promise<string | null> {\n const updateInfoFilePath: string = this.getUpdateInfoFile()\n\n const doesUpdateInfoFileExist = await pathExists(updateInfoFilePath)\n if (!doesUpdateInfoFileExist) {\n return null\n }\n\n let cachedInfo: CachedUpdateInfo\n try {\n cachedInfo = await readJson(updateInfoFilePath)\n } catch (error: any) {\n let message = `No cached update info available`\n if (error.code !== \"ENOENT\") {\n await this.cleanCacheDirForPendingUpdate()\n message += ` (error on read: ${error.message})`\n }\n logger.info(message)\n return null\n }\n\n const isCachedInfoFileNameValid = cachedInfo?.fileName !== null\n if (!isCachedInfoFileNameValid) {\n logger.warn(`Cached update info is corrupted: no fileName, directory for cached update will be cleaned`)\n await this.cleanCacheDirForPendingUpdate()\n return null\n }\n\n if (fileInfo.info.sha512 !== cachedInfo.sha512) {\n logger.info(\n `Cached update sha512 checksum doesn't match the latest available update. New update must be downloaded. Cached: ${cachedInfo.sha512}, expected: ${fileInfo.info.sha512}. Directory for cached update will be cleaned`\n )\n await this.cleanCacheDirForPendingUpdate()\n return null\n }\n\n const updateFile = path.join(this.cacheDirForPendingUpdate, cachedInfo.fileName)\n if (!(await pathExists(updateFile))) {\n logger.info(\"Cached update file doesn't exist\")\n return null\n }\n\n const sha512 = await hashFile(updateFile)\n if (fileInfo.info.sha512 !== sha512) {\n logger.warn(`Sha512 checksum doesn't match the latest available update. New update must be downloaded. Cached: ${sha512}, expected: ${fileInfo.info.sha512}`)\n await this.cleanCacheDirForPendingUpdate()\n return null\n }\n this._downloadedFileInfo = cachedInfo\n return updateFile\n }\n\n private getUpdateInfoFile(): string {\n return path.join(this.cacheDirForPendingUpdate, \"update-info.json\")\n }\n}\n\ninterface CachedUpdateInfo {\n fileName: string\n sha512: string\n readonly isAdminRightsRequired: boolean\n}\n\nfunction hashFile(file: string, algorithm = \"sha512\", encoding: \"base64\" | \"hex\" = \"base64\", options?: any): Promise<string> {\n return new Promise<string>((resolve, reject) => {\n const hash = createHash(algorithm)\n hash.on(\"error\", reject).setEncoding(encoding)\n\n createReadStream(file, { ...options, highWaterMark: 1024 * 1024 /* better to use more memory but hash faster */ })\n .on(\"error\", reject)\n .on(\"end\", () => {\n hash.end()\n resolve(hash.read() as string)\n })\n .pipe(hash, { end: false })\n })\n}\n\nexport async function createTempUpdateFile(name: string, cacheDir: string, log: Logger): Promise<string> {\n // https://github.com/electron-userland/electron-builder/pull/2474#issuecomment-366481912\n let nameCounter = 0\n let result = path.join(cacheDir, name)\n for (let i = 0; i < 3; i++) {\n try {\n await unlink(result)\n return result\n } catch (e: any) {\n if (e.code === \"ENOENT\") {\n return result\n }\n\n log.warn(`Error on remove temp update file: ${e}`)\n result = path.join(cacheDir, `${nameCounter++}-${name}`)\n }\n }\n return result\n}\n", "import * as path from \"path\"\nimport { homedir as getHomedir } from \"os\"\n\nexport interface AppAdapter {\n readonly version: string\n readonly name: string\n\n readonly isPackaged: boolean\n\n /**\n * Path to update metadata file.\n */\n readonly appUpdateConfigPath: string\n\n /**\n * Path to user data directory.\n */\n readonly userDataPath: string\n\n /**\n * Path to cache directory.\n */\n readonly baseCachePath: string\n\n whenReady(): Promise<void>\n\n relaunch(): void\n\n quit(): void\n\n onQuit(handler: (exitCode: number) => void): void\n}\n\nexport function getAppCacheDir() {\n const homedir = getHomedir()\n // https://github.com/electron/electron/issues/1404#issuecomment-194391247\n let result: string\n if (process.platform === \"win32\") {\n result = process.env[\"LOCALAPPDATA\"] || path.join(homedir, \"AppData\", \"Local\")\n } else if (process.platform === \"darwin\") {\n result = path.join(homedir, \"Library\", \"Caches\")\n } else {\n result = process.env[\"XDG_CACHE_HOME\"] || path.join(homedir, \".cache\")\n }\n return result\n}\n", "import * as path from \"path\"\nimport { AppAdapter, getAppCacheDir } from \"./AppAdapter\"\n\nexport class ElectronAppAdapter implements AppAdapter {\n constructor(private readonly app = require(\"electron\").app) {}\n\n whenReady(): Promise<void> {\n return this.app.whenReady()\n }\n\n get version(): string {\n return this.app.getVersion()\n }\n\n get name(): string {\n return this.app.getName()\n }\n\n get isPackaged(): boolean {\n return this.app.isPackaged === true\n }\n\n get appUpdateConfigPath(): string {\n return this.isPackaged ? path.join(process.resourcesPath, \"app-update.yml\") : path.join(this.app.getAppPath(), \"dev-app-update.yml\")\n }\n\n get userDataPath(): string {\n return this.app.getPath(\"userData\")\n }\n\n get baseCachePath(): string {\n return getAppCacheDir()\n }\n\n quit(): void {\n this.app.quit()\n }\n\n relaunch(): void {\n this.app.relaunch()\n }\n\n onQuit(handler: (exitCode: number) => void): void {\n this.app.once(\"quit\", (_: Electron.Event, exitCode: number) => handler(exitCode))\n }\n}\n", "import { DownloadOptions, HttpExecutor, configureRequestOptions, configureRequestUrl } from \"builder-util-runtime\"\nimport type { AuthInfo } from \"electron\"\nimport { RequestOptions } from \"http\"\nimport Session = Electron.Session\nimport ClientRequest = Electron.ClientRequest\n\nexport type LoginCallback = (username: string, password: string) => void\nexport const NET_SESSION_NAME = \"electron-updater\"\n\nexport function getNetSession(): Session {\n return require(\"electron\").session.fromPartition(NET_SESSION_NAME, {\n cache: false,\n })\n}\n\nexport class ElectronHttpExecutor extends HttpExecutor<Electron.ClientRequest> {\n private cachedSession: Session | null = null\n\n constructor(private readonly proxyLoginCallback?: (authInfo: AuthInfo, callback: LoginCallback) => void) {\n super()\n }\n\n async download(url: URL, destination: string, options: DownloadOptions): Promise<string> {\n return await options.cancellationToken.createPromise<string>((resolve, reject, onCancel) => {\n const requestOptions = {\n headers: options.headers || undefined,\n redirect: \"manual\",\n }\n configureRequestUrl(url, requestOptions)\n configureRequestOptions(requestOptions)\n this.doDownload(\n requestOptions,\n {\n destination,\n options,\n onCancel,\n callback: error => {\n if (error == null) {\n resolve(destination)\n } else {\n reject(error)\n }\n },\n responseHandler: null,\n },\n 0\n )\n })\n }\n\n createRequest(options: any, callback: (response: any) => void): Electron.ClientRequest {\n // fix (node 7+) for making electron updater work when using AWS private buckets, check if headers contain Host property\n if (options.headers && options.headers.Host) {\n // set host value from headers.Host\n options.host = options.headers.Host\n // remove header property 'Host', if not removed causes net::ERR_INVALID_ARGUMENT exception\n delete options.headers.Host\n }\n\n // differential downloader can call this method very often, so, better to cache session\n if (this.cachedSession == null) {\n this.cachedSession = getNetSession()\n }\n\n const request = require(\"electron\").net.request({\n ...options,\n session: this.cachedSession,\n })\n request.on(\"response\", callback)\n if (this.proxyLoginCallback != null) {\n request.on(\"login\", this.proxyLoginCallback)\n }\n return request\n }\n\n protected addRedirectHandlers(\n request: ClientRequest,\n options: RequestOptions,\n reject: (error: Error) => void,\n redirectCount: number,\n handler: (options: RequestOptions) => void\n ): void {\n request.on(\"redirect\", (statusCode: number, method: string, redirectUrl: string) => {\n // no way to modify request options, abort old and make a new one\n // https://github.com/electron/electron/issues/11505\n request.abort()\n\n if (redirectCount > this.maxRedirects) {\n reject(this.createMaxRedirectError())\n } else {\n handler(HttpExecutor.prepareRedirectUrlOptions(redirectUrl, options))\n }\n })\n }\n}\n", "// if baseUrl path doesn't ends with /, this path will be not prepended to passed pathname for new URL(input, base)\nimport { URL } from \"url\"\n\n/** @internal */\nexport function newBaseUrl(url: string): URL {\n const result = new URL(url)\n if (!result.pathname.endsWith(\"/\")) {\n result.pathname += \"/\"\n }\n return result\n}\n\n// addRandomQueryToAvoidCaching is false by default because in most cases URL already contains version number,\n// so, it makes sense only for Generic Provider for channel files\nexport function newUrlFromBase(pathname: string, baseUrl: URL, addRandomQueryToAvoidCaching = false): URL {\n const result = new URL(pathname, baseUrl)\n // search is not propagated (search is an empty string if not specified)\n const search = baseUrl.search\n if (search != null && search.length !== 0) {\n result.search = search\n } else if (addRandomQueryToAvoidCaching) {\n result.search = `noCache=${Date.now().toString(32)}`\n }\n return result\n}\n\nexport function getChannelFilename(channel: string): string {\n return `${channel}.yml`\n}\n", "/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/6.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g,\n reHasRegExpChar = RegExp(reRegExpChar.source);\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\n/**\n * Escapes the `RegExp` special characters \"^\", \"$\", \"\\\", \".\", \"*\", \"+\",\n * \"?\", \"(\", \")\", \"[\", \"]\", \"{\", \"}\", and \"|\" in `string`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escapeRegExp('[lodash](https://lodash.com/)');\n * // => '\\[lodash\\]\\(https://lodash\\.com/\\)'\n */\nfunction escapeRegExp(string) {\n string = toString(string);\n return (string && reHasRegExpChar.test(string))\n ? string.replace(reRegExpChar, '\\\\$&')\n : string;\n}\n\nmodule.exports = escapeRegExp;\n", "import { CancellationToken, configureRequestUrl, newError, safeStringifyJson, UpdateFileInfo, UpdateInfo, WindowsUpdateInfo } from \"builder-util-runtime\"\nimport { OutgoingHttpHeaders, RequestOptions } from \"http\"\nimport { load } from \"js-yaml\"\nimport { URL } from \"url\"\nimport { ElectronHttpExecutor } from \"../electronHttpExecutor\"\nimport { ResolvedUpdateFileInfo } from \"../types\"\nimport { newUrlFromBase } from \"../util\"\n// @ts-ignore\nimport * as escapeRegExp from \"lodash.escaperegexp\"\n\nexport type ProviderPlatform = \"darwin\" | \"linux\" | \"win32\"\n\nexport interface ProviderRuntimeOptions {\n isUseMultipleRangeRequest: boolean\n platform: ProviderPlatform\n\n executor: ElectronHttpExecutor\n}\n\nexport abstract class Provider<T extends UpdateInfo> {\n private requestHeaders: OutgoingHttpHeaders | null = null\n protected readonly executor: ElectronHttpExecutor\n\n protected constructor(private readonly runtimeOptions: ProviderRuntimeOptions) {\n this.executor = runtimeOptions.executor\n }\n\n // By default, the blockmap file is in the same directory as the main file\n // But some providers may have a different blockmap file, so we need to override this method\n getBlockMapFiles(baseUrl: URL, oldVersion: string, newVersion: string, oldBlockMapFileBaseUrl: string | null = null): URL[] | Promise<URL[]> {\n const newBlockMapUrl = newUrlFromBase(`${baseUrl.pathname}.blockmap`, baseUrl)\n const oldBlockMapUrl = newUrlFromBase(\n `${baseUrl.pathname.replace(new RegExp(escapeRegExp(newVersion), \"g\"), oldVersion)}.blockmap`,\n oldBlockMapFileBaseUrl ? new URL(oldBlockMapFileBaseUrl) : baseUrl\n )\n\n return [oldBlockMapUrl, newBlockMapUrl]\n }\n\n get isUseMultipleRangeRequest(): boolean {\n return this.runtimeOptions.isUseMultipleRangeRequest !== false\n }\n\n private getChannelFilePrefix(): string {\n if (this.runtimeOptions.platform === \"linux\") {\n const arch = process.env[\"TEST_UPDATER_ARCH\"] || process.arch\n const archSuffix = arch === \"x64\" ? \"\" : `-${arch}`\n return \"-linux\" + archSuffix\n } else {\n return this.runtimeOptions.platform === \"darwin\" ? \"-mac\" : \"\"\n }\n }\n\n // due to historical reasons for windows we use channel name without platform specifier\n protected getDefaultChannelName(): string {\n return this.getCustomChannelName(\"latest\")\n }\n\n protected getCustomChannelName(channel: string): string {\n return `${channel}${this.getChannelFilePrefix()}`\n }\n\n get fileExtraDownloadHeaders(): OutgoingHttpHeaders | null {\n return null\n }\n\n setRequestHeaders(value: OutgoingHttpHeaders | null): void {\n this.requestHeaders = value\n }\n\n abstract getLatestVersion(): Promise<T>\n\n abstract resolveFiles(updateInfo: T): Array<ResolvedUpdateFileInfo>\n\n /**\n * Method to perform API request only to resolve update info, but not to download update.\n */\n protected httpRequest(url: URL, headers?: OutgoingHttpHeaders | null, cancellationToken?: CancellationToken): Promise<string | null> {\n return this.executor.request(this.createRequestOptions(url, headers), cancellationToken)\n }\n\n protected createRequestOptions(url: URL, headers?: OutgoingHttpHeaders | null): RequestOptions {\n const result: RequestOptions = {}\n if (this.requestHeaders == null) {\n if (headers != null) {\n result.headers = headers\n }\n } else {\n result.headers = headers == null ? this.requestHeaders : { ...this.requestHeaders, ...headers }\n }\n\n configureRequestUrl(url, result)\n return result\n }\n}\n\nexport function findFile(files: Array<ResolvedUpdateFileInfo>, extension: string, not?: Array<string>): ResolvedUpdateFileInfo | null | undefined {\n if (files.length === 0) {\n throw newError(\"No files provided\", \"ERR_UPDATER_NO_FILES_PROVIDED\")\n }\n\n const filteredFiles = files.filter(it => it.url.pathname.toLowerCase().endsWith(`.${extension.toLowerCase()}`))\n const result = filteredFiles.find(it => [it.url.pathname, it.info.url].some(n => n.includes(process.arch))) ?? filteredFiles.shift()\n\n if (result) {\n return result\n } else if (not == null) {\n return files[0]\n } else {\n return files.find(fileInfo => !not.some(ext => fileInfo.url.pathname.toLowerCase().endsWith(`.${ext.toLowerCase()}`)))\n }\n}\n\nexport function parseUpdateInfo(rawData: string | null, channelFile: string, channelFileUrl: URL): UpdateInfo {\n if (rawData == null) {\n throw newError(`Cannot parse update info from ${channelFile} in the latest release artifacts (${channelFileUrl}): rawData: null`, \"ERR_UPDATER_INVALID_UPDATE_INFO\")\n }\n\n let result: UpdateInfo\n try {\n result = load(rawData) as UpdateInfo\n } catch (e: any) {\n throw newError(\n `Cannot parse update info from ${channelFile} in the latest release artifacts (${channelFileUrl}): ${e.stack || e.message}, rawData: ${rawData}`,\n \"ERR_UPDATER_INVALID_UPDATE_INFO\"\n )\n }\n return result\n}\n\nexport function getFileList(updateInfo: UpdateInfo): Array<UpdateFileInfo> {\n const files = updateInfo.files\n if (files != null && files.length > 0) {\n return files\n }\n\n // noinspection JSDeprecatedSymbols\n if (updateInfo.path != null) {\n // noinspection JSDeprecatedSymbols\n return [\n {\n url: updateInfo.path,\n sha2: (updateInfo as any).sha2,\n sha512: updateInfo.sha512,\n } as any,\n ]\n } else {\n throw newError(`No files provided: ${safeStringifyJson(updateInfo)}`, \"ERR_UPDATER_NO_FILES_PROVIDED\")\n }\n}\n\nexport function resolveFiles(updateInfo: UpdateInfo, baseUrl: URL, pathTransformer: (p: string) => string = (p: string): string => p): Array<ResolvedUpdateFileInfo> {\n const files = getFileList(updateInfo)\n const result: Array<ResolvedUpdateFileInfo> = files.map(fileInfo => {\n if ((fileInfo as any).sha2 == null && fileInfo.sha512 == null) {\n throw newError(`Update info doesn't contain nor sha256 neither sha512 checksum: ${safeStringifyJson(fileInfo)}`, \"ERR_UPDATER_NO_CHECKSUM\")\n }\n return {\n url: newUrlFromBase(pathTransformer(fileInfo.url), baseUrl),\n info: fileInfo,\n }\n })\n\n const packages = (updateInfo as WindowsUpdateInfo).packages\n const packageInfo = packages == null ? null : packages[process.arch] || packages.ia32\n if (packageInfo != null) {\n ;(result[0] as any).packageInfo = {\n ...packageInfo,\n path: newUrlFromBase(pathTransformer(packageInfo.path), baseUrl).href,\n }\n }\n return result\n}\n", "import { GenericServerOptions, HttpError, newError, UpdateInfo } from \"builder-util-runtime\"\nimport { AppUpdater } from \"../AppUpdater\"\nimport { ResolvedUpdateFileInfo } from \"../types\"\nimport { getChannelFilename, newBaseUrl, newUrlFromBase } from \"../util\"\nimport { parseUpdateInfo, Provider, ProviderRuntimeOptions, resolveFiles } from \"./Provider\"\n\nexport class GenericProvider extends Provider<UpdateInfo> {\n private readonly baseUrl = newBaseUrl(this.configuration.url)\n\n constructor(\n private readonly configuration: GenericServerOptions,\n private readonly updater: AppUpdater,\n runtimeOptions: ProviderRuntimeOptions\n ) {\n super(runtimeOptions)\n }\n\n private get channel(): string {\n const result = this.updater.channel || this.configuration.channel\n return result == null ? this.getDefaultChannelName() : this.getCustomChannelName(result)\n }\n\n async getLatestVersion(): Promise<UpdateInfo> {\n const channelFile = getChannelFilename(this.channel)\n const channelUrl = newUrlFromBase(channelFile, this.baseUrl, this.updater.isAddNoCacheQuery)\n for (let attemptNumber = 0; ; attemptNumber++) {\n try {\n return parseUpdateInfo(await this.httpRequest(channelUrl), channelFile, channelUrl)\n } catch (e: any) {\n if (e instanceof HttpError && e.statusCode === 404) {\n throw newError(`Cannot find channel \"${channelFile}\" update info: ${e.stack || e.message}`, \"ERR_UPDATER_CHANNEL_FILE_NOT_FOUND\")\n } else if (e.code === \"ECONNREFUSED\") {\n if (attemptNumber < 3) {\n await new Promise((resolve, reject) => {\n try {\n setTimeout(resolve, 1000 * attemptNumber)\n } catch (e: any) {\n reject(e)\n }\n })\n continue\n }\n }\n throw e\n }\n }\n }\n\n resolveFiles(updateInfo: UpdateInfo): Array<ResolvedUpdateFileInfo> {\n return resolveFiles(updateInfo, this.baseUrl)\n }\n}\n", "import { CancellationToken, BitbucketOptions, newError, UpdateInfo } from \"builder-util-runtime\"\nimport { AppUpdater } from \"../AppUpdater\"\nimport { ResolvedUpdateFileInfo } from \"../types\"\nimport { getChannelFilename, newBaseUrl, newUrlFromBase } from \"../util\"\nimport { parseUpdateInfo, Provider, ProviderRuntimeOptions, resolveFiles } from \"./Provider\"\n\nexport class BitbucketProvider extends Provider<UpdateInfo> {\n private readonly baseUrl: URL\n\n constructor(\n private readonly configuration: BitbucketOptions,\n private readonly updater: AppUpdater,\n runtimeOptions: ProviderRuntimeOptions\n ) {\n super({\n ...runtimeOptions,\n isUseMultipleRangeRequest: false,\n })\n const { owner, slug } = configuration\n this.baseUrl = newBaseUrl(`https://api.bitbucket.org/2.0/repositories/${owner}/${slug}/downloads`)\n }\n\n private get channel(): string {\n return this.updater.channel || this.configuration.channel || \"latest\"\n }\n\n async getLatestVersion(): Promise<UpdateInfo> {\n const cancellationToken = new CancellationToken()\n const channelFile = getChannelFilename(this.getCustomChannelName(this.channel))\n const channelUrl = newUrlFromBase(channelFile, this.baseUrl, this.updater.isAddNoCacheQuery)\n try {\n const updateInfo = await this.httpRequest(channelUrl, undefined, cancellationToken)\n return parseUpdateInfo(updateInfo, channelFile, channelUrl)\n } catch (e: any) {\n throw newError(`Unable to find latest version on ${this.toString()}, please ensure release exists: ${e.stack || e.message}`, \"ERR_UPDATER_LATEST_VERSION_NOT_FOUND\")\n }\n }\n\n resolveFiles(updateInfo: UpdateInfo): Array<ResolvedUpdateFileInfo> {\n return resolveFiles(updateInfo, this.baseUrl)\n }\n\n toString() {\n const { owner, slug } = this.configuration\n return `Bitbucket (owner: ${owner}, slug: ${slug}, channel: ${this.channel})`\n }\n}\n", "import { CancellationToken, GithubOptions, githubUrl, HttpError, newError, parseXml, ReleaseNoteInfo, UpdateInfo, XElement } from \"builder-util-runtime\"\nimport * as semver from \"semver\"\nimport { URL } from \"url\"\nimport { AppUpdater } from \"../AppUpdater\"\nimport { ResolvedUpdateFileInfo } from \"../types\"\nimport { getChannelFilename, newBaseUrl, newUrlFromBase } from \"../util\"\nimport { parseUpdateInfo, Provider, ProviderRuntimeOptions, resolveFiles } from \"./Provider\"\n\nconst hrefRegExp = /\\/tag\\/([^/]+)$/\n\ninterface GithubUpdateInfo extends UpdateInfo {\n tag: string\n}\nexport abstract class BaseGitHubProvider<T extends UpdateInfo> extends Provider<T> {\n // so, we don't need to parse port (because node http doesn't support host as url does)\n protected readonly baseUrl: URL\n protected readonly baseApiUrl: URL\n\n protected constructor(\n protected readonly options: GithubOptions,\n defaultHost: string,\n runtimeOptions: ProviderRuntimeOptions\n ) {\n super({\n ...runtimeOptions,\n /* because GitHib uses S3 */\n isUseMultipleRangeRequest: false,\n })\n\n this.baseUrl = newBaseUrl(githubUrl(options, defaultHost))\n const apiHost = defaultHost === \"github.com\" ? \"api.github.com\" : defaultHost\n this.baseApiUrl = newBaseUrl(githubUrl(options, apiHost))\n }\n\n protected computeGithubBasePath(result: string): string {\n // https://github.com/electron-userland/electron-builder/issues/1903#issuecomment-320881211\n const host = this.options.host\n return host && ![\"github.com\", \"api.github.com\"].includes(host) ? `/api/v3${result}` : result\n }\n}\n\nexport class GitHubProvider extends BaseGitHubProvider<GithubUpdateInfo> {\n constructor(\n protected readonly options: GithubOptions,\n private readonly updater: AppUpdater,\n runtimeOptions: ProviderRuntimeOptions\n ) {\n super(options, \"github.com\", runtimeOptions)\n }\n\n private get channel(): string {\n const result = this.updater.channel || this.options.channel\n return result == null ? this.getDefaultChannelName() : this.getCustomChannelName(result)\n }\n\n async getLatestVersion(): Promise<GithubUpdateInfo> {\n const cancellationToken = new CancellationToken()\n\n const feedXml: string = (await this.httpRequest(\n newUrlFromBase(`${this.basePath}.atom`, this.baseUrl),\n {\n accept: \"application/xml, application/atom+xml, text/xml, */*\",\n },\n cancellationToken\n ))!\n\n const feed = parseXml(feedXml)\n // noinspection TypeScriptValidateJSTypes\n let latestRelease = feed.element(\"entry\", false, `No published versions on GitHub`)\n let tag: string | null = null\n try {\n if (this.updater.allowPrerelease) {\n const currentChannel = this.updater?.channel || (semver.prerelease(this.updater.currentVersion)?.[0] as string) || null\n\n if (currentChannel === null) {\n // noinspection TypeScriptValidateJSTypes\n tag = hrefRegExp.exec(latestRelease.element(\"link\").attribute(\"href\"))![1]\n } else {\n for (const element of feed.getElements(\"entry\")) {\n // noinspection TypeScriptValidateJSTypes\n const hrefElement = hrefRegExp.exec(element.element(\"link\").attribute(\"href\"))!\n\n // If this is null then something is wrong and skip this release\n if (hrefElement === null) {\n continue\n }\n\n // This Release's Tag\n const hrefTag = hrefElement[1]\n //Get Channel from this release's tag\n const hrefChannel = (semver.prerelease(hrefTag)?.[0] as string) || null\n\n const shouldFetchVersion = !currentChannel || [\"alpha\", \"beta\"].includes(currentChannel)\n const isCustomChannel = hrefChannel !== null && ![\"alpha\", \"beta\"].includes(String(hrefChannel))\n // Allow moving from alpha to beta but not down\n const channelMismatch = currentChannel === \"beta\" && hrefChannel === \"alpha\"\n\n if (shouldFetchVersion && !isCustomChannel && !channelMismatch) {\n tag = hrefTag\n break\n }\n\n const isNextPreRelease = hrefChannel && hrefChannel === currentChannel\n if (isNextPreRelease) {\n tag = hrefTag\n break\n }\n }\n }\n } else {\n tag = await this.getLatestTagName(cancellationToken)\n for (const element of feed.getElements(\"entry\")) {\n // noinspection TypeScriptValidateJSTypes\n if (hrefRegExp.exec(element.element(\"link\").attribute(\"href\"))![1] === tag) {\n latestRelease = element\n break\n }\n }\n }\n } catch (e: any) {\n throw newError(`Cannot parse releases feed: ${e.stack || e.message},\\nXML:\\n${feedXml}`, \"ERR_UPDATER_INVALID_RELEASE_FEED\")\n }\n\n if (tag == null) {\n throw newError(`No published versions on GitHub`, \"ERR_UPDATER_NO_PUBLISHED_VERSIONS\")\n }\n\n let rawData: string\n let channelFile = \"\"\n let channelFileUrl: any = \"\"\n const fetchData = async (channelName: string) => {\n channelFile = getChannelFilename(channelName)\n channelFileUrl = newUrlFromBase(this.getBaseDownloadPath(String(tag), channelFile), this.baseUrl)\n const requestOptions = this.createRequestOptions(channelFileUrl)\n try {\n return (await this.executor.request(requestOptions, cancellationToken))!\n } catch (e: any) {\n if (e instanceof HttpError && e.statusCode === 404) {\n throw newError(`Cannot find ${channelFile} in the latest release artifacts (${channelFileUrl}): ${e.stack || e.message}`, \"ERR_UPDATER_CHANNEL_FILE_NOT_FOUND\")\n }\n throw e\n }\n }\n\n try {\n let channel = this.channel\n if (this.updater.allowPrerelease && semver.prerelease(tag)?.[0]) {\n channel = this.getCustomChannelName(String(semver.prerelease(tag)?.[0]))\n }\n rawData = await fetchData(channel)\n } catch (e: any) {\n if (this.updater.allowPrerelease) {\n // Allow fallback to `latest.yml`\n rawData = await fetchData(this.getDefaultChannelName())\n } else {\n throw e\n }\n }\n\n const result = parseUpdateInfo(rawData, channelFile, channelFileUrl)\n if (result.releaseName == null) {\n result.releaseName = latestRelease.elementValueOrEmpty(\"title\")\n }\n\n if (result.releaseNotes == null) {\n result.releaseNotes = computeReleaseNotes(this.updater.currentVersion, this.updater.fullChangelog, feed, latestRelease)\n }\n return {\n tag: tag,\n ...result,\n }\n }\n\n private async getLatestTagName(cancellationToken: CancellationToken): Promise<string | null> {\n const options = this.options\n // do not use API for GitHub to avoid limit, only for custom host or GitHub Enterprise\n const url =\n options.host == null || options.host === \"github.com\"\n ? newUrlFromBase(`${this.basePath}/latest`, this.baseUrl)\n : new URL(`${this.computeGithubBasePath(`/repos/${options.owner}/${options.repo}/releases`)}/latest`, this.baseApiUrl)\n try {\n const rawData = await this.httpRequest(url, { Accept: \"application/json\" }, cancellationToken)\n if (rawData == null) {\n return null\n }\n\n const releaseInfo: GithubReleaseInfo = JSON.parse(rawData)\n return releaseInfo.tag_name\n } catch (e: any) {\n throw newError(`Unable to find latest version on GitHub (${url}), please ensure a production release exists: ${e.stack || e.message}`, \"ERR_UPDATER_LATEST_VERSION_NOT_FOUND\")\n }\n }\n\n private get basePath(): string {\n return `/${this.options.owner}/${this.options.repo}/releases`\n }\n\n resolveFiles(updateInfo: GithubUpdateInfo): Array<ResolvedUpdateFileInfo> {\n // still replace space to - due to backward compatibility\n return resolveFiles(updateInfo, this.baseUrl, p => this.getBaseDownloadPath(updateInfo.tag, p.replace(/ /g, \"-\")))\n }\n\n private getBaseDownloadPath(tag: string, fileName: string): string {\n return `${this.basePath}/download/${tag}/${fileName}`\n }\n}\n\ninterface GithubReleaseInfo {\n readonly tag_name: string\n}\n\nfunction getNoteValue(parent: XElement): string {\n const result = parent.elementValueOrEmpty(\"content\")\n // GitHub reports empty notes as <content>No content.</content>\n return result === \"No content.\" ? \"\" : result\n}\n\nexport function computeReleaseNotes(currentVersion: semver.SemVer, isFullChangelog: boolean, feed: XElement, latestRelease: any): string | Array<ReleaseNoteInfo> | null {\n if (!isFullChangelog) {\n return getNoteValue(latestRelease)\n }\n\n const releaseNotes: Array<ReleaseNoteInfo> = []\n for (const release of feed.getElements(\"entry\")) {\n // noinspection TypeScriptValidateJSTypes\n const versionRelease = /\\/tag\\/v?([^/]+)$/.exec(release.element(\"link\").attribute(\"href\"))![1]\n if (semver.valid(versionRelease) && semver.lt(currentVersion, versionRelease)) {\n releaseNotes.push({\n version: versionRelease,\n note: getNoteValue(release),\n })\n }\n }\n return releaseNotes.sort((a, b) => semver.rcompare(a.version, b.version))\n}\n", "import { CancellationToken, GitlabOptions, HttpError, newError, UpdateFileInfo, UpdateInfo, GitlabReleaseInfo, GitlabReleaseAsset } from \"builder-util-runtime\"\nimport { URL } from \"url\"\n// @ts-ignore\nimport * as escapeRegExp from \"lodash.escaperegexp\"\nimport { AppUpdater } from \"../AppUpdater\"\nimport { ResolvedUpdateFileInfo } from \"../types\"\nimport { getChannelFilename, newBaseUrl, newUrlFromBase } from \"../util\"\nimport { getFileList, parseUpdateInfo, Provider, ProviderRuntimeOptions } from \"./Provider\"\n\ninterface GitlabUpdateInfo extends UpdateInfo {\n tag: string\n assets: Map<string, string> // filename -> download URL mapping\n}\n\nexport class GitLabProvider extends Provider<GitlabUpdateInfo> {\n private readonly baseApiUrl: URL\n // Cache the latest version info to avoid unnecessary HTTP requests\n private cachedLatestVersion: GitlabUpdateInfo | null = null\n\n /**\n * Normalizes filenames by replacing spaces and underscores with dashes.\n *\n * This is a workaround to handle filename formatting differences between tools:\n * - electron-builder formats filenames like \"test file.txt\" as \"test-file.txt\"\n * - GitLab may provide asset URLs using underscores, such as \"test_file.txt\"\n *\n * Because of this mismatch, we can't reliably extract the correct filename from\n * the asset path without normalization. This function ensures consistent matching\n * across different filename formats by converting all spaces and underscores to dashes.\n *\n * @param filename The filename to normalize\n * @returns The normalized filename with spaces and underscores replaced by dashes\n */\n private normalizeFilename(filename: string): string {\n return filename.replace(/ |_/g, \"-\")\n }\n\n constructor(\n private readonly options: GitlabOptions,\n private readonly updater: AppUpdater,\n runtimeOptions: ProviderRuntimeOptions\n ) {\n super({\n ...runtimeOptions,\n // GitLab might not support multiple range requests efficiently\n isUseMultipleRangeRequest: false,\n })\n\n const defaultHost = \"gitlab.com\"\n const host = options.host || defaultHost\n\n this.baseApiUrl = newBaseUrl(`https://${host}/api/v4`)\n }\n\n private get channel(): string {\n const result = this.updater.channel || this.options.channel\n return result == null ? this.getDefaultChannelName() : this.getCustomChannelName(result)\n }\n\n async getLatestVersion(): Promise<GitlabUpdateInfo> {\n const cancellationToken = new CancellationToken()\n\n // Get latest release from GitLab API using the permalink/latest endpoint\n const latestReleaseUrl = newUrlFromBase(`projects/${this.options.projectId}/releases/permalink/latest`, this.baseApiUrl)\n\n let latestRelease: GitlabReleaseInfo\n try {\n const header = { \"Content-Type\": \"application/json\", ...this.setAuthHeaderForToken(this.options.token || null) }\n const releaseResponse = await this.httpRequest(latestReleaseUrl, header, cancellationToken)\n\n if (!releaseResponse) {\n throw newError(\"No latest release found\", \"ERR_UPDATER_NO_PUBLISHED_VERSIONS\")\n }\n\n latestRelease = JSON.parse(releaseResponse)\n } catch (e: any) {\n throw newError(`Unable to find latest release on GitLab (${latestReleaseUrl}): ${e.stack || e.message}`, \"ERR_UPDATER_LATEST_VERSION_NOT_FOUND\")\n }\n\n const tag = latestRelease.tag_name\n\n // Look for channel file in release assets\n let rawData: string | null = null\n let channelFile = \"\"\n let channelFileUrl: URL | null = null\n\n const fetchChannelData = async (channelName: string): Promise<string> => {\n channelFile = getChannelFilename(channelName)\n\n // Find the channel file in GitLab release assets\n const channelAsset = latestRelease.assets.links.find(asset => asset.name === channelFile)\n\n if (!channelAsset) {\n throw newError(`Cannot find ${channelFile} in the latest release assets`, \"ERR_UPDATER_CHANNEL_FILE_NOT_FOUND\")\n }\n\n channelFileUrl = new URL(channelAsset.direct_asset_url)\n const headers = this.options.token ? { \"PRIVATE-TOKEN\": this.options.token } : undefined\n\n try {\n const result = await this.httpRequest(channelFileUrl, headers, cancellationToken)\n if (!result) {\n throw newError(`Empty response from ${channelFileUrl}`, \"ERR_UPDATER_CHANNEL_FILE_NOT_FOUND\")\n }\n return result\n } catch (e: any) {\n if (e instanceof HttpError && e.statusCode === 404) {\n throw newError(`Cannot find ${channelFile} in the latest release artifacts (${channelFileUrl}): ${e.stack || e.message}`, \"ERR_UPDATER_CHANNEL_FILE_NOT_FOUND\")\n }\n throw e\n }\n }\n\n try {\n rawData = await fetchChannelData(this.channel)\n } catch (e: any) {\n // If custom channel fails, try default channel as fallback\n if (this.channel !== this.getDefaultChannelName()) {\n rawData = await fetchChannelData(this.getDefaultChannelName())\n } else {\n throw e\n }\n }\n\n if (!rawData) {\n throw newError(`Unable to parse channel data from ${channelFile}`, \"ERR_UPDATER_INVALID_UPDATE_INFO\")\n }\n\n const result = parseUpdateInfo(rawData, channelFile, channelFileUrl!)\n\n // Set release name from GitLab if not present\n if (result.releaseName == null) {\n result.releaseName = latestRelease.name\n }\n\n // Set release notes from GitLab description if not present\n if (result.releaseNotes == null) {\n result.releaseNotes = latestRelease.description || null\n }\n\n // Create assets map from GitLab release assets\n const assetsMap = new Map<string, string>()\n for (const asset of latestRelease.assets.links) {\n assetsMap.set(this.normalizeFilename(asset.name), asset.direct_asset_url)\n }\n\n const gitlabUpdateInfo = {\n tag: tag,\n assets: assetsMap,\n ...result,\n }\n\n // Cache the latest version info\n this.cachedLatestVersion = gitlabUpdateInfo\n\n return gitlabUpdateInfo\n }\n\n /**\n * Utility function to convert GitlabReleaseAsset to Map<string, string>\n * Maps asset names to their download URLs\n */\n private convertAssetsToMap(assets: GitlabReleaseAsset): Map<string, string> {\n const assetsMap = new Map<string, string>()\n for (const asset of assets.links) {\n assetsMap.set(this.normalizeFilename(asset.name), asset.direct_asset_url)\n }\n return assetsMap\n }\n\n /**\n * Find blockmap file URL in assets map for a specific filename\n */\n private findBlockMapInAssets(assets: Map<string, string>, filename: string): URL | null {\n const possibleBlockMapNames = [`${filename}.blockmap`, `${this.normalizeFilename(filename)}.blockmap`]\n\n for (const blockMapName of possibleBlockMapNames) {\n const assetUrl = assets.get(blockMapName)\n if (assetUrl) {\n return new URL(assetUrl)\n }\n }\n return null\n }\n\n private async fetchReleaseInfoByVersion(version: string): Promise<GitlabReleaseInfo | null> {\n const cancellationToken = new CancellationToken()\n\n // Try v-prefixed version first, then fallback to plain version\n const possibleReleaseIds = [`v${version}`, version]\n\n for (const releaseId of possibleReleaseIds) {\n const releaseUrl = newUrlFromBase(`projects/${this.options.projectId}/releases/${encodeURIComponent(releaseId)}`, this.baseApiUrl)\n\n try {\n const header = { \"Content-Type\": \"application/json\", ...this.setAuthHeaderForToken(this.options.token || null) }\n const releaseResponse = await this.httpRequest(releaseUrl, header, cancellationToken)\n\n if (releaseResponse) {\n const release: GitlabReleaseInfo = JSON.parse(releaseResponse)\n return release\n }\n } catch (e: any) {\n // If it's a 404 error, try the next release ID format\n if (e instanceof HttpError && e.statusCode === 404) {\n continue\n }\n // For other errors, throw immediately\n throw newError(`Unable to find release ${releaseId} on GitLab (${releaseUrl}): ${e.stack || e.message}`, \"ERR_UPDATER_RELEASE_NOT_FOUND\")\n }\n }\n\n // If we get here, none of the release ID formats worked\n throw newError(`Unable to find release with version ${version} (tried: ${possibleReleaseIds.join(\", \")}) on GitLab`, \"ERR_UPDATER_RELEASE_NOT_FOUND\")\n }\n\n private setAuthHeaderForToken(token: string | null): { [key: string]: string } {\n const headers: { [key: string]: string } = {}\n\n if (token != null) {\n // If the token starts with \"Bearer\", it is an OAuth application secret\n // Note that the original gitlab token would not start with \"Bearer\"\n // it might start with \"gloas-\", if so user needs to add \"Bearer \" prefix to the token\n if (token.startsWith(\"Bearer\")) {\n headers.authorization = token\n } else {\n headers[\"PRIVATE-TOKEN\"] = token\n }\n }\n\n return headers\n }\n\n /**\n * Get version info for blockmap files, using cache when possible\n */\n private async getVersionInfoForBlockMap(version: string): Promise<Map<string, string> | null> {\n // Check if we can use cached version info\n if (this.cachedLatestVersion && this.cachedLatestVersion.version === version) {\n return this.cachedLatestVersion.assets\n }\n\n // Fetch version info if not cached or version doesn't match\n const versionInfo = await this.fetchReleaseInfoByVersion(version)\n if (versionInfo && versionInfo.assets) {\n return this.convertAssetsToMap(versionInfo.assets)\n }\n\n return null\n }\n\n /**\n * Find blockmap URLs from version assets\n */\n private async findBlockMapUrlsFromAssets(oldVersion: string, newVersion: string, baseFilename: string): Promise<[URL | null, URL | null]> {\n let newBlockMapUrl: URL | null = null\n let oldBlockMapUrl: URL | null = null\n\n // Get new version assets\n const newVersionAssets = await this.getVersionInfoForBlockMap(newVersion)\n if (newVersionAssets) {\n newBlockMapUrl = this.findBlockMapInAssets(newVersionAssets, baseFilename)\n }\n\n // Get old version assets\n const oldVersionAssets = await this.getVersionInfoForBlockMap(oldVersion)\n if (oldVersionAssets) {\n const oldFilename = baseFilename.replace(new RegExp(escapeRegExp(newVersion), \"g\"), oldVersion)\n oldBlockMapUrl = this.findBlockMapInAssets(oldVersionAssets, oldFilename)\n }\n\n return [oldBlockMapUrl, newBlockMapUrl]\n }\n\n async getBlockMapFiles(baseUrl: URL, oldVersion: string, newVersion: string, oldBlockMapFileBaseUrl: string | null = null): Promise<URL[]> {\n // If is `project_upload`, find blockmap files from corresponding gitLab assets\n // Because each asset has an unique path that includes an identified hash code,\n // e.g. https://gitlab.com/-/project/71361100/uploads/051f27a925eaf679f2ad688105362acc/latest.yml\n if (this.options.uploadTarget === \"project_upload\") {\n // Get the base filename from the URL to find corresponding blockmap files\n const baseFilename = baseUrl.pathname.split(\"/\").pop() || \"\"\n\n // Try to find blockmap files in GitLab assets\n const [oldBlockMapUrl, newBlockMapUrl] = await this.findBlockMapUrlsFromAssets(oldVersion, newVersion, baseFilename)\n\n if (!newBlockMapUrl) {\n throw newError(`Cannot find blockmap file for ${newVersion} in GitLab assets`, \"ERR_UPDATER_BLOCKMAP_FILE_NOT_FOUND\")\n }\n\n if (!oldBlockMapUrl) {\n throw newError(`Cannot find blockmap file for ${oldVersion} in GitLab assets`, \"ERR_UPDATER_BLOCKMAP_FILE_NOT_FOUND\")\n }\n\n return [oldBlockMapUrl, newBlockMapUrl]\n } else {\n return super.getBlockMapFiles(baseUrl, oldVersion, newVersion, oldBlockMapFileBaseUrl)\n }\n }\n\n resolveFiles(updateInfo: GitlabUpdateInfo): Array<ResolvedUpdateFileInfo> {\n return getFileList(updateInfo).map((fileInfo: UpdateFileInfo) => {\n // Try both original and normalized filename formats\n const possibleNames = [\n fileInfo.url, // Original filename\n this.normalizeFilename(fileInfo.url), // Normalized filename (spaces/underscores → dashes)\n ]\n\n const matchingAssetName = possibleNames.find(name => updateInfo.assets.has(name))\n const assetUrl = matchingAssetName ? updateInfo.assets.get(matchingAssetName) : undefined\n\n if (!assetUrl) {\n throw newError(\n `Cannot find asset \"${fileInfo.url}\" in GitLab release assets. Available assets: ${Array.from(updateInfo.assets.keys()).join(\", \")}`,\n \"ERR_UPDATER_ASSET_NOT_FOUND\"\n )\n }\n\n return {\n url: new URL(assetUrl),\n info: fileInfo,\n }\n })\n }\n\n toString(): string {\n return `GitLab (projectId: ${this.options.projectId}, channel: ${this.channel})`\n }\n}\n", "import { CancellationToken, KeygenOptions, newError, UpdateInfo } from \"builder-util-runtime\"\nimport { AppUpdater } from \"../AppUpdater\"\nimport { ResolvedUpdateFileInfo } from \"../types\"\nimport { getChannelFilename, newBaseUrl, newUrlFromBase } from \"../util\"\nimport { parseUpdateInfo, Provider, ProviderRuntimeOptions, resolveFiles } from \"./Provider\"\n\nexport class KeygenProvider extends Provider<UpdateInfo> {\n private readonly defaultHostname = \"api.keygen.sh\"\n private readonly baseUrl: URL\n\n constructor(\n private readonly configuration: KeygenOptions,\n private readonly updater: AppUpdater,\n runtimeOptions: ProviderRuntimeOptions\n ) {\n super({\n ...runtimeOptions,\n isUseMultipleRangeRequest: false,\n })\n const host = this.configuration.host || this.defaultHostname\n this.baseUrl = newBaseUrl(`https://${host}/v1/accounts/${this.configuration.account}/artifacts?product=${this.configuration.product}`)\n }\n\n private get channel(): string {\n return this.updater.channel || this.configuration.channel || \"stable\"\n }\n\n async getLatestVersion(): Promise<UpdateInfo> {\n const cancellationToken = new CancellationToken()\n const channelFile = getChannelFilename(this.getCustomChannelName(this.channel))\n const channelUrl = newUrlFromBase(channelFile, this.baseUrl, this.updater.isAddNoCacheQuery)\n try {\n const updateInfo = await this.httpRequest(\n channelUrl,\n {\n Accept: \"application/vnd.api+json\",\n \"Keygen-Version\": \"1.1\",\n },\n cancellationToken\n )\n return parseUpdateInfo(updateInfo, channelFile, channelUrl)\n } catch (e: any) {\n throw newError(`Unable to find latest version on ${this.toString()}, please ensure release exists: ${e.stack || e.message}`, \"ERR_UPDATER_LATEST_VERSION_NOT_FOUND\")\n }\n }\n\n resolveFiles(updateInfo: UpdateInfo): Array<ResolvedUpdateFileInfo> {\n return resolveFiles(updateInfo, this.baseUrl)\n }\n\n toString() {\n const { account, product, platform } = this.configuration\n return `Keygen (account: ${account}, product: ${product}, platform: ${platform}, channel: ${this.channel})`\n }\n}\n", "import { CancellationToken, GithubOptions, HttpError, newError, UpdateInfo } from \"builder-util-runtime\"\nimport { OutgoingHttpHeaders, RequestOptions } from \"http\"\nimport { load } from \"js-yaml\"\nimport * as path from \"path\"\nimport { AppUpdater } from \"../AppUpdater\"\nimport { URL } from \"url\"\nimport { getChannelFilename, newUrlFromBase } from \"../util\"\nimport { BaseGitHubProvider } from \"./GitHubProvider\"\nimport { ResolvedUpdateFileInfo } from \"../types\"\nimport { getFileList, ProviderRuntimeOptions } from \"./Provider\"\n\nexport interface PrivateGitHubUpdateInfo extends UpdateInfo {\n assets: Array<Asset>\n}\n\nexport class PrivateGitHubProvider extends BaseGitHubProvider<PrivateGitHubUpdateInfo> {\n constructor(\n options: GithubOptions,\n private readonly updater: AppUpdater,\n private readonly token: string,\n runtimeOptions: ProviderRuntimeOptions\n ) {\n super(options, \"api.github.com\", runtimeOptions)\n }\n\n protected createRequestOptions(url: URL, headers?: OutgoingHttpHeaders | null): RequestOptions {\n const result = super.createRequestOptions(url, headers)\n ;(result as any).redirect = \"manual\"\n return result\n }\n\n async getLatestVersion(): Promise<PrivateGitHubUpdateInfo> {\n const cancellationToken = new CancellationToken()\n const channelFile = getChannelFilename(this.getDefaultChannelName())\n\n const releaseInfo = await this.getLatestVersionInfo(cancellationToken)\n const asset = releaseInfo.assets.find(it => it.name === channelFile)\n if (asset == null) {\n // html_url must be always, but just to be sure\n throw newError(`Cannot find ${channelFile} in the release ${releaseInfo.html_url || releaseInfo.name}`, \"ERR_UPDATER_CHANNEL_FILE_NOT_FOUND\")\n }\n\n const url = new URL(asset.url)\n let result: any\n try {\n result = load((await this.httpRequest(url, this.configureHeaders(\"application/octet-stream\"), cancellationToken))!)\n } catch (e: any) {\n if (e instanceof HttpError && e.statusCode === 404) {\n throw newError(`Cannot find ${channelFile} in the latest release artifacts (${url}): ${e.stack || e.message}`, \"ERR_UPDATER_CHANNEL_FILE_NOT_FOUND\")\n }\n throw e\n }\n\n ;(result as PrivateGitHubUpdateInfo).assets = releaseInfo.assets\n return result\n }\n\n get fileExtraDownloadHeaders(): OutgoingHttpHeaders | null {\n return this.configureHeaders(\"application/octet-stream\")\n }\n\n private configureHeaders(accept: string) {\n return {\n accept,\n authorization: `token ${this.token}`,\n }\n }\n\n private async getLatestVersionInfo(cancellationToken: CancellationToken): Promise<ReleaseInfo> {\n const allowPrerelease = this.updater.allowPrerelease\n let basePath = this.basePath\n if (!allowPrerelease) {\n basePath = `${basePath}/latest`\n }\n\n const url = newUrlFromBase(basePath, this.baseUrl)\n try {\n const version = JSON.parse((await this.httpRequest(url, this.configureHeaders(\"application/vnd.github.v3+json\"), cancellationToken))!)\n if (allowPrerelease) {\n return (version as Array<{ prerelease: boolean }>).find(it => it.prerelease) || version[0]\n } else {\n return version\n }\n } catch (e: any) {\n throw newError(`Unable to find latest version on GitHub (${url}), please ensure a production release exists: ${e.stack || e.message}`, \"ERR_UPDATER_LATEST_VERSION_NOT_FOUND\")\n }\n }\n\n private get basePath(): string {\n return this.computeGithubBasePath(`/repos/${this.options.owner}/${this.options.repo}/releases`)\n }\n\n resolveFiles(updateInfo: PrivateGitHubUpdateInfo): Array<ResolvedUpdateFileInfo> {\n return getFileList(updateInfo).map(it => {\n const name = path.posix.basename(it.url).replace(/ /g, \"-\")\n const asset = updateInfo.assets.find(it => it != null && it.name === name)\n if (asset == null) {\n throw newError(`Cannot find asset \"${name}\" in: ${JSON.stringify(updateInfo.assets, null, 2)}`, \"ERR_UPDATER_ASSET_NOT_FOUND\")\n }\n\n return {\n url: new URL(asset.url),\n info: it,\n }\n })\n }\n}\n\ninterface ReleaseInfo {\n name: string\n html_url: string\n assets: Array<Asset>\n}\n\nexport interface Asset {\n name: string\n url: string\n}\n", "import {\n AllPublishOptions,\n BaseS3Options,\n BitbucketOptions,\n CustomPublishOptions,\n GenericServerOptions,\n getS3LikeProviderBaseUrl,\n GithubOptions,\n GitlabOptions,\n KeygenOptions,\n newError,\n PublishConfiguration,\n} from \"builder-util-runtime\"\nimport { AppUpdater } from \"./AppUpdater\"\nimport { BitbucketProvider } from \"./providers/BitbucketProvider\"\nimport { GenericProvider } from \"./providers/GenericProvider\"\nimport { GitHubProvider } from \"./providers/GitHubProvider\"\nimport { GitLabProvider } from \"./providers/GitLabProvider\"\nimport { KeygenProvider } from \"./providers/KeygenProvider\"\nimport { PrivateGitHubProvider } from \"./providers/PrivateGitHubProvider\"\nimport { Provider, ProviderRuntimeOptions } from \"./providers/Provider\"\n\nexport function isUrlProbablySupportMultiRangeRequests(url: string): boolean {\n return !url.includes(\"s3.amazonaws.com\")\n}\n\nexport function createClient(data: PublishConfiguration | AllPublishOptions, updater: AppUpdater, runtimeOptions: ProviderRuntimeOptions): Provider<any> {\n // noinspection SuspiciousTypeOfGuard\n if (typeof data === \"string\") {\n throw newError(\"Please pass PublishConfiguration object\", \"ERR_UPDATER_INVALID_PROVIDER_CONFIGURATION\")\n }\n\n const provider = data.provider\n switch (provider) {\n case \"github\": {\n const githubOptions = data as GithubOptions\n const token = (githubOptions.private ? process.env[\"GH_TOKEN\"] || process.env[\"GITHUB_TOKEN\"] : null) || githubOptions.token\n if (token == null) {\n return new GitHubProvider(githubOptions, updater, runtimeOptions)\n } else {\n return new PrivateGitHubProvider(githubOptions, updater, token, runtimeOptions)\n }\n }\n\n case \"bitbucket\":\n return new BitbucketProvider(data as BitbucketOptions, updater, runtimeOptions)\n\n case \"gitlab\":\n return new GitLabProvider(data as GitlabOptions, updater, runtimeOptions)\n\n case \"keygen\":\n return new KeygenProvider(data as KeygenOptions, updater, runtimeOptions)\n\n case \"s3\":\n case \"spaces\":\n return new GenericProvider(\n {\n provider: \"generic\",\n url: getS3LikeProviderBaseUrl(data),\n channel: (data as BaseS3Options).channel || null,\n },\n updater,\n {\n ...runtimeOptions,\n // https://github.com/minio/minio/issues/5285#issuecomment-350428955\n isUseMultipleRangeRequest: false,\n }\n )\n\n case \"generic\": {\n const options = data as GenericServerOptions\n return new GenericProvider(options, updater, {\n ...runtimeOptions,\n isUseMultipleRangeRequest: options.useMultipleRangeRequest !== false && isUrlProbablySupportMultiRangeRequests(options.url),\n })\n }\n\n case \"custom\": {\n const options = data as CustomPublishOptions\n const constructor = options.updateProvider\n if (!constructor) {\n throw newError(\"Custom provider not specified\", \"ERR_UPDATER_INVALID_PROVIDER_CONFIGURATION\")\n }\n return new constructor(options, updater, runtimeOptions)\n }\n\n default:\n throw newError(`Unsupported provider: ${provider}`, \"ERR_UPDATER_UNSUPPORTED_PROVIDER\")\n }\n}\n", "import { BlockMap, BlockMapFile } from \"builder-util-runtime/out/blockMapApi\"\nimport { Logger } from \"../types\"\n\nexport enum OperationKind {\n COPY,\n DOWNLOAD,\n}\n\nexport interface Operation {\n kind: OperationKind\n\n // inclusive\n start: number\n // exclusive\n end: number\n\n // debug only\n // oldBlocks: Array<string> | null\n}\n\nexport function computeOperations(oldBlockMap: BlockMap, newBlockMap: BlockMap, logger: Logger): Array<Operation> {\n const nameToOldBlocks = buildBlockFileMap(oldBlockMap.files)\n const nameToNewBlocks = buildBlockFileMap(newBlockMap.files)\n\n let lastOperation: Operation | null = null\n\n // for now only one file is supported in block map\n const blockMapFile: { name: string; offset: number } = newBlockMap.files[0]\n const operations: Array<Operation> = []\n const name = blockMapFile.name\n const oldEntry = nameToOldBlocks.get(name)\n if (oldEntry == null) {\n // new file (unrealistic case for now, because in any case both blockmap contain the only file named as \"file\")\n throw new Error(`no file ${name} in old blockmap`)\n }\n\n const newFile = nameToNewBlocks.get(name)!\n let changedBlockCount = 0\n\n const { checksumToOffset: checksumToOldOffset, checksumToOldSize } = buildChecksumMap(nameToOldBlocks.get(name)!, oldEntry.offset, logger)\n\n let newOffset = blockMapFile.offset\n for (let i = 0; i < newFile.checksums.length; newOffset += newFile.sizes[i], i++) {\n const blockSize: number = newFile.sizes[i]\n const checksum = newFile.checksums[i]\n let oldOffset = checksumToOldOffset.get(checksum)\n if (oldOffset != null && checksumToOldSize.get(checksum) !== blockSize) {\n logger.warn(`Checksum (\"${checksum}\") matches, but size differs (old: ${checksumToOldSize.get(checksum)}, new: ${blockSize})`)\n oldOffset = undefined\n }\n\n if (oldOffset === undefined) {\n // download data from new file\n changedBlockCount++\n\n if (lastOperation != null && lastOperation.kind === OperationKind.DOWNLOAD && lastOperation.end === newOffset) {\n lastOperation.end += blockSize\n } else {\n lastOperation = {\n kind: OperationKind.DOWNLOAD,\n start: newOffset,\n end: newOffset + blockSize,\n // oldBlocks: null,\n }\n validateAndAdd(lastOperation, operations, checksum, i)\n }\n } else {\n // reuse data from old file\n if (lastOperation != null && lastOperation.kind === OperationKind.COPY && lastOperation.end === oldOffset) {\n lastOperation.end += blockSize\n // lastOperation.oldBlocks!!.push(checksum)\n } else {\n lastOperation = {\n kind: OperationKind.COPY,\n start: oldOffset,\n end: oldOffset + blockSize,\n // oldBlocks: [checksum]\n }\n validateAndAdd(lastOperation, operations, checksum, i)\n }\n }\n }\n\n if (changedBlockCount > 0) {\n logger.info(`File${blockMapFile.name === \"file\" ? \"\" : \" \" + blockMapFile.name} has ${changedBlockCount} changed blocks`)\n }\n return operations\n}\n\nconst isValidateOperationRange = process.env[\"DIFFERENTIAL_DOWNLOAD_PLAN_BUILDER_VALIDATE_RANGES\"] === \"true\"\n\nfunction validateAndAdd(operation: Operation, operations: Array<Operation>, checksum: string, index: number): void {\n if (isValidateOperationRange && operations.length !== 0) {\n const lastOperation = operations[operations.length - 1]\n if (lastOperation.kind === operation.kind && operation.start < lastOperation.end && operation.start > lastOperation.start) {\n const min = [lastOperation.start, lastOperation.end, operation.start, operation.end].reduce((p, v) => (p < v ? p : v))\n throw new Error(\n `operation (block index: ${index}, checksum: ${checksum}, kind: ${OperationKind[operation.kind]}) overlaps previous operation (checksum: ${checksum}):\\n` +\n `abs: ${lastOperation.start} until ${lastOperation.end} and ${operation.start} until ${operation.end}\\n` +\n `rel: ${lastOperation.start - min} until ${lastOperation.end - min} and ${operation.start - min} until ${operation.end - min}`\n )\n }\n }\n operations.push(operation)\n}\n\nfunction buildChecksumMap(file: BlockMapFile, fileOffset: number, logger: Logger) {\n const checksumToOffset = new Map<string, number>()\n const checksumToSize = new Map<string, number>()\n let offset = fileOffset\n for (let i = 0; i < file.checksums.length; i++) {\n const checksum = file.checksums[i]\n const size = file.sizes[i]\n\n const existing = checksumToSize.get(checksum)\n if (existing === undefined) {\n checksumToOffset.set(checksum, offset)\n checksumToSize.set(checksum, size)\n } else if (logger.debug != null) {\n const sizeExplanation = existing === size ? \"(same size)\" : `(size: ${existing}, this size: ${size})`\n logger.debug(`${checksum} duplicated in blockmap ${sizeExplanation}, it doesn't lead to broken differential downloader, just corresponding block will be skipped)`)\n }\n offset += size\n }\n return { checksumToOffset, checksumToOldSize: checksumToSize }\n}\n\nfunction buildBlockFileMap(list: Array<BlockMapFile>): Map<string, BlockMapFile> {\n const result = new Map<string, BlockMapFile>()\n for (const item of list) {\n result.set(item.name, item)\n }\n return result\n}\n", "import { newError } from \"builder-util-runtime\"\nimport { createReadStream } from \"fs\"\nimport { Writable } from \"stream\"\nimport { Operation, OperationKind } from \"./downloadPlanBuilder\"\nimport { ProgressInfo } from \"./ProgressDifferentialDownloadCallbackTransform\"\n\nconst DOUBLE_CRLF = Buffer.from(\"\\r\\n\\r\\n\")\n\nenum ReadState {\n INIT,\n HEADER,\n BODY,\n}\n\nexport interface PartListDataTask {\n readonly oldFileFd: number\n readonly tasks: Array<Operation>\n readonly start: number\n readonly end: number\n}\n\nexport function copyData(task: Operation, out: Writable, oldFileFd: number, reject: (error: Error) => void, resolve: () => void): void {\n const readStream = createReadStream(\"\", {\n fd: oldFileFd,\n autoClose: false,\n start: task.start,\n // end is inclusive\n end: task.end - 1,\n })\n readStream.on(\"error\", reject)\n readStream.once(\"end\", resolve)\n readStream.pipe(out, {\n end: false,\n })\n}\n\nexport class DataSplitter extends Writable {\n // properties for progress update calculations\n private start = Date.now() // download start time used to calculate average rate\n private nextUpdate = this.start + 1000 // timestamp of next update to prevent updates more often than once per second\n private transferred = 0 // total number of bytes transferred\n private delta = 0 // number of bytes transferred since last update, reset after each update\n\n partIndex = -1\n\n private headerListBuffer: Buffer | null = null\n private readState = ReadState.INIT\n private ignoreByteCount = 0\n private remainingPartDataCount = 0\n\n private readonly boundaryLength: number\n\n constructor(\n private readonly out: Writable,\n private readonly options: PartListDataTask,\n private readonly partIndexToTaskIndex: Map<number, number>,\n boundary: string,\n private readonly partIndexToLength: Array<number>,\n private readonly finishHandler: () => any,\n private readonly grandTotalBytes: number,\n private readonly onProgress?: (info: ProgressInfo) => any\n ) {\n super()\n\n this.boundaryLength = boundary.length + 4 /* size of \\r\\n-- */\n // first chunk doesn't start with \\r\\n\n this.ignoreByteCount = this.boundaryLength - 2\n }\n\n get isFinished(): boolean {\n return this.partIndex === this.partIndexToLength.length\n }\n\n // noinspection JSUnusedGlobalSymbols\n _write(data: Buffer, encoding: string, callback: (error?: Error) => void): void {\n if (this.isFinished) {\n console.error(`Trailing ignored data: ${data.length} bytes`)\n return\n }\n\n this.handleData(data)\n .then(() => {\n if (this.onProgress) {\n const now = Date.now()\n if ((now >= this.nextUpdate || this.transferred === this.grandTotalBytes) && this.grandTotalBytes && (now - this.start) / 1000) {\n this.nextUpdate = now + 1000\n\n this.onProgress({\n total: this.grandTotalBytes,\n delta: this.delta,\n transferred: this.transferred,\n percent: (this.transferred / this.grandTotalBytes) * 100,\n bytesPerSecond: Math.round(this.transferred / ((now - this.start) / 1000)),\n })\n this.delta = 0\n }\n }\n\n callback()\n })\n .catch(callback)\n }\n\n private async handleData(chunk: Buffer): Promise<undefined> {\n let start = 0\n\n if (this.ignoreByteCount !== 0 && this.remainingPartDataCount !== 0) {\n throw newError(\"Internal error\", \"ERR_DATA_SPLITTER_BYTE_COUNT_MISMATCH\")\n }\n\n if (this.ignoreByteCount > 0) {\n const toIgnore = Math.min(this.ignoreByteCount, chunk.length)\n this.ignoreByteCount -= toIgnore\n start = toIgnore\n } else if (this.remainingPartDataCount > 0) {\n const toRead = Math.min(this.remainingPartDataCount, chunk.length)\n this.remainingPartDataCount -= toRead\n await this.processPartData(chunk, 0, toRead)\n start = toRead\n }\n\n if (start === chunk.length) {\n return\n }\n\n if (this.readState === ReadState.HEADER) {\n const headerListEnd = this.searchHeaderListEnd(chunk, start)\n if (headerListEnd === -1) {\n return\n }\n\n start = headerListEnd\n this.readState = ReadState.BODY\n // header list is ignored, we don't need it\n this.headerListBuffer = null\n }\n\n while (true) {\n if (this.readState === ReadState.BODY) {\n this.readState = ReadState.INIT\n } else {\n this.partIndex++\n\n let taskIndex = this.partIndexToTaskIndex.get(this.partIndex)\n if (taskIndex == null) {\n if (this.isFinished) {\n taskIndex = this.options.end\n } else {\n throw newError(\"taskIndex is null\", \"ERR_DATA_SPLITTER_TASK_INDEX_IS_NULL\")\n }\n }\n\n const prevTaskIndex = this.partIndex === 0 ? this.options.start : this.partIndexToTaskIndex.get(this.partIndex - 1)! + 1 /* prev part is download, next maybe copy */\n if (prevTaskIndex < taskIndex) {\n await this.copyExistingData(prevTaskIndex, taskIndex)\n } else if (prevTaskIndex > taskIndex) {\n throw newError(\"prevTaskIndex must be < taskIndex\", \"ERR_DATA_SPLITTER_TASK_INDEX_ASSERT_FAILED\")\n }\n\n if (this.isFinished) {\n this.onPartEnd()\n this.finishHandler()\n return\n }\n\n start = this.searchHeaderListEnd(chunk, start)\n\n if (start === -1) {\n this.readState = ReadState.HEADER\n return\n }\n }\n\n const partLength = this.partIndexToLength[this.partIndex]\n const end = start + partLength\n const effectiveEnd = Math.min(end, chunk.length)\n await this.processPartStarted(chunk, start, effectiveEnd)\n this.remainingPartDataCount = partLength - (effectiveEnd - start)\n if (this.remainingPartDataCount > 0) {\n return\n }\n\n start = end + this.boundaryLength\n if (start >= chunk.length) {\n this.ignoreByteCount = this.boundaryLength - (chunk.length - end)\n return\n }\n }\n }\n\n private copyExistingData(index: number, end: number): Promise<void> {\n return new Promise((resolve, reject) => {\n const w = (): void => {\n if (index === end) {\n resolve()\n return\n }\n\n const task = this.options.tasks[index]\n if (task.kind !== OperationKind.COPY) {\n reject(new Error(\"Task kind must be COPY\"))\n return\n }\n\n copyData(task, this.out, this.options.oldFileFd, reject, () => {\n index++\n w()\n })\n }\n w()\n })\n }\n\n private searchHeaderListEnd(chunk: Buffer, readOffset: number): number {\n const headerListEnd = chunk.indexOf(DOUBLE_CRLF, readOffset)\n if (headerListEnd !== -1) {\n return headerListEnd + DOUBLE_CRLF.length\n }\n\n // not all headers data were received, save to buffer\n const partialChunk = readOffset === 0 ? chunk : chunk.slice(readOffset)\n if (this.headerListBuffer == null) {\n this.headerListBuffer = partialChunk\n } else {\n this.headerListBuffer = Buffer.concat([this.headerListBuffer, partialChunk])\n }\n return -1\n }\n\n private actualPartLength = 0\n\n private onPartEnd(): void {\n const expectedLength = this.partIndexToLength[this.partIndex - 1]\n if (this.actualPartLength !== expectedLength) {\n throw newError(`Expected length: ${expectedLength} differs from actual: ${this.actualPartLength}`, \"ERR_DATA_SPLITTER_LENGTH_MISMATCH\")\n }\n this.actualPartLength = 0\n }\n\n private processPartStarted(data: Buffer, start: number, end: number): Promise<void> {\n if (this.partIndex !== 0) {\n this.onPartEnd()\n }\n return this.processPartData(data, start, end)\n }\n\n private processPartData(data: Buffer, start: number, end: number): Promise<void> {\n this.actualPartLength += end - start\n this.transferred += end - start\n this.delta += end - start\n const out = this.out\n if (out.write(start === 0 && data.length === end ? data : data.slice(start, end))) {\n return Promise.resolve()\n } else {\n return new Promise((resolve, reject) => {\n out.on(\"error\", reject)\n out.once(\"drain\", () => {\n out.removeListener(\"error\", reject)\n resolve()\n })\n })\n }\n }\n}\n", "import { createHttpError, safeGetHeader } from \"builder-util-runtime\"\nimport { IncomingMessage } from \"http\"\nimport { Writable } from \"stream\"\nimport { copyData, DataSplitter, PartListDataTask } from \"./DataSplitter\"\nimport { DifferentialDownloader } from \"./DifferentialDownloader\"\nimport { Operation, OperationKind } from \"./downloadPlanBuilder\"\n\nexport function executeTasksUsingMultipleRangeRequests(\n differentialDownloader: DifferentialDownloader,\n tasks: Array<Operation>,\n out: Writable,\n oldFileFd: number,\n reject: (error: Error) => void\n): (taskOffset: number) => void {\n const w = (taskOffset: number): void => {\n if (taskOffset >= tasks.length) {\n if (differentialDownloader.fileMetadataBuffer != null) {\n out.write(differentialDownloader.fileMetadataBuffer)\n }\n out.end()\n return\n }\n\n const nextOffset = taskOffset + 1000\n doExecuteTasks(\n differentialDownloader,\n {\n tasks,\n start: taskOffset,\n end: Math.min(tasks.length, nextOffset),\n oldFileFd,\n },\n out,\n () => w(nextOffset),\n reject\n )\n }\n return w\n}\n\nfunction doExecuteTasks(differentialDownloader: DifferentialDownloader, options: PartListDataTask, out: Writable, resolve: () => void, reject: (error: Error) => void): void {\n let ranges = \"bytes=\"\n let partCount = 0\n let grandTotalBytes = 0\n const partIndexToTaskIndex = new Map<number, number>()\n const partIndexToLength: Array<number> = []\n for (let i = options.start; i < options.end; i++) {\n const task = options.tasks[i]\n if (task.kind === OperationKind.DOWNLOAD) {\n ranges += `${task.start}-${task.end - 1}, `\n partIndexToTaskIndex.set(partCount, i)\n partCount++\n partIndexToLength.push(task.end - task.start)\n grandTotalBytes += task.end - task.start\n }\n }\n\n if (partCount <= 1) {\n // the only remote range - copy\n const w = (index: number): void => {\n if (index >= options.end) {\n resolve()\n return\n }\n\n const task = options.tasks[index++]\n\n if (task.kind === OperationKind.COPY) {\n copyData(task, out, options.oldFileFd, reject, () => w(index))\n } else {\n const requestOptions = differentialDownloader.createRequestOptions()\n requestOptions.headers!.Range = `bytes=${task.start}-${task.end - 1}`\n const request = differentialDownloader.httpExecutor.createRequest(requestOptions, response => {\n response.on(\"error\", reject)\n\n if (!checkIsRangesSupported(response, reject)) {\n return\n }\n\n response.pipe(out, {\n end: false,\n })\n response.once(\"end\", () => w(index))\n })\n differentialDownloader.httpExecutor.addErrorAndTimeoutHandlers(request, reject)\n request.end()\n }\n }\n\n w(options.start)\n return\n }\n\n const requestOptions = differentialDownloader.createRequestOptions()\n requestOptions.headers!.Range = ranges.substring(0, ranges.length - 2)\n const request = differentialDownloader.httpExecutor.createRequest(requestOptions, response => {\n if (!checkIsRangesSupported(response, reject)) {\n return\n }\n\n const contentType = safeGetHeader(response, \"content-type\")\n const m = /^multipart\\/.+?\\s*;\\s*boundary=(?:\"([^\"]+)\"|([^\\s\";]+))\\s*$/i.exec(contentType)\n if (m == null) {\n reject(new Error(`Content-Type \"multipart/byteranges\" is expected, but got \"${contentType}\"`))\n return\n }\n\n const dicer = new DataSplitter(out, options, partIndexToTaskIndex, m[1] || m[2], partIndexToLength, resolve, grandTotalBytes, differentialDownloader.options.onProgress)\n dicer.on(\"error\", reject)\n response.pipe(dicer)\n\n response.on(\"end\", () => {\n setTimeout(() => {\n request.abort()\n reject(new Error(\"Response ends without calling any handlers\"))\n }, 10000)\n })\n })\n differentialDownloader.httpExecutor.addErrorAndTimeoutHandlers(request, reject)\n request.end()\n}\n\nexport function checkIsRangesSupported(response: IncomingMessage, reject: (error: Error) => void): boolean {\n // Electron net handles redirects automatically, our NodeJS test server doesn't use redirects - so, we don't check 3xx codes.\n if (response.statusCode! >= 400) {\n reject(createHttpError(response))\n return false\n }\n\n if (response.statusCode !== 206) {\n const acceptRanges = safeGetHeader(response, \"accept-ranges\")\n if (acceptRanges == null || acceptRanges === \"none\") {\n reject(new Error(`Server doesn't support Accept-Ranges (response code ${response.statusCode})`))\n return false\n }\n }\n return true\n}\n", "import { Transform } from \"stream\"\nimport { CancellationToken } from \"builder-util-runtime\"\n\nenum OperationKind {\n COPY,\n DOWNLOAD,\n}\n\nexport interface ProgressInfo {\n total: number\n delta: number\n transferred: number\n percent: number\n bytesPerSecond: number\n}\n\nexport interface ProgressDifferentialDownloadInfo {\n expectedByteCounts: Array<number>\n grandTotal: number\n}\n\nexport class ProgressDifferentialDownloadCallbackTransform extends Transform {\n private start = Date.now()\n private transferred = 0\n private delta = 0\n private expectedBytes = 0\n private index = 0\n private operationType = OperationKind.COPY\n\n private nextUpdate = this.start + 1000\n\n constructor(\n private readonly progressDifferentialDownloadInfo: ProgressDifferentialDownloadInfo,\n private readonly cancellationToken: CancellationToken,\n private readonly onProgress: (info: ProgressInfo) => any\n ) {\n super()\n }\n\n _transform(chunk: any, encoding: string, callback: any) {\n if (this.cancellationToken.cancelled) {\n callback(new Error(\"cancelled\"), null)\n return\n }\n\n // Don't send progress update when copying from disk\n if (this.operationType == OperationKind.COPY) {\n callback(null, chunk)\n return\n }\n\n this.transferred += chunk.length\n this.delta += chunk.length\n\n const now = Date.now()\n if (\n now >= this.nextUpdate &&\n this.transferred !== this.expectedBytes /* will be emitted by endRangeDownload() */ &&\n this.transferred !== this.progressDifferentialDownloadInfo.grandTotal /* will be emitted on _flush */\n ) {\n this.nextUpdate = now + 1000\n\n this.onProgress({\n total: this.progressDifferentialDownloadInfo.grandTotal,\n delta: this.delta,\n transferred: this.transferred,\n percent: (this.transferred / this.progressDifferentialDownloadInfo.grandTotal) * 100,\n bytesPerSecond: Math.round(this.transferred / ((now - this.start) / 1000)),\n })\n this.delta = 0\n }\n\n callback(null, chunk)\n }\n\n beginFileCopy(): void {\n this.operationType = OperationKind.COPY\n }\n\n beginRangeDownload(): void {\n this.operationType = OperationKind.DOWNLOAD\n\n this.expectedBytes += this.progressDifferentialDownloadInfo.expectedByteCounts[this.index++]\n }\n\n endRangeDownload(): void {\n // _flush() will doour final 100%\n if (this.transferred !== this.progressDifferentialDownloadInfo.grandTotal) {\n this.onProgress({\n total: this.progressDifferentialDownloadInfo.grandTotal,\n delta: this.delta,\n transferred: this.transferred,\n percent: (this.transferred / this.progressDifferentialDownloadInfo.grandTotal) * 100,\n bytesPerSecond: Math.round(this.transferred / ((Date.now() - this.start) / 1000)),\n })\n }\n }\n\n // Called when we are 100% done with the connection/download\n _flush(callback: any): void {\n if (this.cancellationToken.cancelled) {\n callback(new Error(\"cancelled\"))\n return\n }\n\n this.onProgress({\n total: this.progressDifferentialDownloadInfo.grandTotal,\n delta: this.delta,\n transferred: this.transferred,\n percent: 100,\n bytesPerSecond: Math.round(this.transferred / ((Date.now() - this.start) / 1000)),\n })\n this.delta = 0\n this.transferred = 0\n\n callback(null)\n }\n}\n", "import { BlockMapDataHolder, createHttpError, DigestTransform, HttpExecutor, configureRequestUrl, configureRequestOptions } from \"builder-util-runtime\"\nimport { BlockMap } from \"builder-util-runtime/out/blockMapApi\"\nimport { close, open } from \"fs-extra\"\nimport { createWriteStream } from \"fs\"\nimport { OutgoingHttpHeaders, RequestOptions } from \"http\"\nimport { ProgressInfo, CancellationToken } from \"builder-util-runtime\"\nimport { Logger } from \"../types\"\nimport { copyData } from \"./DataSplitter\"\nimport { URL } from \"url\"\nimport { computeOperations, Operation, OperationKind } from \"./downloadPlanBuilder\"\nimport { checkIsRangesSupported, executeTasksUsingMultipleRangeRequests } from \"./multipleRangeDownloader\"\nimport { ProgressDifferentialDownloadCallbackTransform, ProgressDifferentialDownloadInfo } from \"./ProgressDifferentialDownloadCallbackTransform\"\n\nexport interface DifferentialDownloaderOptions {\n readonly oldFile: string\n readonly newUrl: URL\n readonly logger: Logger\n readonly newFile: string\n\n readonly requestHeaders: OutgoingHttpHeaders | null\n\n readonly isUseMultipleRangeRequest?: boolean\n\n readonly cancellationToken: CancellationToken\n onProgress?: (progress: ProgressInfo) => void\n}\n\nexport abstract class DifferentialDownloader {\n fileMetadataBuffer: Buffer | null = null\n\n private readonly logger: Logger\n\n // noinspection TypeScriptAbstractClassConstructorCanBeMadeProtected\n constructor(\n protected readonly blockAwareFileInfo: BlockMapDataHolder,\n readonly httpExecutor: HttpExecutor<any>,\n readonly options: DifferentialDownloaderOptions\n ) {\n this.logger = options.logger\n }\n\n createRequestOptions(): RequestOptions {\n const result = {\n headers: {\n ...this.options.requestHeaders,\n accept: \"*/*\",\n },\n }\n configureRequestUrl(this.options.newUrl, result)\n // user-agent, cache-control and other common options\n configureRequestOptions(result)\n return result\n }\n\n protected doDownload(oldBlockMap: BlockMap, newBlockMap: BlockMap): Promise<any> {\n // we don't check other metadata like compressionMethod - generic check that it is make sense to differentially update is suitable for it\n if (oldBlockMap.version !== newBlockMap.version) {\n throw new Error(`version is different (${oldBlockMap.version} - ${newBlockMap.version}), full download is required`)\n }\n\n const logger = this.logger\n const operations = computeOperations(oldBlockMap, newBlockMap, logger)\n if (logger.debug != null) {\n logger.debug(JSON.stringify(operations, null, 2))\n }\n\n let downloadSize = 0\n let copySize = 0\n for (const operation of operations) {\n const length = operation.end - operation.start\n if (operation.kind === OperationKind.DOWNLOAD) {\n downloadSize += length\n } else {\n copySize += length\n }\n }\n\n const newSize = this.blockAwareFileInfo.size\n if (downloadSize + copySize + (this.fileMetadataBuffer == null ? 0 : this.fileMetadataBuffer.length) !== newSize) {\n throw new Error(`Internal error, size mismatch: downloadSize: ${downloadSize}, copySize: ${copySize}, newSize: ${newSize}`)\n }\n\n logger.info(`Full: ${formatBytes(newSize)}, To download: ${formatBytes(downloadSize)} (${Math.round(downloadSize / (newSize / 100))}%)`)\n\n return this.downloadFile(operations)\n }\n\n private downloadFile(tasks: Array<Operation>): Promise<any> {\n const fdList: Array<OpenedFile> = []\n const closeFiles = (): Promise<Array<void>> => {\n return Promise.all(\n fdList.map(openedFile => {\n return close(openedFile.descriptor).catch((e: any) => {\n this.logger.error(`cannot close file \"${openedFile.path}\": ${e}`)\n })\n })\n )\n }\n return this.doDownloadFile(tasks, fdList)\n .then(closeFiles)\n .catch((e: any) => {\n // then must be after catch here (since then always throws error)\n return closeFiles()\n .catch(closeFilesError => {\n // closeFiles never throw error, but just to be sure\n try {\n this.logger.error(`cannot close files: ${closeFilesError}`)\n } catch (errorOnLog) {\n try {\n console.error(errorOnLog)\n } catch (_ignored) {\n // ok, give up and ignore error\n }\n }\n throw e\n })\n .then(() => {\n throw e\n })\n })\n }\n\n private async doDownloadFile(tasks: Array<Operation>, fdList: Array<OpenedFile>): Promise<any> {\n const oldFileFd = await open(this.options.oldFile, \"r\")\n fdList.push({ descriptor: oldFileFd, path: this.options.oldFile })\n const newFileFd = await open(this.options.newFile, \"w\")\n fdList.push({ descriptor: newFileFd, path: this.options.newFile })\n const fileOut = createWriteStream(this.options.newFile, { fd: newFileFd })\n await new Promise((resolve, reject) => {\n const streams: Array<any> = []\n\n // Create our download info transformer if we have one\n let downloadInfoTransform: ProgressDifferentialDownloadCallbackTransform | undefined = undefined\n if (!this.options.isUseMultipleRangeRequest && this.options.onProgress) {\n const expectedByteCounts: Array<number> = []\n let grandTotalBytes = 0\n\n for (const task of tasks) {\n if (task.kind === OperationKind.DOWNLOAD) {\n expectedByteCounts.push(task.end - task.start)\n grandTotalBytes += task.end - task.start\n }\n }\n\n const progressDifferentialDownloadInfo: ProgressDifferentialDownloadInfo = {\n expectedByteCounts: expectedByteCounts,\n grandTotal: grandTotalBytes,\n }\n\n downloadInfoTransform = new ProgressDifferentialDownloadCallbackTransform(progressDifferentialDownloadInfo, this.options.cancellationToken, this.options.onProgress)\n streams.push(downloadInfoTransform)\n }\n\n const digestTransform = new DigestTransform(this.blockAwareFileInfo.sha512)\n // to simply debug, do manual validation to allow file to be fully written\n digestTransform.isValidateOnEnd = false\n streams.push(digestTransform)\n\n // noinspection JSArrowFunctionCanBeReplacedWithShorthand\n fileOut.on(\"finish\", () => {\n ;(fileOut.close as any)(() => {\n // remove from fd list because closed successfully\n fdList.splice(1, 1)\n try {\n digestTransform.validate()\n } catch (e: any) {\n reject(e)\n return\n }\n\n resolve(undefined)\n })\n })\n\n streams.push(fileOut)\n\n let lastStream = null\n for (const stream of streams) {\n stream.on(\"error\", reject)\n if (lastStream == null) {\n lastStream = stream\n } else {\n lastStream = lastStream.pipe(stream)\n }\n }\n\n const firstStream = streams[0]\n\n let w: any\n if (this.options.isUseMultipleRangeRequest) {\n w = executeTasksUsingMultipleRangeRequests(this, tasks, firstStream, oldFileFd, reject)\n w(0)\n return\n }\n\n let downloadOperationCount = 0\n let actualUrl: string | null = null\n this.logger.info(`Differential download: ${this.options.newUrl}`)\n\n const requestOptions = this.createRequestOptions()\n ;(requestOptions as any).redirect = \"manual\"\n\n w = (index: number): void => {\n if (index >= tasks.length) {\n if (this.fileMetadataBuffer != null) {\n firstStream.write(this.fileMetadataBuffer)\n }\n firstStream.end()\n return\n }\n\n const operation = tasks[index++]\n if (operation.kind === OperationKind.COPY) {\n // We are copying, let's not send status updates to the UI\n if (downloadInfoTransform) {\n downloadInfoTransform.beginFileCopy()\n }\n\n copyData(operation, firstStream, oldFileFd, reject, () => w(index))\n return\n }\n\n const range = `bytes=${operation.start}-${operation.end - 1}`\n requestOptions.headers!.range = range\n\n this.logger?.debug?.(`download range: ${range}`)\n\n // We are starting to download\n if (downloadInfoTransform) {\n downloadInfoTransform.beginRangeDownload()\n }\n\n const request = this.httpExecutor.createRequest(requestOptions, response => {\n response.on(\"error\", reject)\n response.on(\"aborted\", () => {\n reject(new Error(\"response has been aborted by the server\"))\n })\n // Electron net handles redirects automatically, our NodeJS test server doesn't use redirects - so, we don't check 3xx codes.\n if (response.statusCode >= 400) {\n reject(createHttpError(response))\n }\n\n response.pipe(firstStream, {\n end: false,\n })\n response.once(\"end\", () => {\n // Pass on that we are downloading a segment\n if (downloadInfoTransform) {\n downloadInfoTransform.endRangeDownload()\n }\n\n if (++downloadOperationCount === 100) {\n downloadOperationCount = 0\n setTimeout(() => w(index), 1000)\n } else {\n w(index)\n }\n })\n })\n request.on(\"redirect\", (statusCode: number, method: string, redirectUrl: string) => {\n this.logger.info(`Redirect to ${removeQuery(redirectUrl)}`)\n actualUrl = redirectUrl\n configureRequestUrl(new URL(actualUrl), requestOptions)\n request.followRedirect()\n })\n this.httpExecutor.addErrorAndTimeoutHandlers(request, reject)\n request.end()\n }\n\n w(0)\n })\n }\n\n protected async readRemoteBytes(start: number, endInclusive: number): Promise<Buffer> {\n const buffer = Buffer.allocUnsafe(endInclusive + 1 - start)\n const requestOptions = this.createRequestOptions()\n requestOptions.headers!.range = `bytes=${start}-${endInclusive}`\n let position = 0\n await this.request(requestOptions, chunk => {\n chunk.copy(buffer, position)\n position += chunk.length\n })\n\n if (position !== buffer.length) {\n throw new Error(`Received data length ${position} is not equal to expected ${buffer.length}`)\n }\n return buffer\n }\n\n private request(requestOptions: RequestOptions, dataHandler: (chunk: Buffer) => void): Promise<void> {\n return new Promise((resolve, reject) => {\n const request = this.httpExecutor.createRequest(requestOptions, response => {\n if (!checkIsRangesSupported(response, reject)) {\n return\n }\n\n response.on(\"error\", reject)\n response.on(\"aborted\", () => {\n reject(new Error(\"response has been aborted by the server\"))\n })\n\n response.on(\"data\", dataHandler)\n response.on(\"end\", () => resolve())\n })\n this.httpExecutor.addErrorAndTimeoutHandlers(request, reject)\n request.end()\n })\n }\n}\n\nfunction formatBytes(value: number, symbol = \" KB\"): string {\n return new Intl.NumberFormat(\"en\").format((value / 1024).toFixed(2) as any) + symbol\n}\n\n// safety\nfunction removeQuery(url: string): string {\n const index = url.indexOf(\"?\")\n return index < 0 ? url : url.substring(0, index)\n}\n\ninterface OpenedFile {\n readonly descriptor: number\n readonly path: string\n}\n", "import { BlockMap } from \"builder-util-runtime/out/blockMapApi\"\nimport { DifferentialDownloader } from \"./DifferentialDownloader\"\n\nexport class GenericDifferentialDownloader extends DifferentialDownloader {\n download(oldBlockMap: BlockMap, newBlockMap: BlockMap): Promise<any> {\n return this.doDownload(oldBlockMap, newBlockMap)\n }\n}\n", "import { CancellationToken, PackageFileInfo, ProgressInfo, UpdateFileInfo, UpdateInfo } from \"builder-util-runtime\"\nimport { EventEmitter } from \"events\"\nimport { URL } from \"url\"\nimport { LoginCallback } from \"./electronHttpExecutor\"\n\nexport { CancellationToken, PackageFileInfo, ProgressInfo, UpdateFileInfo, UpdateInfo }\n\nexport const DOWNLOAD_PROGRESS = \"download-progress\"\nexport const UPDATE_DOWNLOADED = \"update-downloaded\"\n\nexport interface Logger {\n info(message?: any): void\n\n warn(message?: any): void\n\n error(message?: any): void\n\n debug?(message: string): void\n}\n\nexport class UpdaterSignal {\n constructor(private emitter: EventEmitter) {}\n\n /**\n * Emitted when an authenticating proxy is [asking for user credentials](https://github.com/electron/electron/blob/master/docs/api/client-request.md#event-login).\n */\n login(handler: LoginHandler): void {\n addHandler(this.emitter, \"login\", handler)\n }\n\n progress(handler: (info: ProgressInfo) => void): void {\n addHandler(this.emitter, DOWNLOAD_PROGRESS, handler)\n }\n\n updateDownloaded(handler: (info: UpdateDownloadedEvent) => void): void {\n addHandler(this.emitter, UPDATE_DOWNLOADED, handler)\n }\n\n updateCancelled(handler: (info: UpdateInfo) => void): void {\n addHandler(this.emitter, \"update-cancelled\", handler)\n }\n}\n\nconst isLogEvent = false\n\nexport function addHandler(emitter: EventEmitter, event: UpdaterEvents, handler: (...args: Array<any>) => void): void {\n if (isLogEvent) {\n emitter.on(event, (...args: Array<any>) => {\n console.log(\"%s %s\", event, args)\n handler(...args)\n })\n } else {\n emitter.on(event, handler)\n }\n}\n\nexport interface UpdateCheckResult {\n readonly isUpdateAvailable: boolean\n\n readonly updateInfo: UpdateInfo\n\n readonly downloadPromise?: Promise<Array<string>> | null\n\n readonly cancellationToken?: CancellationToken\n\n /** @deprecated */\n readonly versionInfo: UpdateInfo\n}\n\nexport interface UpdateDownloadedEvent extends UpdateInfo {\n downloadedFile: string\n}\n\nexport interface ResolvedUpdateFileInfo {\n readonly url: URL\n readonly info: UpdateFileInfo\n\n packageInfo?: PackageFileInfo\n}\n\nexport type UpdaterEvents = \"login\" | \"checking-for-update\" | \"update-available\" | \"update-not-available\" | \"update-cancelled\" | \"download-progress\" | \"update-downloaded\" | \"error\"\n\nexport type LoginHandler = (authInfo: any, callback: LoginCallback) => void\n", "import {\n AllPublishOptions,\n asArray,\n CancellationToken,\n newError,\n PublishConfiguration,\n UpdateInfo,\n UUID,\n DownloadOptions,\n CancellationError,\n ProgressInfo,\n BlockMap,\n retry,\n} from \"builder-util-runtime\"\nimport { randomBytes } from \"crypto\"\nimport { release } from \"os\"\nimport { EventEmitter } from \"events\"\nimport { mkdir, outputFile, readFile, rename, unlink, copyFile, pathExists } from \"fs-extra\"\nimport { OutgoingHttpHeaders } from \"http\"\nimport { load } from \"js-yaml\"\nimport { Lazy } from \"lazy-val\"\nimport * as path from \"path\"\nimport { eq as isVersionsEqual, gt as isVersionGreaterThan, lt as isVersionLessThan, parse as parseVersion, prerelease as getVersionPreleaseComponents, SemVer } from \"semver\"\nimport { AppAdapter } from \"./AppAdapter\"\nimport { createTempUpdateFile, DownloadedUpdateHelper } from \"./DownloadedUpdateHelper\"\nimport { ElectronAppAdapter } from \"./ElectronAppAdapter\"\nimport { ElectronHttpExecutor, getNetSession, LoginCallback } from \"./electronHttpExecutor\"\nimport { GenericProvider } from \"./providers/GenericProvider\"\nimport { createClient, isUrlProbablySupportMultiRangeRequests } from \"./providerFactory\"\nimport { Provider, ProviderPlatform } from \"./providers/Provider\"\nimport type { TypedEmitter } from \"tiny-typed-emitter\"\nimport Session = Electron.Session\nimport type { AuthInfo } from \"electron\"\nimport { gunzipSync, gzipSync } from \"zlib\"\nimport { DifferentialDownloaderOptions } from \"./differentialDownloader/DifferentialDownloader\"\nimport { GenericDifferentialDownloader } from \"./differentialDownloader/GenericDifferentialDownloader\"\nimport { DOWNLOAD_PROGRESS, Logger, ResolvedUpdateFileInfo, UPDATE_DOWNLOADED, UpdateCheckResult, UpdateDownloadedEvent, UpdaterSignal } from \"./types\"\nimport { VerifyUpdateSupport } from \"./main\"\n\nexport type AppUpdaterEvents = {\n error: (error: Error, message?: string) => void\n login: (info: AuthInfo, callback: LoginCallback) => void\n \"checking-for-update\": () => void\n \"update-not-available\": (info: UpdateInfo) => void\n \"update-available\": (info: UpdateInfo) => void\n \"update-downloaded\": (event: UpdateDownloadedEvent) => void\n \"download-progress\": (info: ProgressInfo) => void\n \"update-cancelled\": (info: UpdateInfo) => void\n \"appimage-filename-updated\": (path: string) => void\n}\n\nexport abstract class AppUpdater extends (EventEmitter as new () => TypedEmitter<AppUpdaterEvents>) {\n /**\n * Whether to automatically download an update when it is found.\n * @default true\n */\n autoDownload = true\n\n /**\n * Whether to automatically install a downloaded update on app quit (if `quitAndInstall` was not called before).\n * @default true\n */\n autoInstallOnAppQuit = true\n\n /**\n * Whether to run the app after finish install when run the installer is NOT in silent mode.\n * @default true\n */\n autoRunAppAfterInstall = true\n\n /**\n * *GitHub provider only.* Whether to allow update to pre-release versions. Defaults to `true` if application version contains prerelease components (e.g. `0.12.1-alpha.1`, here `alpha` is a prerelease component), otherwise `false`.\n *\n * If `true`, downgrade will be allowed (`allowDowngrade` will be set to `true`).\n */\n allowPrerelease = false\n\n /**\n * *GitHub provider only.* Get all release notes (from current version to latest), not just the latest.\n * @default false\n */\n fullChangelog = false\n\n /**\n * Whether to allow version downgrade (when a user from the beta channel wants to go back to the stable channel).\n *\n * Taken in account only if channel differs (pre-release version component in terms of semantic versioning).\n *\n * @default false\n */\n allowDowngrade = false\n\n /**\n * Web installer files might not have signature verification, this switch prevents to load them unless it is needed.\n *\n * Currently false to prevent breaking the current API, but it should be changed to default true at some point that\n * breaking changes are allowed.\n *\n * @default false\n */\n disableWebInstaller = false\n\n /**\n * *NSIS only* Disable differential downloads and always perform full download of installer.\n *\n * @default false\n */\n disableDifferentialDownload = false\n\n /**\n * Allows developer to force the updater to work in \"dev\" mode, looking for \"dev-app-update.yml\" instead of \"app-update.yml\"\n * Dev: `path.join(this.app.getAppPath(), \"dev-app-update.yml\")`\n * Prod: `path.join(process.resourcesPath!, \"app-update.yml\")`\n *\n * @default false\n */\n forceDevUpdateConfig = false\n\n /**\n * The base URL of the old block map file.\n *\n * When null, the updater will use the base URL of the update file to download the update.\n * When set, the updater will use this string as the base URL of the old block map file.\n * Some servers like github cannot download the old block map file from latest release,\n * so you need to compute the old block map file base URL manually.\n *\n * @default null\n */\n public previousBlockmapBaseUrlOverride: string | null = null\n\n /**\n * The current application version.\n */\n readonly currentVersion: SemVer\n\n private _channel: string | null = null\n\n protected downloadedUpdateHelper: DownloadedUpdateHelper | null = null\n\n /**\n * Get the update channel. Doesn't return `channel` from the update configuration, only if was previously set.\n */\n get channel(): string | null {\n return this._channel\n }\n\n /**\n * Set the update channel. Overrides `channel` in the update configuration.\n *\n * `allowDowngrade` will be automatically set to `true`. If this behavior is not suitable for you, simple set `allowDowngrade` explicitly after.\n */\n set channel(value: string | null) {\n if (this._channel != null) {\n // noinspection SuspiciousTypeOfGuard\n if (typeof value !== \"string\") {\n throw newError(`Channel must be a string, but got: ${value}`, \"ERR_UPDATER_INVALID_CHANNEL\")\n } else if (value.length === 0) {\n throw newError(`Channel must be not an empty string`, \"ERR_UPDATER_INVALID_CHANNEL\")\n }\n }\n\n this._channel = value\n this.allowDowngrade = true\n }\n\n /**\n * The request headers.\n */\n requestHeaders: OutgoingHttpHeaders | null = null\n\n /**\n * Shortcut for explicitly adding auth tokens to request headers\n */\n addAuthHeader(token: string) {\n this.requestHeaders = Object.assign({}, this.requestHeaders, {\n authorization: token,\n })\n }\n\n protected _logger: Logger = console\n\n // noinspection JSMethodCanBeStatic,JSUnusedGlobalSymbols\n get netSession(): Session {\n return getNetSession()\n }\n\n /**\n * The logger. You can pass [electron-log](https://github.com/megahertz/electron-log), [winston](https://github.com/winstonjs/winston) or another logger with the following interface: `{ info(), warn(), error() }`.\n * Set it to `null` if you would like to disable a logging feature.\n */\n get logger(): Logger | null {\n return this._logger\n }\n\n set logger(value: Logger | null) {\n this._logger = value == null ? new NoOpLogger() : value\n }\n\n // noinspection JSUnusedGlobalSymbols\n /**\n * For type safety you can use signals, e.g. `autoUpdater.signals.updateDownloaded(() => {})` instead of `autoUpdater.on('update-available', () => {})`\n */\n readonly signals = new UpdaterSignal(this)\n\n private _appUpdateConfigPath: string | null = null\n\n // noinspection JSUnusedGlobalSymbols\n /**\n * test only\n * @private\n */\n set updateConfigPath(value: string | null) {\n this.clientPromise = null\n this._appUpdateConfigPath = value\n this.configOnDisk = new Lazy<any>(() => this.loadUpdateConfig())\n }\n\n protected _isUpdateSupported: VerifyUpdateSupport = updateInfo => this.checkIfUpdateSupported(updateInfo)\n\n /**\n * Allows developer to override default logic for determining if an update is supported.\n * The default logic compares the `UpdateInfo` minimum system version against the `os.release()` with `semver` package\n */\n get isUpdateSupported(): VerifyUpdateSupport {\n return this._isUpdateSupported\n }\n\n set isUpdateSupported(value: VerifyUpdateSupport) {\n if (value) {\n this._isUpdateSupported = value\n }\n }\n\n protected _isUserWithinRollout: VerifyUpdateSupport = updateInfo => this.isStagingMatch(updateInfo)\n\n /**\n * Allows developer to override default logic for determining if the user is below the rollout threshold.\n * The default logic compares the staging percentage with numerical representation of user ID.\n * An override can define custom logic, or bypass it if needed.\n */\n get isUserWithinRollout(): VerifyUpdateSupport {\n return this._isUserWithinRollout\n }\n\n set isUserWithinRollout(value: VerifyUpdateSupport) {\n if (value) {\n this._isUserWithinRollout = value\n }\n }\n\n private clientPromise: Promise<Provider<any>> | null = null\n\n protected readonly stagingUserIdPromise = new Lazy<string>(() => this.getOrCreateStagingUserId())\n\n // public, allow to read old config for anyone\n /** @internal */\n configOnDisk = new Lazy<any>(() => this.loadUpdateConfig())\n\n private checkForUpdatesPromise: Promise<UpdateCheckResult> | null = null\n private downloadPromise: Promise<Array<string>> | null = null\n\n protected readonly app: AppAdapter\n\n protected updateInfoAndProvider: UpdateInfoAndProvider | null = null\n\n /** @internal */\n readonly httpExecutor: ElectronHttpExecutor\n\n protected constructor(options: AllPublishOptions | null | undefined, app?: AppAdapter) {\n super()\n\n this.on(\"error\", (error: Error) => {\n this._logger.error(`Error: ${error.stack || error.message}`)\n })\n\n if (app == null) {\n this.app = new ElectronAppAdapter()\n this.httpExecutor = new ElectronHttpExecutor((authInfo, callback) => this.emit(\"login\", authInfo, callback))\n } else {\n this.app = app\n this.httpExecutor = null as any\n }\n\n const currentVersionString = this.app.version\n const currentVersion = parseVersion(currentVersionString)\n if (currentVersion == null) {\n throw newError(`App version is not a valid semver version: \"${currentVersionString}\"`, \"ERR_UPDATER_INVALID_VERSION\")\n }\n this.currentVersion = currentVersion\n this.allowPrerelease = hasPrereleaseComponents(currentVersion)\n\n if (options != null) {\n this.setFeedURL(options)\n\n if (typeof options !== \"string\" && options.requestHeaders) {\n this.requestHeaders = options.requestHeaders\n }\n }\n }\n\n //noinspection JSMethodCanBeStatic,JSUnusedGlobalSymbols\n getFeedURL(): string | null | undefined {\n return \"Deprecated. Do not use it.\"\n }\n\n /**\n * Configure update provider. If value is `string`, [GenericServerOptions](./publish.md#genericserveroptions) will be set with value as `url`.\n * @param options If you want to override configuration in the `app-update.yml`.\n */\n setFeedURL(options: PublishConfiguration | AllPublishOptions | string) {\n const runtimeOptions = this.createProviderRuntimeOptions()\n // https://github.com/electron-userland/electron-builder/issues/1105\n let provider: Provider<any>\n if (typeof options === \"string\") {\n provider = new GenericProvider({ provider: \"generic\", url: options }, this, {\n ...runtimeOptions,\n isUseMultipleRangeRequest: isUrlProbablySupportMultiRangeRequests(options),\n })\n } else {\n provider = createClient(options, this, runtimeOptions)\n }\n this.clientPromise = Promise.resolve(provider)\n }\n\n /**\n * Asks the server whether there is an update.\n * @returns null if the updater is disabled, otherwise info about the latest version\n */\n checkForUpdates(): Promise<UpdateCheckResult | null> {\n if (!this.isUpdaterActive()) {\n return Promise.resolve(null)\n }\n\n let checkForUpdatesPromise = this.checkForUpdatesPromise\n if (checkForUpdatesPromise != null) {\n this._logger.info(\"Checking for update (already in progress)\")\n return checkForUpdatesPromise\n }\n\n const nullizePromise = () => (this.checkForUpdatesPromise = null)\n\n this._logger.info(\"Checking for update\")\n checkForUpdatesPromise = this.doCheckForUpdates()\n .then(it => {\n nullizePromise()\n return it\n })\n .catch((e: any) => {\n nullizePromise()\n this.emit(\"error\", e, `Cannot check for updates: ${(e.stack || e).toString()}`)\n throw e\n })\n\n this.checkForUpdatesPromise = checkForUpdatesPromise\n return checkForUpdatesPromise\n }\n\n public isUpdaterActive(): boolean {\n const isEnabled = this.app.isPackaged || this.forceDevUpdateConfig\n if (!isEnabled) {\n this._logger.info(\"Skip checkForUpdates because application is not packed and dev update config is not forced\")\n return false\n }\n return true\n }\n\n // noinspection JSUnusedGlobalSymbols\n checkForUpdatesAndNotify(downloadNotification?: DownloadNotification): Promise<UpdateCheckResult | null> {\n return this.checkForUpdates().then(it => {\n if (!it?.downloadPromise) {\n if (this._logger.debug != null) {\n this._logger.debug(\"checkForUpdatesAndNotify called, downloadPromise is null\")\n }\n return it\n }\n\n void it.downloadPromise.then(() => {\n const notificationContent = AppUpdater.formatDownloadNotification(it.updateInfo.version, this.app.name, downloadNotification)\n new (require(\"electron\").Notification)(notificationContent).show()\n })\n\n return it\n })\n }\n\n private static formatDownloadNotification(version: string, appName: string, downloadNotification?: DownloadNotification): DownloadNotification {\n if (downloadNotification == null) {\n downloadNotification = {\n title: \"A new update is ready to install\",\n body: `{appName} version {version} has been downloaded and will be automatically installed on exit`,\n }\n }\n downloadNotification = {\n title: downloadNotification.title.replace(\"{appName}\", appName).replace(\"{version}\", version),\n body: downloadNotification.body.replace(\"{appName}\", appName).replace(\"{version}\", version),\n }\n return downloadNotification\n }\n\n private async isStagingMatch(updateInfo: UpdateInfo): Promise<boolean> {\n const rawStagingPercentage = updateInfo.stagingPercentage\n let stagingPercentage = rawStagingPercentage\n if (stagingPercentage == null) {\n return true\n }\n\n stagingPercentage = parseInt(stagingPercentage as any, 10)\n if (isNaN(stagingPercentage)) {\n this._logger.warn(`Staging percentage is NaN: ${rawStagingPercentage}`)\n return true\n }\n\n // convert from user 0-100 to internal 0-1\n stagingPercentage = stagingPercentage / 100\n\n const stagingUserId = await this.stagingUserIdPromise.value\n const val = UUID.parse(stagingUserId).readUInt32BE(12)\n const percentage = val / 0xffffffff\n this._logger.info(`Staging percentage: ${stagingPercentage}, percentage: ${percentage}, user id: ${stagingUserId}`)\n return percentage < stagingPercentage\n }\n\n private computeFinalHeaders(headers: OutgoingHttpHeaders) {\n if (this.requestHeaders != null) {\n Object.assign(headers, this.requestHeaders)\n }\n return headers\n }\n\n private async isUpdateAvailable(updateInfo: UpdateInfo): Promise<boolean> {\n const latestVersion = parseVersion(updateInfo.version)\n if (latestVersion == null) {\n throw newError(\n `This file could not be downloaded, or the latest version (from update server) does not have a valid semver version: \"${updateInfo.version}\"`,\n \"ERR_UPDATER_INVALID_VERSION\"\n )\n }\n\n const currentVersion = this.currentVersion\n if (isVersionsEqual(latestVersion, currentVersion)) {\n return false\n }\n\n if (!(await Promise.resolve(this.isUpdateSupported(updateInfo)))) {\n return false\n }\n\n const isUserWithinRollout = await Promise.resolve(this.isUserWithinRollout(updateInfo))\n if (!isUserWithinRollout) {\n return false\n }\n\n // https://github.com/electron-userland/electron-builder/pull/3111#issuecomment-405033227\n // https://github.com/electron-userland/electron-builder/pull/3111#issuecomment-405030797\n const isLatestVersionNewer = isVersionGreaterThan(latestVersion, currentVersion)\n const isLatestVersionOlder = isVersionLessThan(latestVersion, currentVersion)\n\n if (isLatestVersionNewer) {\n return true\n }\n return this.allowDowngrade && isLatestVersionOlder\n }\n\n private checkIfUpdateSupported(updateInfo: UpdateInfo) {\n const minimumSystemVersion = updateInfo?.minimumSystemVersion\n const currentOSVersion = release()\n if (minimumSystemVersion) {\n try {\n if (isVersionLessThan(currentOSVersion, minimumSystemVersion)) {\n this._logger.info(`Current OS version ${currentOSVersion} is less than the minimum OS version required ${minimumSystemVersion} for version ${currentOSVersion}`)\n return false\n }\n } catch (e: any) {\n this._logger.warn(`Failed to compare current OS version(${currentOSVersion}) with minimum OS version(${minimumSystemVersion}): ${(e.message || e).toString()}`)\n }\n }\n return true\n }\n\n protected async getUpdateInfoAndProvider(): Promise<UpdateInfoAndProvider> {\n await this.app.whenReady()\n\n if (this.clientPromise == null) {\n this.clientPromise = this.configOnDisk.value.then(it => createClient(it, this, this.createProviderRuntimeOptions()))\n }\n\n const client = await this.clientPromise\n const stagingUserId = await this.stagingUserIdPromise.value\n client.setRequestHeaders(this.computeFinalHeaders({ \"x-user-staging-id\": stagingUserId }))\n return {\n info: await client.getLatestVersion(),\n provider: client,\n }\n }\n\n private createProviderRuntimeOptions() {\n return {\n isUseMultipleRangeRequest: true,\n platform: this._testOnlyOptions == null ? (process.platform as ProviderPlatform) : this._testOnlyOptions.platform,\n executor: this.httpExecutor,\n }\n }\n\n private async doCheckForUpdates(): Promise<UpdateCheckResult> {\n this.emit(\"checking-for-update\")\n\n const result = await this.getUpdateInfoAndProvider()\n const updateInfo = result.info\n if (!(await this.isUpdateAvailable(updateInfo))) {\n this._logger.info(\n `Update for version ${this.currentVersion.format()} is not available (latest version: ${updateInfo.version}, downgrade is ${\n this.allowDowngrade ? \"allowed\" : \"disallowed\"\n }).`\n )\n this.emit(\"update-not-available\", updateInfo)\n return {\n isUpdateAvailable: false,\n versionInfo: updateInfo,\n updateInfo,\n }\n }\n\n this.updateInfoAndProvider = result\n this.onUpdateAvailable(updateInfo)\n\n const cancellationToken = new CancellationToken()\n //noinspection ES6MissingAwait\n return {\n isUpdateAvailable: true,\n versionInfo: updateInfo,\n updateInfo,\n cancellationToken,\n downloadPromise: this.autoDownload ? this.downloadUpdate(cancellationToken) : null,\n }\n }\n\n protected onUpdateAvailable(updateInfo: UpdateInfo): void {\n this._logger.info(\n `Found version ${updateInfo.version} (url: ${asArray(updateInfo.files)\n .map(it => it.url)\n .join(\", \")})`\n )\n this.emit(\"update-available\", updateInfo)\n }\n\n /**\n * Start downloading update manually. You can use this method if `autoDownload` option is set to `false`.\n * @returns {Promise<Array<string>>} Paths to downloaded files.\n */\n downloadUpdate(cancellationToken: CancellationToken = new CancellationToken()): Promise<Array<string>> {\n const updateInfoAndProvider = this.updateInfoAndProvider\n if (updateInfoAndProvider == null) {\n const error = new Error(\"Please check update first\")\n this.dispatchError(error)\n return Promise.reject(error)\n }\n\n if (this.downloadPromise != null) {\n this._logger.info(\"Downloading update (already in progress)\")\n return this.downloadPromise\n }\n\n this._logger.info(\n `Downloading update from ${asArray(updateInfoAndProvider.info.files)\n .map(it => it.url)\n .join(\", \")}`\n )\n const errorHandler = (e: Error): Error => {\n // https://github.com/electron-userland/electron-builder/issues/1150#issuecomment-436891159\n if (!(e instanceof CancellationError)) {\n try {\n this.dispatchError(e)\n } catch (nestedError: any) {\n this._logger.warn(`Cannot dispatch error event: ${nestedError.stack || nestedError}`)\n }\n }\n\n return e\n }\n\n this.downloadPromise = this.doDownloadUpdate({\n updateInfoAndProvider,\n requestHeaders: this.computeRequestHeaders(updateInfoAndProvider.provider),\n cancellationToken,\n disableWebInstaller: this.disableWebInstaller,\n disableDifferentialDownload: this.disableDifferentialDownload,\n })\n .catch((e: any) => {\n throw errorHandler(e)\n })\n .finally(() => {\n this.downloadPromise = null\n })\n\n return this.downloadPromise\n }\n\n protected dispatchError(e: Error): void {\n this.emit(\"error\", e, (e.stack || e).toString())\n }\n\n protected dispatchUpdateDownloaded(event: UpdateDownloadedEvent): void {\n this.emit(UPDATE_DOWNLOADED, event)\n }\n\n protected abstract doDownloadUpdate(downloadUpdateOptions: DownloadUpdateOptions): Promise<Array<string>>\n\n /**\n * Restarts the app and installs the update after it has been downloaded.\n * It should only be called after `update-downloaded` has been emitted.\n *\n * **Note:** `autoUpdater.quitAndInstall()` will close all application windows first and only emit `before-quit` event on `app` after that.\n * This is different from the normal quit event sequence.\n *\n * @param isSilent *windows-only* Runs the installer in silent mode. Defaults to `false`.\n * @param isForceRunAfter Run the app after finish even on silent install. Not applicable for macOS.\n * Ignored if `isSilent` is set to `false`(In this case you can still set `autoRunAppAfterInstall` to `false` to prevent run the app after finish).\n */\n abstract quitAndInstall(isSilent?: boolean, isForceRunAfter?: boolean): void\n\n private async loadUpdateConfig(): Promise<any> {\n if (this._appUpdateConfigPath == null) {\n this._appUpdateConfigPath = this.app.appUpdateConfigPath\n }\n return load(await readFile(this._appUpdateConfigPath, \"utf-8\"))\n }\n\n private computeRequestHeaders(provider: Provider<any>): OutgoingHttpHeaders {\n const fileExtraDownloadHeaders = provider.fileExtraDownloadHeaders\n if (fileExtraDownloadHeaders != null) {\n const requestHeaders = this.requestHeaders\n return requestHeaders == null\n ? fileExtraDownloadHeaders\n : {\n ...fileExtraDownloadHeaders,\n ...requestHeaders,\n }\n }\n return this.computeFinalHeaders({ accept: \"*/*\" })\n }\n\n private async getOrCreateStagingUserId(): Promise<string> {\n const file = path.join(this.app.userDataPath, \".updaterId\")\n try {\n const id = await readFile(file, \"utf-8\")\n if (UUID.check(id)) {\n return id\n } else {\n this._logger.warn(`Staging user id file exists, but content was invalid: ${id}`)\n }\n } catch (e: any) {\n if (e.code !== \"ENOENT\") {\n this._logger.warn(`Couldn't read staging user ID, creating a blank one: ${e}`)\n }\n }\n\n const id = UUID.v5(randomBytes(4096), UUID.OID)\n this._logger.info(`Generated new staging user ID: ${id}`)\n try {\n await outputFile(file, id)\n } catch (e: any) {\n this._logger.warn(`Couldn't write out staging user ID: ${e}`)\n }\n return id\n }\n\n /** @internal */\n get isAddNoCacheQuery(): boolean {\n const headers = this.requestHeaders\n // https://github.com/electron-userland/electron-builder/issues/3021\n if (headers == null) {\n return true\n }\n\n for (const headerName of Object.keys(headers)) {\n const s = headerName.toLowerCase()\n if (s === \"authorization\" || s === \"private-token\") {\n return false\n }\n }\n return true\n }\n\n /**\n * @private\n * @internal\n */\n _testOnlyOptions: TestOnlyUpdaterOptions | null = null\n\n private async getOrCreateDownloadHelper(): Promise<DownloadedUpdateHelper> {\n let result = this.downloadedUpdateHelper\n if (result == null) {\n const dirName = (await this.configOnDisk.value).updaterCacheDirName\n const logger = this._logger\n if (dirName == null) {\n logger.error(\"updaterCacheDirName is not specified in app-update.yml Was app build using at least electron-builder 20.34.0?\")\n }\n const cacheDir = path.join(this.app.baseCachePath, dirName || this.app.name)\n if (logger.debug != null) {\n logger.debug(`updater cache dir: ${cacheDir}`)\n }\n\n result = new DownloadedUpdateHelper(cacheDir)\n this.downloadedUpdateHelper = result\n }\n return result\n }\n\n protected async executeDownload(taskOptions: DownloadExecutorTask): Promise<Array<string>> {\n const fileInfo = taskOptions.fileInfo\n const downloadOptions: DownloadOptions = {\n headers: taskOptions.downloadUpdateOptions.requestHeaders,\n cancellationToken: taskOptions.downloadUpdateOptions.cancellationToken,\n sha2: (fileInfo.info as any).sha2,\n sha512: fileInfo.info.sha512,\n }\n\n if (this.listenerCount(DOWNLOAD_PROGRESS) > 0) {\n downloadOptions.onProgress = it => this.emit(DOWNLOAD_PROGRESS, it)\n }\n\n const updateInfo = taskOptions.downloadUpdateOptions.updateInfoAndProvider.info\n const version = updateInfo.version\n const packageInfo = fileInfo.packageInfo\n\n function getCacheUpdateFileName(): string {\n // NodeJS URL doesn't decode automatically\n const urlPath = decodeURIComponent(taskOptions.fileInfo.url.pathname)\n if (urlPath.toLowerCase().endsWith(`.${taskOptions.fileExtension.toLowerCase()}`)) {\n return path.basename(urlPath)\n } else {\n // url like /latest, generate name\n return taskOptions.fileInfo.info.url\n }\n }\n\n const downloadedUpdateHelper = await this.getOrCreateDownloadHelper()\n const cacheDir = downloadedUpdateHelper.cacheDirForPendingUpdate\n await mkdir(cacheDir, { recursive: true })\n const updateFileName = getCacheUpdateFileName()\n let updateFile = path.join(cacheDir, updateFileName)\n const packageFile = packageInfo == null ? null : path.join(cacheDir, `package-${version}${path.extname(packageInfo.path) || \".7z\"}`)\n\n const done = async (isSaveCache: boolean) => {\n await downloadedUpdateHelper.setDownloadedFile(updateFile, packageFile, updateInfo, fileInfo, updateFileName, isSaveCache)\n await taskOptions.done!({\n ...updateInfo,\n downloadedFile: updateFile,\n })\n const currentBlockMapFile = path.join(cacheDir, \"current.blockmap\")\n if (await pathExists(currentBlockMapFile)) {\n await copyFile(currentBlockMapFile, path.join(downloadedUpdateHelper.cacheDir, \"current.blockmap\"))\n }\n return packageFile == null ? [updateFile] : [updateFile, packageFile]\n }\n\n const log = this._logger\n const cachedUpdateFile = await downloadedUpdateHelper.validateDownloadedPath(updateFile, updateInfo, fileInfo, log)\n if (cachedUpdateFile != null) {\n updateFile = cachedUpdateFile\n return await done(false)\n }\n\n const removeFileIfAny = async () => {\n await downloadedUpdateHelper.clear().catch(() => {\n // ignore\n })\n return await unlink(updateFile).catch(() => {\n // ignore\n })\n }\n\n const tempUpdateFile = await createTempUpdateFile(`temp-${updateFileName}`, cacheDir, log)\n try {\n await taskOptions.task(tempUpdateFile, downloadOptions, packageFile, removeFileIfAny)\n await retry(() => rename(tempUpdateFile, updateFile), {\n retries: 60,\n interval: 500,\n shouldRetry: (error: Error) => {\n if (error instanceof Error && /^EBUSY:/.test(error.message)) {\n return true\n }\n log.warn(`Cannot rename temp file to final file: ${error.message || error.stack}`)\n return false\n },\n })\n } catch (e: any) {\n await removeFileIfAny()\n\n if (e instanceof CancellationError) {\n log.info(\"cancelled\")\n this.emit(\"update-cancelled\", updateInfo)\n }\n throw e\n }\n\n log.info(`New version ${version} has been downloaded to ${updateFile}`)\n return await done(true)\n }\n protected async differentialDownloadInstaller(\n fileInfo: ResolvedUpdateFileInfo,\n downloadUpdateOptions: DownloadUpdateOptions,\n installerPath: string,\n provider: Provider<any>,\n oldInstallerFileName: string\n ): Promise<boolean> {\n try {\n if (this._testOnlyOptions != null && !this._testOnlyOptions.isUseDifferentialDownload) {\n return true\n }\n const provider = downloadUpdateOptions.updateInfoAndProvider.provider\n const blockmapFileUrls = await provider.getBlockMapFiles(\n fileInfo.url,\n this.app.version,\n downloadUpdateOptions.updateInfoAndProvider.info.version,\n this.previousBlockmapBaseUrlOverride\n )\n this._logger.info(`Download block maps (old: \"${blockmapFileUrls[0]}\", new: ${blockmapFileUrls[1]})`)\n\n const downloadBlockMap = async (url: URL): Promise<BlockMap> => {\n const data = await this.httpExecutor.downloadToBuffer(url, {\n headers: downloadUpdateOptions.requestHeaders,\n cancellationToken: downloadUpdateOptions.cancellationToken,\n })\n\n if (data == null || data.length === 0) {\n throw new Error(`Blockmap \"${url.href}\" is empty`)\n }\n\n try {\n return JSON.parse(gunzipSync(data).toString())\n } catch (e: any) {\n throw new Error(`Cannot parse blockmap \"${url.href}\", error: ${e}`)\n }\n }\n\n const downloadOptions: DifferentialDownloaderOptions = {\n newUrl: fileInfo.url,\n oldFile: path.join(this.downloadedUpdateHelper!.cacheDir, oldInstallerFileName),\n logger: this._logger,\n newFile: installerPath,\n isUseMultipleRangeRequest: provider.isUseMultipleRangeRequest,\n requestHeaders: downloadUpdateOptions.requestHeaders,\n cancellationToken: downloadUpdateOptions.cancellationToken,\n }\n\n if (this.listenerCount(DOWNLOAD_PROGRESS) > 0) {\n downloadOptions.onProgress = it => this.emit(DOWNLOAD_PROGRESS, it)\n }\n\n const saveBlockMapToCacheDir = async (blockMapData: BlockMap, cacheDir: string) => {\n const blockMapFile = path.join(cacheDir, \"current.blockmap\")\n await outputFile(blockMapFile, gzipSync(JSON.stringify(blockMapData)))\n }\n\n const getBlockMapFromCacheDir = async (cacheDir: string) => {\n const blockMapFile = path.join(cacheDir, \"current.blockmap\")\n try {\n if (await pathExists(blockMapFile)) {\n return JSON.parse(gunzipSync(await readFile(blockMapFile)).toString())\n }\n } catch (e: any) {\n this._logger.warn(`Cannot parse blockmap \"${blockMapFile}\", error: ${e}`)\n }\n return null\n }\n\n const newBlockMapData = await downloadBlockMap(blockmapFileUrls[1])\n await saveBlockMapToCacheDir(newBlockMapData, this.downloadedUpdateHelper!.cacheDirForPendingUpdate)\n\n // get old blockmap from cache dir first, if not found, download it\n let oldBlockMapData = await getBlockMapFromCacheDir(this.downloadedUpdateHelper!.cacheDir)\n if (oldBlockMapData == null) {\n oldBlockMapData = await downloadBlockMap(blockmapFileUrls[0])\n }\n\n await new GenericDifferentialDownloader(fileInfo.info, this.httpExecutor, downloadOptions).download(oldBlockMapData, newBlockMapData)\n return false\n } catch (e: any) {\n this._logger.error(`Cannot download differentially, fallback to full download: ${e.stack || e}`)\n if (this._testOnlyOptions != null) {\n // test mode\n throw e\n }\n return true\n }\n }\n}\n\nexport interface DownloadUpdateOptions {\n readonly updateInfoAndProvider: UpdateInfoAndProvider\n readonly requestHeaders: OutgoingHttpHeaders\n readonly cancellationToken: CancellationToken\n readonly disableWebInstaller?: boolean\n readonly disableDifferentialDownload?: boolean\n}\n\nfunction hasPrereleaseComponents(version: SemVer) {\n const versionPrereleaseComponent = getVersionPreleaseComponents(version)\n return versionPrereleaseComponent != null && versionPrereleaseComponent.length > 0\n}\n\n/** @private */\nexport class NoOpLogger implements Logger {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n info(message?: any) {\n // ignore\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n warn(message?: any) {\n // ignore\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n error(message?: any) {\n // ignore\n }\n}\n\nexport interface UpdateInfoAndProvider {\n info: UpdateInfo\n provider: Provider<any>\n}\n\nexport interface DownloadExecutorTask {\n readonly fileExtension: string\n readonly fileInfo: ResolvedUpdateFileInfo\n readonly downloadUpdateOptions: DownloadUpdateOptions\n readonly task: (destinationFile: string, downloadOptions: DownloadOptions, packageFile: string | null, removeTempDirIfAny: () => Promise<any>) => Promise<any>\n\n readonly done?: (event: UpdateDownloadedEvent) => Promise<any>\n}\n\nexport interface DownloadNotification {\n body: string\n title: string\n}\n\n/** @private */\nexport interface TestOnlyUpdaterOptions {\n platform: ProviderPlatform\n\n isUseDifferentialDownload?: boolean\n}\n", "import { AllPublishOptions } from \"builder-util-runtime\"\nimport { spawn, SpawnOptions, spawnSync, StdioOptions } from \"child_process\"\nimport { AppAdapter } from \"./AppAdapter\"\nimport { AppUpdater, DownloadExecutorTask } from \"./AppUpdater\"\n\nexport abstract class BaseUpdater extends AppUpdater {\n protected quitAndInstallCalled = false\n private quitHandlerAdded = false\n\n protected constructor(options?: AllPublishOptions | null, app?: AppAdapter) {\n super(options, app)\n }\n\n quitAndInstall(isSilent = false, isForceRunAfter = false): void {\n this._logger.info(`Install on explicit quitAndInstall`)\n // If NOT in silent mode use `autoRunAppAfterInstall` to determine whether to force run the app\n const isInstalled = this.install(isSilent, isSilent ? isForceRunAfter : this.autoRunAppAfterInstall)\n if (isInstalled) {\n setImmediate(() => {\n // this event is normally emitted when calling quitAndInstall, this emulates that\n require(\"electron\").autoUpdater.emit(\"before-quit-for-update\")\n this.app.quit()\n })\n } else {\n this.quitAndInstallCalled = false\n }\n }\n\n protected executeDownload(taskOptions: DownloadExecutorTask): Promise<Array<string>> {\n return super.executeDownload({\n ...taskOptions,\n done: event => {\n this.dispatchUpdateDownloaded(event)\n this.addQuitHandler()\n return Promise.resolve()\n },\n })\n }\n\n protected get installerPath(): string | null {\n return this.downloadedUpdateHelper == null ? null : this.downloadedUpdateHelper.file\n }\n\n // must be sync\n protected abstract doInstall(options: InstallOptions): boolean\n\n // must be sync (because quit even handler is not async)\n install(isSilent = false, isForceRunAfter = false): boolean {\n if (this.quitAndInstallCalled) {\n this._logger.warn(\"install call ignored: quitAndInstallCalled is set to true\")\n return false\n }\n\n const downloadedUpdateHelper = this.downloadedUpdateHelper\n const installerPath = this.installerPath\n const downloadedFileInfo = downloadedUpdateHelper == null ? null : downloadedUpdateHelper.downloadedFileInfo\n if (installerPath == null || downloadedFileInfo == null) {\n this.dispatchError(new Error(\"No update filepath provided, can't quit and install\"))\n return false\n }\n\n // prevent calling several times\n this.quitAndInstallCalled = true\n\n try {\n this._logger.info(`Install: isSilent: ${isSilent}, isForceRunAfter: ${isForceRunAfter}`)\n return this.doInstall({\n isSilent,\n isForceRunAfter,\n isAdminRightsRequired: downloadedFileInfo.isAdminRightsRequired,\n })\n } catch (e: any) {\n this.dispatchError(e)\n return false\n }\n }\n\n protected addQuitHandler(): void {\n if (this.quitHandlerAdded || !this.autoInstallOnAppQuit) {\n return\n }\n\n this.quitHandlerAdded = true\n\n this.app.onQuit(exitCode => {\n if (this.quitAndInstallCalled) {\n this._logger.info(\"Update installer has already been triggered. Quitting application.\")\n return\n }\n\n if (!this.autoInstallOnAppQuit) {\n this._logger.info(\"Update will not be installed on quit because autoInstallOnAppQuit is set to false.\")\n return\n }\n\n if (exitCode !== 0) {\n this._logger.info(`Update will be not installed on quit because application is quitting with exit code ${exitCode}`)\n return\n }\n\n this._logger.info(\"Auto install update on quit\")\n this.install(true, false)\n })\n }\n\n protected spawnSyncLog(cmd: string, args: string[] = [], env = {}): string {\n this._logger.info(`Executing: ${cmd} with args: ${args}`)\n const response = spawnSync(cmd, args, {\n env: { ...process.env, ...env },\n encoding: \"utf-8\",\n shell: true,\n })\n\n const { error, status, stdout, stderr } = response\n if (error != null) {\n this._logger.error(stderr)\n throw error\n } else if (status != null && status !== 0) {\n this._logger.error(stderr)\n throw new Error(`Command ${cmd} exited with code ${status}`)\n }\n\n return stdout.trim()\n }\n\n /**\n * This handles both node 8 and node 10 way of emitting error when spawning a process\n * - node 8: Throws the error\n * - node 10: Emit the error(Need to listen with on)\n */\n // https://github.com/electron-userland/electron-builder/issues/1129\n // Node 8 sends errors: https://nodejs.org/dist/latest-v8.x/docs/api/errors.html#errors_common_system_errors\n protected async spawnLog(cmd: string, args: string[] = [], env: any = undefined, stdio: StdioOptions = \"ignore\"): Promise<boolean> {\n this._logger.info(`Executing: ${cmd} with args: ${args}`)\n return new Promise<boolean>((resolve, reject) => {\n try {\n const params: SpawnOptions = { stdio, env, detached: true }\n const p = spawn(cmd, args, params)\n p.on(\"error\", error => {\n reject(error)\n })\n p.unref()\n if (p.pid !== undefined) {\n resolve(true)\n }\n } catch (error) {\n reject(error)\n }\n })\n }\n}\n\nexport interface InstallOptions {\n readonly isSilent: boolean\n readonly isForceRunAfter: boolean\n readonly isAdminRightsRequired: boolean\n}\n", "import { BlockMap } from \"builder-util-runtime/out/blockMapApi\"\nimport { close, fstat, open, read } from \"fs-extra\"\nimport { DifferentialDownloader } from \"./DifferentialDownloader\"\nimport { inflateRawSync } from \"zlib\"\n\nexport class FileWithEmbeddedBlockMapDifferentialDownloader extends DifferentialDownloader {\n async download(): Promise<void> {\n const packageInfo = this.blockAwareFileInfo\n const fileSize = packageInfo.size!\n const offset = fileSize - (packageInfo.blockMapSize! + 4)\n this.fileMetadataBuffer = await this.readRemoteBytes(offset, fileSize - 1)\n const newBlockMap = readBlockMap(this.fileMetadataBuffer.slice(0, this.fileMetadataBuffer.length - 4))\n await this.doDownload(await readEmbeddedBlockMapData(this.options.oldFile), newBlockMap)\n }\n}\n\nfunction readBlockMap(data: Buffer): BlockMap {\n return JSON.parse(inflateRawSync(data).toString())\n}\n\nasync function readEmbeddedBlockMapData(file: string): Promise<BlockMap> {\n const fd = await open(file, \"r\")\n try {\n const fileSize = (await fstat(fd)).size\n const sizeBuffer = Buffer.allocUnsafe(4)\n await read(fd, sizeBuffer, 0, sizeBuffer.length, fileSize - sizeBuffer.length)\n\n const dataBuffer = Buffer.allocUnsafe(sizeBuffer.readUInt32BE(0))\n await read(fd, dataBuffer, 0, dataBuffer.length, fileSize - sizeBuffer.length - dataBuffer.length)\n await close(fd)\n\n return readBlockMap(dataBuffer)\n } catch (e: any) {\n await close(fd)\n throw e\n }\n}\n", "import { AllPublishOptions, newError } from \"builder-util-runtime\"\nimport { execFileSync } from \"child_process\"\nimport { chmod } from \"fs-extra\"\nimport { unlinkSync } from \"fs\"\nimport * as path from \"path\"\nimport { DownloadUpdateOptions } from \"./AppUpdater\"\nimport { BaseUpdater, InstallOptions } from \"./BaseUpdater\"\nimport { DifferentialDownloaderOptions } from \"./differentialDownloader/DifferentialDownloader\"\nimport { FileWithEmbeddedBlockMapDifferentialDownloader } from \"./differentialDownloader/FileWithEmbeddedBlockMapDifferentialDownloader\"\nimport { findFile, Provider } from \"./providers/Provider\"\nimport { DOWNLOAD_PROGRESS, ResolvedUpdateFileInfo } from \"./types\"\n\nexport class AppImageUpdater extends BaseUpdater {\n constructor(options?: AllPublishOptions | null, app?: any) {\n super(options, app)\n }\n\n public isUpdaterActive(): boolean {\n if (process.env[\"APPIMAGE\"] == null && !this.forceDevUpdateConfig) {\n if (process.env[\"SNAP\"] == null) {\n this._logger.warn(\"APPIMAGE env is not defined, current application is not an AppImage\")\n } else {\n this._logger.info(\"SNAP env is defined, updater is disabled\")\n }\n return false\n }\n return super.isUpdaterActive()\n }\n\n /*** @private */\n protected doDownloadUpdate(downloadUpdateOptions: DownloadUpdateOptions): Promise<Array<string>> {\n const provider = downloadUpdateOptions.updateInfoAndProvider.provider\n const fileInfo = findFile(provider.resolveFiles(downloadUpdateOptions.updateInfoAndProvider.info), \"AppImage\", [\"rpm\", \"deb\", \"pacman\"])!\n return this.executeDownload({\n fileExtension: \"AppImage\",\n fileInfo,\n downloadUpdateOptions,\n task: async (updateFile, downloadOptions) => {\n const oldFile = process.env[\"APPIMAGE\"]!\n if (oldFile == null) {\n throw newError(\"APPIMAGE env is not defined\", \"ERR_UPDATER_OLD_FILE_NOT_FOUND\")\n }\n\n if (downloadUpdateOptions.disableDifferentialDownload || (await this.downloadDifferential(fileInfo, oldFile, updateFile, provider, downloadUpdateOptions))) {\n await this.httpExecutor.download(fileInfo.url, updateFile, downloadOptions)\n }\n\n await chmod(updateFile, 0o755)\n },\n })\n }\n\n private async downloadDifferential(fileInfo: ResolvedUpdateFileInfo, oldFile: string, updateFile: string, provider: Provider<any>, downloadUpdateOptions: DownloadUpdateOptions) {\n try {\n const downloadOptions: DifferentialDownloaderOptions = {\n newUrl: fileInfo.url,\n oldFile,\n logger: this._logger,\n newFile: updateFile,\n isUseMultipleRangeRequest: provider.isUseMultipleRangeRequest,\n requestHeaders: downloadUpdateOptions.requestHeaders,\n cancellationToken: downloadUpdateOptions.cancellationToken,\n }\n\n if (this.listenerCount(DOWNLOAD_PROGRESS) > 0) {\n downloadOptions.onProgress = it => this.emit(DOWNLOAD_PROGRESS, it)\n }\n\n await new FileWithEmbeddedBlockMapDifferentialDownloader(fileInfo.info, this.httpExecutor, downloadOptions).download()\n return false\n } catch (e: any) {\n this._logger.error(`Cannot download differentially, fallback to full download: ${e.stack || e}`)\n // during test (developer machine mac) we must throw error\n return process.platform === \"linux\"\n }\n }\n\n protected doInstall(options: InstallOptions): boolean {\n const appImageFile = process.env[\"APPIMAGE\"]!\n if (appImageFile == null) {\n throw newError(\"APPIMAGE env is not defined\", \"ERR_UPDATER_OLD_FILE_NOT_FOUND\")\n }\n\n // https://stackoverflow.com/a/1712051/1910191\n unlinkSync(appImageFile)\n\n let destination: string\n const existingBaseName = path.basename(appImageFile)\n const installerPath = this.installerPath\n if (installerPath == null) {\n this.dispatchError(new Error(\"No update filepath provided, can't quit and install\"))\n return false\n }\n // https://github.com/electron-userland/electron-builder/issues/2964\n // if no version in existing file name, it means that user wants to preserve current custom name\n if (path.basename(installerPath) === existingBaseName || !/\\d+\\.\\d+\\.\\d+/.test(existingBaseName)) {\n // no version in the file name, overwrite existing\n destination = appImageFile\n } else {\n destination = path.join(path.dirname(appImageFile), path.basename(installerPath))\n }\n\n execFileSync(\"mv\", [\"-f\", installerPath, destination])\n if (destination !== appImageFile) {\n this.emit(\"appimage-filename-updated\", destination)\n }\n\n const env: NodeJS.ProcessEnv = {\n ...process.env,\n APPIMAGE_SILENT_INSTALL: \"true\",\n }\n\n if (options.isForceRunAfter) {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this.spawnLog(destination, [], env)\n } else {\n env.APPIMAGE_EXIT_AFTER_INSTALL = \"true\"\n execFileSync(destination, [], { env })\n }\n return true\n }\n}\n", "import { AllPublishOptions } from \"builder-util-runtime\"\nimport { AppAdapter } from \"./AppAdapter\"\nimport { BaseUpdater } from \"./BaseUpdater\"\n\nexport abstract class LinuxUpdater extends BaseUpdater {\n constructor(options?: AllPublishOptions | null, app?: AppAdapter) {\n super(options, app)\n }\n\n /**\n * Returns true if the current process is running as root.\n */\n protected isRunningAsRoot(): boolean {\n return process.getuid?.() === 0\n }\n\n /**\n * Sanitizies the installer path for using with command line tools.\n */\n protected get installerPath(): string | null {\n return super.installerPath?.replace(/\\\\/g, \"\\\\\\\\\").replace(/ /g, \"\\\\ \") ?? null\n }\n\n protected runCommandWithSudoIfNeeded(commandWithArgs: string[]) {\n if (this.isRunningAsRoot()) {\n this._logger.info(\"Running as root, no need to use sudo\")\n return this.spawnSyncLog(commandWithArgs[0], commandWithArgs.slice(1))\n }\n\n const { name } = this.app\n const installComment = `\"${name} would like to update\"`\n const sudo = this.sudoWithArgs(installComment)\n this._logger.info(`Running as non-root user, using sudo to install: ${sudo}`)\n let wrapper = `\"`\n // some sudo commands dont want the command to be wrapped in \" quotes\n if (/pkexec/i.test(sudo[0]) || sudo[0] === \"sudo\") {\n wrapper = \"\"\n }\n return this.spawnSyncLog(sudo[0], [...(sudo.length > 1 ? sudo.slice(1) : []), `${wrapper}/bin/bash`, \"-c\", `'${commandWithArgs.join(\" \")}'${wrapper}`])\n }\n\n protected sudoWithArgs(installComment: string): string[] {\n const sudo = this.determineSudoCommand()\n const command = [sudo]\n if (/kdesudo/i.test(sudo)) {\n command.push(\"--comment\", installComment)\n command.push(\"-c\")\n } else if (/gksudo/i.test(sudo)) {\n command.push(\"--message\", installComment)\n } else if (/pkexec/i.test(sudo)) {\n command.push(\"--disable-internal-agent\")\n }\n return command\n }\n\n protected hasCommand(cmd: string): boolean {\n try {\n this.spawnSyncLog(`command`, [\"-v\", cmd])\n return true\n } catch {\n return false\n }\n }\n\n protected determineSudoCommand(): string {\n const sudos = [\"gksudo\", \"kdesudo\", \"pkexec\", \"beesu\"]\n for (const sudo of sudos) {\n if (this.hasCommand(sudo)) {\n return sudo\n }\n }\n return \"sudo\"\n }\n\n /**\n * Detects the package manager to use based on the available commands.\n * Allows overriding the default behavior by setting the ELECTRON_BUILDER_LINUX_PACKAGE_MANAGER environment variable.\n * If the environment variable is set, it will be used directly. (This is useful for testing each package manager logic path.)\n * Otherwise, it checks for the presence of the specified package manager commands in the order provided.\n * @param pms - An array of package manager commands to check for, in priority order.\n * @returns The detected package manager command or \"unknown\" if none are found.\n */\n protected detectPackageManager(pms: string[]): string {\n const pmOverride = process.env.ELECTRON_BUILDER_LINUX_PACKAGE_MANAGER?.trim()\n if (pmOverride) {\n return pmOverride\n }\n // Check for the package manager in the order of priority\n for (const pm of pms) {\n if (this.hasCommand(pm)) {\n return pm\n }\n }\n // return the first package manager in the list if none are found, this will throw upstream for proper logging\n this._logger.warn(`No package manager found in the list: ${pms.join(\", \")}. Defaulting to the first one: ${pms[0]}`)\n return pms[0]\n }\n}\n", "import { AllPublishOptions } from \"builder-util-runtime\"\nimport { AppAdapter } from \"./AppAdapter\"\nimport { DownloadUpdateOptions } from \"./AppUpdater\"\nimport { InstallOptions } from \"./BaseUpdater\"\nimport { findFile } from \"./providers/Provider\"\nimport { DOWNLOAD_PROGRESS, Logger } from \"./types\"\nimport { LinuxUpdater } from \"./LinuxUpdater\"\n\nexport class DebUpdater extends LinuxUpdater {\n constructor(options?: AllPublishOptions | null, app?: AppAdapter) {\n super(options, app)\n }\n\n /*** @private */\n protected doDownloadUpdate(downloadUpdateOptions: DownloadUpdateOptions): Promise<Array<string>> {\n const provider = downloadUpdateOptions.updateInfoAndProvider.provider\n const fileInfo = findFile(provider.resolveFiles(downloadUpdateOptions.updateInfoAndProvider.info), \"deb\", [\"AppImage\", \"rpm\", \"pacman\"])!\n return this.executeDownload({\n fileExtension: \"deb\",\n fileInfo,\n downloadUpdateOptions,\n task: async (updateFile, downloadOptions) => {\n if (this.listenerCount(DOWNLOAD_PROGRESS) > 0) {\n downloadOptions.onProgress = it => this.emit(DOWNLOAD_PROGRESS, it)\n }\n await this.httpExecutor.download(fileInfo.url, updateFile, downloadOptions)\n },\n })\n }\n\n protected doInstall(options: InstallOptions): boolean {\n const installerPath = this.installerPath\n if (installerPath == null) {\n this.dispatchError(new Error(\"No update filepath provided, can't quit and install\"))\n return false\n }\n if (!this.hasCommand(\"dpkg\") && !this.hasCommand(\"apt\")) {\n this.dispatchError(new Error(\"Neither dpkg nor apt command found. Cannot install .deb package.\"))\n return false\n }\n const priorityList = [\"dpkg\", \"apt\"]\n const packageManager = this.detectPackageManager(priorityList)\n try {\n DebUpdater.installWithCommandRunner(packageManager as any, installerPath, this.runCommandWithSudoIfNeeded.bind(this), this._logger)\n } catch (error: any) {\n this.dispatchError(error)\n return false\n }\n if (options.isForceRunAfter) {\n this.app.relaunch()\n }\n return true\n }\n\n static installWithCommandRunner(packageManager: \"dpkg\" | \"apt\", installerPath: string, commandRunner: (commandWithArgs: string[]) => void, logger: Logger) {\n if (packageManager === \"dpkg\") {\n try {\n // Primary: Install unsigned .deb directly with dpkg\n commandRunner([\"dpkg\", \"-i\", installerPath])\n } catch (error: any) {\n // Handle missing dependencies via apt-get\n logger.warn(error.message ?? error)\n logger.warn(\"dpkg installation failed, trying to fix broken dependencies with apt-get\")\n commandRunner([\"apt-get\", \"install\", \"-f\", \"-y\"])\n }\n } else if (packageManager === \"apt\") {\n // Fallback: Use apt for direct install (less safe for unsigned .deb)\n logger.warn(\"Using apt to install a local .deb. This may fail for unsigned packages unless properly configured.\")\n commandRunner([\n \"apt\",\n \"install\",\n \"-y\",\n \"--allow-unauthenticated\", // needed for unsigned .debs\n \"--allow-downgrades\", // allow lower version installs\n \"--allow-change-held-packages\",\n installerPath,\n ])\n } else {\n throw new Error(`Package manager ${packageManager} not supported`)\n }\n }\n}\n", "import { AllPublishOptions } from \"builder-util-runtime\"\nimport { AppAdapter } from \"./AppAdapter\"\nimport { DownloadUpdateOptions } from \"./AppUpdater\"\nimport { InstallOptions } from \"./BaseUpdater\"\nimport { DOWNLOAD_PROGRESS, Logger } from \"./types\"\nimport { findFile } from \"./providers/Provider\"\nimport { LinuxUpdater } from \"./LinuxUpdater\"\n\nexport class PacmanUpdater extends LinuxUpdater {\n constructor(options?: AllPublishOptions | null, app?: AppAdapter) {\n super(options, app)\n }\n\n /*** @private */\n protected doDownloadUpdate(downloadUpdateOptions: DownloadUpdateOptions): Promise<Array<string>> {\n const provider = downloadUpdateOptions.updateInfoAndProvider.provider\n const fileInfo = findFile(provider.resolveFiles(downloadUpdateOptions.updateInfoAndProvider.info), \"pacman\", [\"AppImage\", \"deb\", \"rpm\"])!\n return this.executeDownload({\n fileExtension: \"pacman\",\n fileInfo,\n downloadUpdateOptions,\n task: async (updateFile, downloadOptions) => {\n if (this.listenerCount(DOWNLOAD_PROGRESS) > 0) {\n downloadOptions.onProgress = it => this.emit(DOWNLOAD_PROGRESS, it)\n }\n await this.httpExecutor.download(fileInfo.url, updateFile, downloadOptions)\n },\n })\n }\n\n protected doInstall(options: InstallOptions): boolean {\n const installerPath = this.installerPath\n if (installerPath == null) {\n this.dispatchError(new Error(\"No update filepath provided, can't quit and install\"))\n return false\n }\n try {\n PacmanUpdater.installWithCommandRunner(installerPath, this.runCommandWithSudoIfNeeded.bind(this), this._logger)\n } catch (error: any) {\n this.dispatchError(error)\n return false\n }\n if (options.isForceRunAfter) {\n this.app.relaunch() // note: `app` is undefined in tests since vite doesn't run in electron\n }\n return true\n }\n\n static installWithCommandRunner(installerPath: string, commandRunner: (commandWithArgs: string[]) => void, logger: Logger) {\n try {\n commandRunner([\"pacman\", \"-U\", \"--noconfirm\", installerPath])\n } catch (error: any) {\n logger.warn(error.message ?? error)\n logger.warn(\"pacman installation failed, attempting to update package database and retry\")\n\n try {\n // Update package database (not a full upgrade, just sync)\n commandRunner([\"pacman\", \"-Sy\", \"--noconfirm\"])\n // Retry installation\n commandRunner([\"pacman\", \"-U\", \"--noconfirm\", installerPath])\n } catch (retryError: any) {\n logger.error(\"Retry after pacman -Sy failed\")\n throw retryError\n }\n }\n }\n}\n", "import { AllPublishOptions } from \"builder-util-runtime\"\nimport { AppAdapter } from \"./AppAdapter\"\nimport { DownloadUpdateOptions } from \"./AppUpdater\"\nimport { InstallOptions } from \"./BaseUpdater\"\nimport { DOWNLOAD_PROGRESS, Logger } from \"./types\"\nimport { findFile } from \"./providers/Provider\"\nimport { LinuxUpdater } from \"./LinuxUpdater\"\n\nexport class RpmUpdater extends LinuxUpdater {\n constructor(options?: AllPublishOptions | null, app?: AppAdapter) {\n super(options, app)\n }\n\n /*** @private */\n protected doDownloadUpdate(downloadUpdateOptions: DownloadUpdateOptions): Promise<Array<string>> {\n const provider = downloadUpdateOptions.updateInfoAndProvider.provider\n const fileInfo = findFile(provider.resolveFiles(downloadUpdateOptions.updateInfoAndProvider.info), \"rpm\", [\"AppImage\", \"deb\", \"pacman\"])!\n return this.executeDownload({\n fileExtension: \"rpm\",\n fileInfo,\n downloadUpdateOptions,\n task: async (updateFile, downloadOptions) => {\n if (this.listenerCount(DOWNLOAD_PROGRESS) > 0) {\n downloadOptions.onProgress = it => this.emit(DOWNLOAD_PROGRESS, it)\n }\n await this.httpExecutor.download(fileInfo.url, updateFile, downloadOptions)\n },\n })\n }\n\n protected doInstall(options: InstallOptions): boolean {\n const installerPath = this.installerPath\n if (installerPath == null) {\n this.dispatchError(new Error(\"No update filepath provided, can't quit and install\"))\n return false\n }\n\n const priorityList = [\"zypper\", \"dnf\", \"yum\", \"rpm\"]\n const packageManager = this.detectPackageManager(priorityList)\n try {\n RpmUpdater.installWithCommandRunner(packageManager as any, installerPath, this.runCommandWithSudoIfNeeded.bind(this), this._logger)\n } catch (error: any) {\n this.dispatchError(error)\n return false\n }\n if (options.isForceRunAfter) {\n this.app.relaunch()\n }\n return true\n }\n\n static installWithCommandRunner(packageManager: \"zypper\" | \"dnf\" | \"yum\" | \"rpm\", installerPath: string, commandRunner: (commandWithArgs: string[]) => void, logger: Logger) {\n if (packageManager === \"zypper\") {\n return commandRunner([\"zypper\", \"--non-interactive\", \"--no-refresh\", \"install\", \"--allow-unsigned-rpm\", \"-f\", installerPath])\n }\n if (packageManager === \"dnf\") {\n return commandRunner([\"dnf\", \"install\", \"--nogpgcheck\", \"-y\", installerPath])\n }\n if (packageManager === \"yum\") {\n return commandRunner([\"yum\", \"install\", \"--nogpgcheck\", \"-y\", installerPath])\n }\n if (packageManager === \"rpm\") {\n logger.warn(\"Installing with rpm only (no dependency resolution).\")\n return commandRunner([\"rpm\", \"-Uvh\", \"--replacepkgs\", \"--replacefiles\", \"--nodeps\", installerPath])\n }\n throw new Error(`Package manager ${packageManager} not supported`)\n }\n}\n", "import { AllPublishOptions, newError, safeStringifyJson } from \"builder-util-runtime\"\nimport { pathExistsSync, stat, copyFile } from \"fs-extra\"\nimport { createReadStream } from \"fs\"\nimport * as path from \"path\"\nimport { createServer, IncomingMessage, Server, ServerResponse } from \"http\"\nimport { AppAdapter } from \"./AppAdapter\"\nimport { AppUpdater, DownloadUpdateOptions } from \"./AppUpdater\"\nimport { ResolvedUpdateFileInfo } from \"./main\"\nimport { UpdateDownloadedEvent } from \"./types\"\nimport { findFile } from \"./providers/Provider\"\nimport AutoUpdater = Electron.AutoUpdater\nimport { execFileSync } from \"child_process\"\nimport { randomBytes } from \"crypto\"\n\nexport class MacUpdater extends AppUpdater {\n private readonly nativeUpdater: AutoUpdater = require(\"electron\").autoUpdater\n\n private squirrelDownloadedUpdate = false\n\n private server?: Server\n\n constructor(options?: AllPublishOptions, app?: AppAdapter) {\n super(options, app)\n\n this.nativeUpdater.on(\"error\", it => {\n this._logger.warn(it)\n this.emit(\"error\", it)\n })\n this.nativeUpdater.on(\"update-downloaded\", () => {\n this.squirrelDownloadedUpdate = true\n this.debug(\"nativeUpdater.update-downloaded\")\n })\n }\n\n private debug(message: string): void {\n if (this._logger.debug != null) {\n this._logger.debug(message)\n }\n }\n\n private closeServerIfExists() {\n if (this.server) {\n this.debug(\"Closing proxy server\")\n this.server.close(err => {\n if (err) {\n this.debug(\"proxy server wasn't already open, probably attempted closing again as a safety check before quit\")\n }\n })\n }\n }\n\n protected async doDownloadUpdate(downloadUpdateOptions: DownloadUpdateOptions): Promise<Array<string>> {\n let files = downloadUpdateOptions.updateInfoAndProvider.provider.resolveFiles(downloadUpdateOptions.updateInfoAndProvider.info)\n\n const log = this._logger\n\n // detect if we are running inside Rosetta emulation\n const sysctlRosettaInfoKey = \"sysctl.proc_translated\"\n let isRosetta = false\n try {\n this.debug(\"Checking for macOS Rosetta environment\")\n const result = execFileSync(\"sysctl\", [sysctlRosettaInfoKey], { encoding: \"utf8\" })\n isRosetta = result.includes(`${sysctlRosettaInfoKey}: 1`)\n log.info(`Checked for macOS Rosetta environment (isRosetta=${isRosetta})`)\n } catch (e: any) {\n log.warn(`sysctl shell command to check for macOS Rosetta environment failed: ${e}`)\n }\n\n let isArm64Mac = false\n try {\n this.debug(\"Checking for arm64 in uname\")\n const result = execFileSync(\"uname\", [\"-a\"], { encoding: \"utf8\" })\n const isArm = result.includes(\"ARM\")\n log.info(`Checked 'uname -a': arm64=${isArm}`)\n isArm64Mac = isArm64Mac || isArm\n } catch (e: any) {\n log.warn(`uname shell command to check for arm64 failed: ${e}`)\n }\n\n isArm64Mac = isArm64Mac || process.arch === \"arm64\" || isRosetta\n\n // allow arm64 macs to install universal or rosetta2(x64) - https://github.com/electron-userland/electron-builder/pull/5524\n const isArm64 = (file: ResolvedUpdateFileInfo) => file.url.pathname.includes(\"arm64\") || file.info.url?.includes(\"arm64\")\n if (isArm64Mac && files.some(isArm64)) {\n files = files.filter(file => isArm64Mac === isArm64(file))\n } else {\n files = files.filter(file => !isArm64(file))\n }\n\n const zipFileInfo = findFile(files, \"zip\", [\"pkg\", \"dmg\"])\n\n if (zipFileInfo == null) {\n throw newError(`ZIP file not provided: ${safeStringifyJson(files)}`, \"ERR_UPDATER_ZIP_FILE_NOT_FOUND\")\n }\n\n const provider = downloadUpdateOptions.updateInfoAndProvider.provider\n const CURRENT_MAC_APP_ZIP_FILE_NAME = \"update.zip\"\n\n return this.executeDownload({\n fileExtension: \"zip\",\n fileInfo: zipFileInfo,\n downloadUpdateOptions,\n task: async (destinationFile, downloadOptions) => {\n const cachedUpdateFilePath = path.join(this.downloadedUpdateHelper!.cacheDir, CURRENT_MAC_APP_ZIP_FILE_NAME)\n const canDifferentialDownload = () => {\n if (!pathExistsSync(cachedUpdateFilePath)) {\n log.info(\"Unable to locate previous update.zip for differential download (is this first install?), falling back to full download\")\n return false\n }\n return !downloadUpdateOptions.disableDifferentialDownload\n }\n let differentialDownloadFailed = true\n if (canDifferentialDownload()) {\n differentialDownloadFailed = await this.differentialDownloadInstaller(zipFileInfo, downloadUpdateOptions, destinationFile, provider, CURRENT_MAC_APP_ZIP_FILE_NAME)\n }\n\n if (differentialDownloadFailed) {\n await this.httpExecutor.download(zipFileInfo.url, destinationFile, downloadOptions)\n }\n },\n done: async event => {\n if (!downloadUpdateOptions.disableDifferentialDownload) {\n try {\n const cachedUpdateFilePath = path.join(this.downloadedUpdateHelper!.cacheDir, CURRENT_MAC_APP_ZIP_FILE_NAME)\n await copyFile(event.downloadedFile, cachedUpdateFilePath)\n } catch (error: any) {\n this._logger.warn(`Unable to copy file for caching for future differential downloads: ${error.message}`)\n }\n }\n return this.updateDownloaded(zipFileInfo, event)\n },\n })\n }\n\n private async updateDownloaded(zipFileInfo: ResolvedUpdateFileInfo, event: UpdateDownloadedEvent): Promise<Array<string>> {\n const downloadedFile = event.downloadedFile\n const updateFileSize = zipFileInfo.info.size ?? (await stat(downloadedFile)).size\n\n const log = this._logger\n const logContext = `fileToProxy=${zipFileInfo.url.href}`\n this.closeServerIfExists()\n this.debug(`Creating proxy server for native Squirrel.Mac (${logContext})`)\n this.server = createServer()\n this.debug(`Proxy server for native Squirrel.Mac is created (${logContext})`)\n this.server.on(\"close\", () => {\n log.info(`Proxy server for native Squirrel.Mac is closed (${logContext})`)\n })\n\n // must be called after server is listening, otherwise address is null\n const getServerUrl = (s: Server): string => {\n const address = s.address()\n if (typeof address === \"string\") {\n return address\n }\n return `http://127.0.0.1:${address?.port}`\n }\n\n return await new Promise<Array<string>>((resolve, reject) => {\n const pass = randomBytes(64).toString(\"base64\").replace(/\\//g, \"_\").replace(/\\+/g, \"-\")\n const authInfo = Buffer.from(`autoupdater:${pass}`, \"ascii\")\n\n // insecure random is ok\n const fileUrl = `/${randomBytes(64).toString(\"hex\")}.zip`\n this.server!.on(\"request\", (request: IncomingMessage, response: ServerResponse) => {\n const requestUrl = request.url!\n log.info(`${requestUrl} requested`)\n if (requestUrl === \"/\") {\n // check for basic auth header\n if (!request.headers.authorization || request.headers.authorization.indexOf(\"Basic \") === -1) {\n response.statusCode = 401\n response.statusMessage = \"Invalid Authentication Credentials\"\n response.end()\n log.warn(\"No authenthication info\")\n return\n }\n\n // verify auth credentials\n const base64Credentials = request.headers.authorization.split(\" \")[1]\n const credentials = Buffer.from(base64Credentials, \"base64\").toString(\"ascii\")\n const [username, password] = credentials.split(\":\")\n if (username !== \"autoupdater\" || password !== pass) {\n response.statusCode = 401\n response.statusMessage = \"Invalid Authentication Credentials\"\n response.end()\n log.warn(\"Invalid authenthication credentials\")\n return\n }\n\n const data = Buffer.from(`{ \"url\": \"${getServerUrl(this.server!)}${fileUrl}\" }`)\n response.writeHead(200, { \"Content-Type\": \"application/json\", \"Content-Length\": data.length })\n response.end(data)\n return\n }\n\n if (!requestUrl.startsWith(fileUrl)) {\n log.warn(`${requestUrl} requested, but not supported`)\n response.writeHead(404)\n response.end()\n return\n }\n\n log.info(`${fileUrl} requested by Squirrel.Mac, pipe ${downloadedFile}`)\n\n let errorOccurred = false\n response.on(\"finish\", () => {\n if (!errorOccurred) {\n this.nativeUpdater.removeListener(\"error\", reject)\n resolve([])\n }\n })\n\n const readStream = createReadStream(downloadedFile)\n readStream.on(\"error\", error => {\n try {\n response.end()\n } catch (e: any) {\n log.warn(`cannot end response: ${e}`)\n }\n errorOccurred = true\n this.nativeUpdater.removeListener(\"error\", reject)\n reject(new Error(`Cannot pipe \"${downloadedFile}\": ${error}`))\n })\n\n response.writeHead(200, {\n \"Content-Type\": \"application/zip\",\n \"Content-Length\": updateFileSize,\n })\n readStream.pipe(response)\n })\n\n this.debug(`Proxy server for native Squirrel.Mac is starting to listen (${logContext})`)\n\n this.server!.listen(0, \"127.0.0.1\", () => {\n this.debug(`Proxy server for native Squirrel.Mac is listening (address=${getServerUrl(this.server!)}, ${logContext})`)\n this.nativeUpdater.setFeedURL({\n url: getServerUrl(this.server!),\n headers: {\n \"Cache-Control\": \"no-cache\",\n Authorization: `Basic ${authInfo.toString(\"base64\")}`,\n },\n })\n\n // The update has been downloaded and is ready to be served to Squirrel\n this.dispatchUpdateDownloaded(event)\n\n if (this.autoInstallOnAppQuit) {\n this.nativeUpdater.once(\"error\", reject)\n // This will trigger fetching and installing the file on Squirrel side\n this.nativeUpdater.checkForUpdates()\n } else {\n resolve([])\n }\n })\n })\n }\n\n private handleUpdateDownloaded() {\n if (this.autoRunAppAfterInstall) {\n this.nativeUpdater.quitAndInstall()\n } else {\n this.app.quit()\n }\n this.closeServerIfExists()\n }\n\n quitAndInstall(): void {\n if (this.squirrelDownloadedUpdate) {\n // update already fetched by Squirrel, it's ready to install\n this.handleUpdateDownloaded()\n } else {\n // Quit and install as soon as Squirrel get the update\n this.nativeUpdater.on(\"update-downloaded\", () => this.handleUpdateDownloaded())\n\n if (!this.autoInstallOnAppQuit) {\n /**\n * If this was not `true` previously then MacUpdater.doDownloadUpdate()\n * would not actually initiate the downloading by electron's autoUpdater\n */\n this.nativeUpdater.checkForUpdates()\n }\n }\n }\n}\n", "import { parseDn } from \"builder-util-runtime\"\nimport { execFile, execFileSync, ExecFileOptions } from \"child_process\"\nimport * as os from \"os\"\nimport { Logger } from \"./types\"\nimport * as path from \"path\"\n\nfunction preparePowerShellExec(command: string, timeout?: number) {\n // https://github.com/electron-userland/electron-builder/issues/2421\n // https://github.com/electron-userland/electron-builder/issues/2535\n // Resetting PSModulePath is necessary https://github.com/electron-userland/electron-builder/issues/7127\n // semicolon wont terminate the set command and run chcp thus leading to verification errors on certificats with special chars like german umlauts, so rather\n // join commands using & https://github.com/electron-userland/electron-builder/issues/8162\n const executable = `set \"PSModulePath=\" & chcp 65001 >NUL & powershell.exe`\n const args = [\"-NoProfile\", \"-NonInteractive\", \"-InputFormat\", \"None\", \"-Command\", command]\n const options: ExecFileOptions = {\n shell: true,\n timeout,\n }\n return [executable, args, options] as const\n}\n\n// $certificateInfo = (Get-AuthenticodeSignature 'xxx\\yyy.exe'\n// | where {$_.Status.Equals([System.Management.Automation.SignatureStatus]::Valid) -and $_.SignerCertificate.Subject.Contains(\"CN=siemens.com\")})\n// | Out-String ; if ($certificateInfo) { exit 0 } else { exit 1 }\nexport function verifySignature(publisherNames: Array<string>, unescapedTempUpdateFile: string, logger: Logger): Promise<string | null> {\n return new Promise<string | null>((resolve, reject) => {\n // Escape quotes and backticks in filenames to prevent user from breaking the\n // arguments and perform a remote command injection.\n //\n // Consider example powershell command:\n // ```powershell\n // Get-AuthenticodeSignature 'C:\\\\path\\\\my-bad-';calc;'filename.exe'\n // ```\n // The above would work expected and find the file name, however, it will also execute `;calc;`\n // command and start the calculator app.\n //\n // From Powershell quoting rules:\n // https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_quoting_rules?view=powershell-7\n // * Double quotes `\"` are treated literally within single-quoted strings;\n // * Single quotes can be escaped by doubling them: 'don''t' -> don't;\n //\n // Also note that at this point the file has already been written to the disk, thus we are\n // guaranteed that the path will not contain any illegal characters like <>:\"/\\|?*\n // https://docs.microsoft.com/en-us/windows/win32/fileio/naming-a-file\n const tempUpdateFile = unescapedTempUpdateFile.replace(/'/g, \"''\")\n logger.info(`Verifying signature ${tempUpdateFile}`)\n\n execFile(...preparePowerShellExec(`\"Get-AuthenticodeSignature -LiteralPath '${tempUpdateFile}' | ConvertTo-Json -Compress\"`, 20 * 1000), (error, stdout, stderr) => {\n try {\n if (error != null || stderr) {\n handleError(logger, error, stderr, reject)\n resolve(null)\n return\n }\n const data = parseOut(stdout)\n if (data.Status === 0) {\n try {\n const normlaizedUpdateFilePath = path.normalize(data.Path)\n const normalizedTempUpdateFile = path.normalize(unescapedTempUpdateFile)\n logger.info(`LiteralPath: ${normlaizedUpdateFilePath}. Update Path: ${normalizedTempUpdateFile}`)\n if (normlaizedUpdateFilePath !== normalizedTempUpdateFile) {\n handleError(logger, new Error(`LiteralPath of ${normlaizedUpdateFilePath} is different than ${normalizedTempUpdateFile}`), stderr, reject)\n resolve(null)\n return\n }\n } catch (error: any) {\n logger.warn(`Unable to verify LiteralPath of update asset due to missing data.Path. Skipping this step of validation. Message: ${error.message ?? error.stack}`)\n }\n const subject = parseDn(data.SignerCertificate.Subject)\n let match = false\n for (const name of publisherNames) {\n const dn = parseDn(name)\n if (dn.size) {\n // if we have a full DN, compare all values\n const allKeys = Array.from(dn.keys())\n match = allKeys.every(key => {\n return dn.get(key) === subject.get(key)\n })\n } else if (name === subject.get(\"CN\")!) {\n logger.warn(`Signature validated using only CN ${name}. Please add your full Distinguished Name (DN) to publisherNames configuration`)\n match = true\n }\n if (match) {\n resolve(null)\n return\n }\n }\n }\n\n const result = `publisherNames: ${publisherNames.join(\" | \")}, raw info: ` + JSON.stringify(data, (name, value) => (name === \"RawData\" ? undefined : value), 2)\n logger.warn(`Sign verification failed, installer signed with incorrect certificate: ${result}`)\n resolve(result)\n } catch (e: any) {\n handleError(logger, e, null, reject)\n resolve(null)\n return\n }\n })\n })\n}\n\nfunction parseOut(out: string): any {\n const data = JSON.parse(out)\n delete data.PrivateKey\n delete data.IsOSBinary\n delete data.SignatureType\n const signerCertificate = data.SignerCertificate\n if (signerCertificate != null) {\n delete signerCertificate.Archived\n delete signerCertificate.Extensions\n delete signerCertificate.Handle\n delete signerCertificate.HasPrivateKey\n // duplicates data.SignerCertificate (contains RawData)\n delete signerCertificate.SubjectName\n }\n return data\n}\n\nfunction handleError(logger: Logger, error: Error | null, stderr: string | null, reject: (reason: any) => void): void {\n if (isOldWin6()) {\n logger.warn(\n `Cannot execute Get-AuthenticodeSignature: ${error || stderr}. Ignoring signature validation due to unsupported powershell version. Please upgrade to powershell 3 or higher.`\n )\n return\n }\n\n try {\n execFileSync(...preparePowerShellExec(\"ConvertTo-Json test\", 10 * 1000))\n } catch (testError: any) {\n logger.warn(\n `Cannot execute ConvertTo-Json: ${testError.message}. Ignoring signature validation due to unsupported powershell version. Please upgrade to powershell 3 or higher.`\n )\n return\n }\n\n if (error != null) {\n reject(error)\n }\n\n if (stderr) {\n reject(new Error(`Cannot execute Get-AuthenticodeSignature, stderr: ${stderr}. Failing signature validation due to unknown stderr.`))\n }\n}\n\nfunction isOldWin6(): boolean {\n const winVersion = os.release()\n return winVersion.startsWith(\"6.\") && !winVersion.startsWith(\"6.3\")\n}\n", "import { AllPublishOptions, newError, PackageFileInfo, CURRENT_APP_INSTALLER_FILE_NAME, CURRENT_APP_PACKAGE_FILE_NAME } from \"builder-util-runtime\"\nimport * as path from \"path\"\nimport { AppAdapter } from \"./AppAdapter\"\nimport { DownloadUpdateOptions } from \"./AppUpdater\"\nimport { BaseUpdater, InstallOptions } from \"./BaseUpdater\"\nimport { DifferentialDownloaderOptions } from \"./differentialDownloader/DifferentialDownloader\"\nimport { FileWithEmbeddedBlockMapDifferentialDownloader } from \"./differentialDownloader/FileWithEmbeddedBlockMapDifferentialDownloader\"\nimport { DOWNLOAD_PROGRESS } from \"./types\"\nimport { VerifyUpdateCodeSignature } from \"./main\"\nimport { findFile, Provider } from \"./providers/Provider\"\nimport { unlink } from \"fs-extra\"\nimport { verifySignature } from \"./windowsExecutableCodeSignatureVerifier\"\nimport { URL } from \"url\"\n\nexport class NsisUpdater extends BaseUpdater {\n /**\n * Specify custom install directory path\n *\n */\n installDirectory?: string\n\n constructor(options?: AllPublishOptions | null, app?: AppAdapter) {\n super(options, app)\n }\n\n protected _verifyUpdateCodeSignature: VerifyUpdateCodeSignature = (publisherNames: Array<string>, unescapedTempUpdateFile: string) =>\n verifySignature(publisherNames, unescapedTempUpdateFile, this._logger)\n\n /**\n * The verifyUpdateCodeSignature. You can pass [win-verify-signature](https://github.com/beyondkmp/win-verify-trust) or another custom verify function: ` (publisherName: string[], path: string) => Promise<string | null>`.\n * The default verify function uses [windowsExecutableCodeSignatureVerifier](https://github.com/electron-userland/electron-builder/blob/master/packages/electron-updater/src/windowsExecutableCodeSignatureVerifier.ts)\n */\n get verifyUpdateCodeSignature(): VerifyUpdateCodeSignature {\n return this._verifyUpdateCodeSignature\n }\n\n set verifyUpdateCodeSignature(value: VerifyUpdateCodeSignature) {\n if (value) {\n this._verifyUpdateCodeSignature = value\n }\n }\n\n /*** @private */\n protected doDownloadUpdate(downloadUpdateOptions: DownloadUpdateOptions): Promise<Array<string>> {\n const provider = downloadUpdateOptions.updateInfoAndProvider.provider\n const fileInfo = findFile(provider.resolveFiles(downloadUpdateOptions.updateInfoAndProvider.info), \"exe\")!\n return this.executeDownload({\n fileExtension: \"exe\",\n downloadUpdateOptions,\n fileInfo,\n task: async (destinationFile, downloadOptions, packageFile, removeTempDirIfAny) => {\n const packageInfo = fileInfo.packageInfo\n const isWebInstaller = packageInfo != null && packageFile != null\n if (isWebInstaller && downloadUpdateOptions.disableWebInstaller) {\n throw newError(\n `Unable to download new version ${downloadUpdateOptions.updateInfoAndProvider.info.version}. Web Installers are disabled`,\n \"ERR_UPDATER_WEB_INSTALLER_DISABLED\"\n )\n }\n if (!isWebInstaller && !downloadUpdateOptions.disableWebInstaller) {\n this._logger.warn(\n \"disableWebInstaller is set to false, you should set it to true if you do not plan on using a web installer. This will default to true in a future version.\"\n )\n }\n if (\n isWebInstaller ||\n downloadUpdateOptions.disableDifferentialDownload ||\n (await this.differentialDownloadInstaller(fileInfo, downloadUpdateOptions, destinationFile, provider, CURRENT_APP_INSTALLER_FILE_NAME))\n ) {\n await this.httpExecutor.download(fileInfo.url, destinationFile, downloadOptions)\n }\n\n const signatureVerificationStatus = await this.verifySignature(destinationFile)\n if (signatureVerificationStatus != null) {\n await removeTempDirIfAny()\n // noinspection ThrowInsideFinallyBlockJS\n throw newError(\n `New version ${downloadUpdateOptions.updateInfoAndProvider.info.version} is not signed by the application owner: ${signatureVerificationStatus}`,\n \"ERR_UPDATER_INVALID_SIGNATURE\"\n )\n }\n\n if (isWebInstaller) {\n if (await this.differentialDownloadWebPackage(downloadUpdateOptions, packageInfo, packageFile, provider)) {\n try {\n await this.httpExecutor.download(new URL(packageInfo.path), packageFile, {\n headers: downloadUpdateOptions.requestHeaders,\n cancellationToken: downloadUpdateOptions.cancellationToken,\n sha512: packageInfo.sha512,\n })\n } catch (e: any) {\n try {\n await unlink(packageFile)\n } catch (_ignored) {\n // ignore\n }\n\n throw e\n }\n }\n }\n },\n })\n }\n\n // $certificateInfo = (Get-AuthenticodeSignature 'xxx\\yyy.exe'\n // | where {$_.Status.Equals([System.Management.Automation.SignatureStatus]::Valid) -and $_.SignerCertificate.Subject.Contains(\"CN=siemens.com\")})\n // | Out-String ; if ($certificateInfo) { exit 0 } else { exit 1 }\n private async verifySignature(tempUpdateFile: string): Promise<string | null> {\n let publisherName: Array<string> | string | null\n try {\n publisherName = (await this.configOnDisk.value).publisherName\n if (publisherName == null) {\n return null\n }\n } catch (e: any) {\n if (e.code === \"ENOENT\") {\n // no app-update.yml\n return null\n }\n throw e\n }\n return await this._verifyUpdateCodeSignature(Array.isArray(publisherName) ? publisherName : [publisherName], tempUpdateFile)\n }\n\n protected doInstall(options: InstallOptions): boolean {\n const installerPath = this.installerPath\n if (installerPath == null) {\n this.dispatchError(new Error(\"No update filepath provided, can't quit and install\"))\n return false\n }\n\n const args = [\"--updated\"]\n if (options.isSilent) {\n args.push(\"/S\")\n }\n\n if (options.isForceRunAfter) {\n args.push(\"--force-run\")\n }\n\n if (this.installDirectory) {\n // maybe check if folder exists\n args.push(`/D=${this.installDirectory}`)\n }\n\n const packagePath = this.downloadedUpdateHelper == null ? null : this.downloadedUpdateHelper.packageFile\n if (packagePath != null) {\n // only = form is supported\n args.push(`--package-file=${packagePath}`)\n }\n\n const callUsingElevation = (): void => {\n this.spawnLog(path.join(process.resourcesPath, \"elevate.exe\"), [installerPath].concat(args)).catch(e => this.dispatchError(e))\n }\n\n if (options.isAdminRightsRequired) {\n this._logger.info(\"isAdminRightsRequired is set to true, run installer using elevate.exe\")\n callUsingElevation()\n return true\n }\n\n this.spawnLog(installerPath, args).catch((e: Error) => {\n // https://github.com/electron-userland/electron-builder/issues/1129\n // Node 8 sends errors: https://nodejs.org/dist/latest-v8.x/docs/api/errors.html#errors_common_system_errors\n const errorCode = (e as NodeJS.ErrnoException).code\n this._logger.info(\n `Cannot run installer: error code: ${errorCode}, error message: \"${e.message}\", will be executed again using elevate if EACCES, and will try to use electron.shell.openItem if ENOENT`\n )\n if (errorCode === \"UNKNOWN\" || errorCode === \"EACCES\") {\n callUsingElevation()\n } else if (errorCode === \"ENOENT\") {\n require(\"electron\")\n .shell.openPath(installerPath)\n .catch((err: Error) => this.dispatchError(err))\n } else {\n this.dispatchError(e)\n }\n })\n return true\n }\n\n private async differentialDownloadWebPackage(\n downloadUpdateOptions: DownloadUpdateOptions,\n packageInfo: PackageFileInfo,\n packagePath: string,\n provider: Provider<any>\n ): Promise<boolean> {\n if (packageInfo.blockMapSize == null) {\n return true\n }\n\n try {\n const downloadOptions: DifferentialDownloaderOptions = {\n newUrl: new URL(packageInfo.path),\n oldFile: path.join(this.downloadedUpdateHelper!.cacheDir, CURRENT_APP_PACKAGE_FILE_NAME),\n logger: this._logger,\n newFile: packagePath,\n requestHeaders: this.requestHeaders,\n isUseMultipleRangeRequest: provider.isUseMultipleRangeRequest,\n cancellationToken: downloadUpdateOptions.cancellationToken,\n }\n\n if (this.listenerCount(DOWNLOAD_PROGRESS) > 0) {\n downloadOptions.onProgress = it => this.emit(DOWNLOAD_PROGRESS, it)\n }\n\n await new FileWithEmbeddedBlockMapDifferentialDownloader(packageInfo, this.httpExecutor, downloadOptions).download()\n } catch (e: any) {\n this._logger.error(`Cannot download differentially, fallback to full download: ${e.stack || e}`)\n // during test (developer machine mac or linux) we must throw error\n return process.platform === \"win32\"\n }\n return false\n }\n}\n", "import { existsSync, readFileSync } from \"fs-extra\"\nimport * as path from \"path\"\nimport { AppUpdater } from \"./AppUpdater\"\nimport { UpdateInfo } from \"builder-util-runtime\"\n\nexport { BaseUpdater } from \"./BaseUpdater\"\nexport { AppUpdater, NoOpLogger } from \"./AppUpdater\"\nexport { Provider } from \"./providers/Provider\"\nexport { AppImageUpdater } from \"./AppImageUpdater\"\nexport { DebUpdater } from \"./DebUpdater\"\nexport { PacmanUpdater } from \"./PacmanUpdater\"\nexport { RpmUpdater } from \"./RpmUpdater\"\nexport { MacUpdater } from \"./MacUpdater\"\nexport { NsisUpdater } from \"./NsisUpdater\"\n\nexport * from \"./types\"\n\n// autoUpdater to mimic electron bundled autoUpdater\nlet _autoUpdater: any\n\n// required for jsdoc\nexport declare const autoUpdater: AppUpdater\n\nfunction doLoadAutoUpdater(): AppUpdater {\n // tslint:disable:prefer-conditional-expression\n if (process.platform === \"win32\") {\n _autoUpdater = new (require(\"./NsisUpdater\").NsisUpdater)()\n } else if (process.platform === \"darwin\") {\n _autoUpdater = new (require(\"./MacUpdater\").MacUpdater)()\n } else {\n _autoUpdater = new (require(\"./AppImageUpdater\").AppImageUpdater)()\n try {\n const identity = path.join(process.resourcesPath, \"package-type\")\n if (!existsSync(identity)) {\n return _autoUpdater\n }\n const fileType = readFileSync(identity).toString().trim()\n switch (fileType) {\n case \"deb\":\n _autoUpdater = new (require(\"./DebUpdater\").DebUpdater)()\n break\n case \"rpm\":\n _autoUpdater = new (require(\"./RpmUpdater\").RpmUpdater)()\n break\n case \"pacman\":\n _autoUpdater = new (require(\"./PacmanUpdater\").PacmanUpdater)()\n break\n default:\n break\n }\n } catch (error: any) {\n console.warn(\n \"Unable to detect 'package-type' for autoUpdater (rpm/deb/pacman support). If you'd like to expand support, please consider contributing to electron-builder\",\n error.message\n )\n }\n }\n return _autoUpdater\n}\n\nObject.defineProperty(exports, \"autoUpdater\", {\n enumerable: true,\n get: () => {\n return _autoUpdater || doLoadAutoUpdater()\n },\n})\n\n/**\n * return null if verify signature succeed\n * return error message if verify signature failed\n */\nexport type VerifyUpdateCodeSignature = (publisherName: string[], path: string) => Promise<string | null>\n\nexport type VerifyUpdateSupport = (updateInfo: UpdateInfo) => boolean | Promise<boolean>\n", "import { app, BrowserWindow, nativeImage, screen, Tray } from \"electron\";\nimport { join, resolve } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { setupDeepLinkHandler, registerDeepLinkProtocol } from \"./deep-link.js\";\nimport { registerIpcHandlers } from \"./ipc.js\";\nimport { buildAppMenu } from \"./menu.js\";\nimport {\n DEFAULT_WINDOW_STATE,\n loadDesktopLaunchMode,\n loadWindowState,\n saveDesktopLaunchMode,\n saveWindowState,\n setupAutoUpdater,\n triggerUpdateCheck,\n startUpdateCheckInterval,\n normalizeDesktopRemoteLaunch,\n buildRemoteShellHandoffUrl,\n clampWindowStateToVisibleDisplay,\n type DesktopLaunchMode,\n type NormalizedDesktopRemoteLaunch,\n type WindowState,\n} from \"./native.js\";\nimport { setupTray } from \"./tray.js\";\nimport { getRendererUrl, getRendererFilePath, isUrlRenderer } from \"./renderer.js\";\nimport { LocalRuntimeManager } from \"./local-runtime.js\";\nimport { readShellSettings, writeShellSettings } from \"./shell-settings.js\";\n\n// Re-export for backward compatibility\nexport { IS_DEVELOPMENT } from \"./renderer.js\";\nexport { DASHBOARD_URL } from \"./renderer.js\";\n\ninterface AppWithQuitFlag {\n isQuitting?: boolean;\n}\n\nfunction enableSourceMaps(): void {\n const processWithSourceMaps = process as NodeJS.Process & {\n setSourceMapsEnabled?: (enabled: boolean) => void;\n };\n processWithSourceMaps.setSourceMapsEnabled?.(true);\n}\n\nenableSourceMaps();\n\nlet mainWindow: BrowserWindow | null = null;\nlet tray: Tray | null = null;\nlet localRuntimeManager: LocalRuntimeManager | null = null;\nlet currentDesktopLaunchMode: DesktopLaunchMode = \"choose\";\nlet currentRemoteLaunch: NormalizedDesktopRemoteLaunch | null = null;\nlet localRuntimeStartupAttempted = false;\nlet stopUpdateCheckInterval: (() => void) | null = null;\n\nfunction getAppWithQuitFlag(): Electron.App & AppWithQuitFlag {\n return app as Electron.App & AppWithQuitFlag;\n}\n\nasync function startLocalRuntimeOnce(): Promise<void> {\n if (!localRuntimeManager || localRuntimeStartupAttempted) {\n return;\n }\n\n const status = localRuntimeManager.getStatus();\n if (status.source === \"embedded-local\" && status.state === \"running\") {\n localRuntimeStartupAttempted = true;\n return;\n }\n\n localRuntimeStartupAttempted = true;\n await localRuntimeManager.startLocal();\n}\n\nexport function getCurrentDesktopLaunchMode(): DesktopLaunchMode {\n return currentDesktopLaunchMode;\n}\n\nasync function resetLaunchModeAndReload(window: BrowserWindow): Promise<void> {\n try {\n const settings = await readShellSettings();\n settings.desktopMode = null;\n settings.hasCompletedModeSelection = false;\n await writeShellSettings(settings);\n await saveDesktopLaunchMode(\"choose\");\n } catch (error) {\n console.error(\"[desktop/main] Failed to reset shell settings\", error);\n }\n if (localRuntimeManager) {\n try {\n await localRuntimeManager.stopLocal();\n } catch (error) {\n console.error(\"[desktop/main] Failed to stop local runtime during reset\", error);\n }\n }\n currentDesktopLaunchMode = \"choose\";\n currentRemoteLaunch = null;\n localRuntimeStartupAttempted = false;\n\n // Force a clean reload to the renderer entrypoint without any cached\n // serverBaseUrl / shellMode query params so the gate re-prompts.\n try {\n if (isUrlRenderer()) {\n await window.loadURL(getRendererUrl());\n } else {\n await window.loadFile(getRendererFilePath());\n }\n } catch (error) {\n console.error(\"[desktop/main] reload failed\", error);\n }\n}\n\nexport function createMainWindow(state?: WindowState, launchTargetUrl?: string): BrowserWindow {\n const hasValidPosition = typeof state?.x === \"number\" && typeof state?.y === \"number\";\n\n const window = new BrowserWindow({\n width: state?.width ?? DEFAULT_WINDOW_STATE.width,\n height: state?.height ?? DEFAULT_WINDOW_STATE.height,\n ...(hasValidPosition ? { x: state.x, y: state.y } : {}),\n title: \"Fusion\",\n webPreferences: {\n preload: join(import.meta.dirname, \"preload.js\"),\n contextIsolation: true,\n nodeIntegration: false,\n },\n });\n\n if (launchTargetUrl) {\n void window.loadURL(launchTargetUrl);\n } else if (isUrlRenderer()) {\n void window.loadURL(getRendererUrl());\n } else {\n void window.loadFile(getRendererFilePath());\n }\n\n const showFallbackTimer = setTimeout(() => {\n window.show();\n window.focus();\n }, 2000);\n\n window.once(\"ready-to-show\", () => {\n clearTimeout(showFallbackTimer);\n window.show();\n window.focus();\n });\n\n window.on(\"close\", (event) => {\n saveWindowState(window);\n\n if (getAppWithQuitFlag().isQuitting) {\n return;\n }\n\n event.preventDefault();\n window.hide();\n });\n\n window.on(\"closed\", () => {\n mainWindow = null;\n });\n\n mainWindow = window;\n return window;\n}\n\n/**\n * Resolve the project root for the embedded local runtime.\n *\n * Must NOT be `process.cwd()`: when a packaged build is launched from a desktop\n * launcher or file manager (notably the Linux AppImage), cwd is `/` or the\n * read-only squashfs mount point, so creating `<cwd>/.fusion/fusion.db` fails\n * with EACCES/EROFS and the local runtime never starts (\"Couldn't start local\n * Fusion\"). Anchor to a stable, writable per-user location instead \u2014 the home\n * directory, so data lives in `~/.fusion` (consistent with the CLI). Honor\n * `FUSION_HOME` for power users who want their data elsewhere.\n */\nexport function resolveLocalRuntimeRoot(): string {\n const override = process.env.FUSION_HOME?.trim();\n if (override) {\n return resolve(override);\n }\n return app.getPath(\"home\");\n}\n\nexport async function initializeApp(): Promise<void> {\n const state = await loadWindowState();\n const rememberedLaunchMode = await loadDesktopLaunchMode();\n\n localRuntimeManager = new LocalRuntimeManager({ rootDir: resolveLocalRuntimeRoot() });\n currentDesktopLaunchMode = rememberedLaunchMode;\n currentRemoteLaunch = null;\n localRuntimeStartupAttempted = false;\n\n if (rememberedLaunchMode === \"remote\") {\n const shellSettings = await readShellSettings();\n const normalizedRemoteLaunch = normalizeDesktopRemoteLaunch(shellSettings);\n if (normalizedRemoteLaunch) {\n currentRemoteLaunch = normalizedRemoteLaunch;\n } else {\n currentDesktopLaunchMode = \"choose\";\n await saveDesktopLaunchMode(\"choose\");\n }\n }\n\n if (rememberedLaunchMode === \"local\") {\n try {\n await startLocalRuntimeOnce();\n } catch (error) {\n await localRuntimeManager.stopLocal();\n currentDesktopLaunchMode = \"choose\";\n localRuntimeStartupAttempted = false;\n await saveDesktopLaunchMode(\"choose\");\n console.error(\"[desktop/main] Failed to restore local mode; falling back to chooser\", error);\n }\n }\n\n if (currentDesktopLaunchMode === \"choose\" && process.env.FUSION_DESKTOP_MODE === \"local\") {\n await startLocalRuntimeOnce();\n currentDesktopLaunchMode = \"local\";\n }\n\n const windowState = state\n ? clampWindowStateToVisibleDisplay(\n state,\n typeof screen?.getAllDisplays === \"function\"\n ? screen.getAllDisplays().map((display) => ({ workArea: display.workArea }))\n : [],\n )\n : undefined;\n\n const createdWindow = createMainWindow(\n windowState,\n currentDesktopLaunchMode === \"remote\" && currentRemoteLaunch\n ? buildRemoteShellHandoffUrl(currentRemoteLaunch)\n : undefined,\n );\n\n buildAppMenu({\n mainWindow: createdWindow,\n appName: \"Fusion\",\n onChangeLaunchMode: async () => {\n await resetLaunchModeAndReload(createdWindow);\n },\n /*\n * FNXC:DesktopRuntimeMode 2026-06-21-02:04:\n * Menu-driven local/remote switching must only persist local mode after the embedded runtime starts successfully; shutdown stops the local server without rewriting the launch-mode preference.\n */\n onStartLocalRuntime: async () => {\n if (!localRuntimeManager) return;\n localRuntimeStartupAttempted = false;\n await startLocalRuntimeOnce();\n currentRemoteLaunch = null;\n currentDesktopLaunchMode = \"local\";\n await saveDesktopLaunchMode(\"local\");\n createdWindow.webContents.reload();\n },\n onStopLocalRuntime: async () => {\n await localRuntimeManager?.stopLocal();\n },\n onConnectRemoteServer: async () => {\n await resetLaunchModeAndReload(createdWindow);\n },\n onCheckForUpdates: async () => {\n await triggerUpdateCheck(createdWindow);\n },\n });\n\n tray = new Tray(nativeImage.createEmpty());\n setupTray(createdWindow, tray);\n\n registerIpcHandlers(createdWindow, tray, {\n onDesktopModeChange: async (mode) => {\n if (!localRuntimeManager) {\n return;\n }\n currentDesktopLaunchMode = mode;\n if (mode === \"local\") {\n currentRemoteLaunch = null;\n localRuntimeStartupAttempted = false;\n await startLocalRuntimeOnce();\n } else {\n localRuntimeStartupAttempted = false;\n await localRuntimeManager.stopLocal();\n const shellSettings = await readShellSettings();\n currentRemoteLaunch = normalizeDesktopRemoteLaunch({ ...shellSettings, desktopMode: \"remote\" });\n }\n await saveDesktopLaunchMode(mode);\n },\n onDesktopLaunchModeChange: async (mode) => {\n if (!localRuntimeManager) {\n return;\n }\n currentDesktopLaunchMode = mode;\n localRuntimeStartupAttempted = false;\n if (mode === \"local\") {\n currentRemoteLaunch = null;\n await startLocalRuntimeOnce();\n } else {\n await localRuntimeManager.stopLocal();\n const shellSettings = await readShellSettings();\n currentRemoteLaunch = normalizeDesktopRemoteLaunch({ ...shellSettings, desktopMode: \"remote\" });\n }\n await saveDesktopLaunchMode(mode);\n },\n getRuntimeStatus: () => localRuntimeManager?.getStatus() ?? { source: \"none\", state: \"stopped\" },\n startLocalRuntime: () => localRuntimeManager?.startLocal() ?? Promise.resolve({ source: \"none\", state: \"stopped\" }),\n stopLocalRuntime: () => localRuntimeManager?.stopLocal() ?? Promise.resolve({ source: \"none\", state: \"stopped\" }),\n getServerPort: () => localRuntimeManager?.getServerPort(),\n getDesktopLaunchMode: () => currentDesktopLaunchMode,\n getDesktopLaunchContext: () => currentRemoteLaunch,\n });\n registerDeepLinkProtocol();\n setupDeepLinkHandler(createdWindow);\n setupAutoUpdater(createdWindow);\n stopUpdateCheckInterval = startUpdateCheckInterval(createdWindow);\n\n if (windowState?.isMaximized === true) {\n createdWindow.maximize();\n }\n}\n\nexport function run(): void {\n const appWithQuitFlag = getAppWithQuitFlag();\n appWithQuitFlag.isQuitting = false;\n\n void app.whenReady().then(() => initializeApp());\n\n app.on(\"window-all-closed\", () => {\n if (process.platform !== \"darwin\") {\n app.quit();\n }\n });\n\n app.on(\"before-quit\", () => {\n appWithQuitFlag.isQuitting = true;\n\n if (stopUpdateCheckInterval) {\n stopUpdateCheckInterval();\n stopUpdateCheckInterval = null;\n }\n\n if (tray) {\n tray.destroy();\n tray = null;\n }\n\n if (localRuntimeManager) {\n void localRuntimeManager.stopLocal();\n }\n });\n\n app.on(\"activate\", () => {\n if (mainWindow === null) {\n const window = createMainWindow();\n window.show();\n return;\n }\n // The close handler hides the window instead of destroying it, so a\n // subsequent dock/Finder activate must explicitly show + focus it \u2014\n // otherwise the app appears to do nothing when relaunched.\n if (!mainWindow.isVisible()) {\n mainWindow.show();\n }\n mainWindow.focus();\n });\n}\n\nconst modulePath = fileURLToPath(import.meta.url);\nconst isElectronMain =\n (process as NodeJS.Process & { type?: string }).type === \"browser\";\nconst isDirectInvocation =\n !!process.argv[1] && resolve(process.argv[1]) === modulePath;\nif (isElectronMain || isDirectInvocation) {\n run();\n}\n", "import { app, BrowserWindow } from \"electron\";\n\nexport interface DeepLinkResult {\n type: \"task\" | \"project\" | \"unknown\";\n id: string;\n raw: string;\n}\n\nconst DEEP_LINK_EVENT = \"deep-link\";\nconst FUSION_SCHEME = \"fusion:\";\n\nexport function registerDeepLinkProtocol(): void {\n try {\n const isRegistered = app.setAsDefaultProtocolClient(\"fusion\");\n if (!isRegistered) {\n console.warn(\"[desktop/deep-link] Failed to register fusion:// protocol\");\n return;\n }\n\n console.log(\"[desktop/deep-link] Registered fusion:// protocol handler\");\n } catch (error) {\n console.error(\"[desktop/deep-link] Error while registering fusion:// protocol\", error);\n }\n}\n\nexport function parseDeepLink(rawUrl: string): DeepLinkResult | null {\n if (!rawUrl) {\n return null;\n }\n\n try {\n const parsedUrl = new URL(rawUrl);\n\n if (parsedUrl.protocol !== FUSION_SCHEME) {\n return null;\n }\n\n const type = parsedUrl.hostname;\n if (type !== \"task\" && type !== \"project\") {\n return null;\n }\n\n const pathSegments = parsedUrl.pathname\n .split(\"/\")\n .filter((segment) => segment.length > 0);\n\n const decodedId = pathSegments.length > 0 ? decodeURIComponent(pathSegments[0]) : \"\";\n\n return {\n type,\n id: decodedId,\n raw: rawUrl,\n };\n } catch {\n return null;\n }\n}\n\nexport function handleDeepLink(mainWindow: BrowserWindow, url: string): void {\n const parsed = parseDeepLink(url);\n\n if (!parsed || parsed.type === \"unknown\") {\n console.warn(`[desktop/deep-link] Ignoring unsupported deep link: ${url}`);\n return;\n }\n\n if (!mainWindow.isVisible()) {\n mainWindow.show();\n }\n\n if (mainWindow.isMinimized()) {\n mainWindow.restore();\n }\n\n mainWindow.focus();\n mainWindow.webContents.send(DEEP_LINK_EVENT, parsed);\n}\n\nexport function setupDeepLinkHandler(mainWindow: BrowserWindow): void {\n const hasLock = app.requestSingleInstanceLock();\n if (!hasLock) {\n app.quit();\n return;\n }\n\n app.on(\"open-url\", (event, url) => {\n event.preventDefault();\n handleDeepLink(mainWindow, url);\n });\n\n app.on(\"second-instance\", (_event, argv) => {\n const deepLink = argv.find((arg) => arg.startsWith(\"fusion://\"));\n if (!deepLink) {\n return;\n }\n\n handleDeepLink(mainWindow, deepLink);\n });\n}\n", "import { app, type BrowserWindow, ipcMain, type Tray } from \"electron\";\nimport {\n showExportSettingsDialog,\n showImportSettingsDialog,\n triggerUpdateCheck,\n type NormalizedDesktopRemoteLaunch,\n} from \"./native.js\";\nimport { type EngineStatus, updateTrayStatus } from \"./tray.js\";\nimport {\n applyDeleteProfile,\n applySetActiveProfile,\n buildSavedProfile,\n getDesktopShellModeState,\n readShellSettings,\n writeShellSettings,\n type DesktopShellMode,\n type ShellConnectionProfile,\n} from \"./shell-settings.js\";\nimport type { DesktopRuntimeStatus } from \"./local-runtime.js\";\n\ninterface ShellConnectionProfileInput {\n id?: string;\n name: string;\n serverUrl: string;\n authToken?: string | null;\n}\n\ninterface ShellConnectionState {\n host: \"desktop-shell\";\n desktopModeState: {\n isFirstRun: boolean;\n desktopMode: DesktopShellMode | null;\n };\n desktopMode?: DesktopShellMode;\n activeProfileId: string | null;\n profiles: ShellConnectionProfile[];\n localRuntime?: DesktopRuntimeStatus;\n}\n\ntype DesktopLaunchMode = \"choose\" | \"local\" | \"remote\";\n\ninterface RegisterIpcOptions {\n onDesktopModeChange?: (mode: DesktopShellMode) => Promise<void>;\n onDesktopLaunchModeChange?: (mode: DesktopLaunchMode) => Promise<void>;\n getRuntimeStatus?: () => DesktopRuntimeStatus;\n startLocalRuntime?: () => Promise<DesktopRuntimeStatus>;\n stopLocalRuntime?: () => Promise<DesktopRuntimeStatus>;\n getServerPort?: () => number | undefined;\n getDesktopLaunchMode?: () => DesktopLaunchMode;\n getDesktopLaunchContext?: () => NormalizedDesktopRemoteLaunch | null;\n}\n\nfunction isDesktopLaunchMode(value: unknown): value is DesktopLaunchMode {\n return value === \"choose\" || value === \"local\" || value === \"remote\";\n}\n\nfunction toShellState(\n settings: Awaited<ReturnType<typeof readShellSettings>>,\n runtimeStatus?: DesktopRuntimeStatus,\n): ShellConnectionState {\n return {\n host: \"desktop-shell\",\n desktopModeState: getDesktopShellModeState(settings),\n desktopMode: settings.desktopMode ?? undefined,\n activeProfileId: settings.activeProfileId,\n profiles: settings.profiles,\n localRuntime: runtimeStatus ?? { source: \"none\", state: \"stopped\" },\n };\n}\n\nasync function emitShellState(\n mainWindow: BrowserWindow,\n getRuntimeStatus?: () => DesktopRuntimeStatus,\n): Promise<ShellConnectionState> {\n const state = toShellState(await readShellSettings(), getRuntimeStatus?.());\n mainWindow.webContents.send(\"shell:state\", state);\n return state;\n}\n\nexport function registerIpcHandlers(mainWindow: BrowserWindow, tray: Tray, options: RegisterIpcOptions = {}): void {\n ipcMain.handle(\"window:minimize\", () => mainWindow.minimize());\n ipcMain.handle(\"window:maximize\", () => {\n const isCurrentlyMaximized = mainWindow.isMaximized();\n if (isCurrentlyMaximized) {\n mainWindow.unmaximize();\n return false;\n }\n mainWindow.maximize();\n return true;\n });\n ipcMain.handle(\"window:close\", () => mainWindow.close());\n ipcMain.handle(\"window:isMaximized\", () => mainWindow.isMaximized());\n ipcMain.handle(\"platform:get\", () => process.platform);\n\n ipcMain.handle(\"app:getSystemInfo\", () => ({\n platform: process.platform,\n arch: process.arch,\n electronVersion: process.versions.electron,\n nodeVersion: process.versions.node,\n appVersion: app.getVersion(),\n }));\n\n ipcMain.handle(\"app:checkForUpdates\", async () => {\n try {\n return await triggerUpdateCheck(mainWindow);\n } catch (error) {\n return { status: \"error\" as const, error: error instanceof Error ? error.message : String(error) };\n }\n });\n\n ipcMain.handle(\"tray:updateStatus\", (_event, status: EngineStatus) => updateTrayStatus(tray, status));\n ipcMain.handle(\"native:showExportDialog\", () => showExportSettingsDialog(mainWindow));\n ipcMain.handle(\"native:showImportDialog\", () => showImportSettingsDialog(mainWindow));\n ipcMain.handle(\"app:getServerPort\", () => options.getServerPort?.());\n\n ipcMain.handle(\"desktopRuntime:getStatus\", async () => options.getRuntimeStatus?.() ?? { source: \"none\", state: \"stopped\" });\n ipcMain.handle(\"desktopRuntime:startLocal\", async () => options.startLocalRuntime?.() ?? { source: \"none\", state: \"stopped\" });\n ipcMain.handle(\"desktopRuntime:stopLocal\", async () => options.stopLocalRuntime?.() ?? { source: \"none\", state: \"stopped\" });\n ipcMain.handle(\"desktopLaunchMode:getMode\", async () => options.getDesktopLaunchMode?.() ?? \"choose\");\n ipcMain.handle(\"desktopLaunchMode:getContext\", async () => options.getDesktopLaunchContext?.() ?? null);\n ipcMain.handle(\"desktopLaunchMode:setMode\", async (_event, mode: unknown) => {\n if (!isDesktopLaunchMode(mode)) {\n throw new Error(\"Invalid desktop launch mode\");\n }\n\n if (options.onDesktopLaunchModeChange) {\n await options.onDesktopLaunchModeChange(mode);\n return options.getDesktopLaunchMode?.() ?? mode;\n }\n\n if ((mode === \"local\" || mode === \"remote\") && options.onDesktopModeChange) {\n await options.onDesktopModeChange(mode);\n return options.getDesktopLaunchMode?.() ?? mode;\n }\n\n return options.getDesktopLaunchMode?.() ?? mode;\n });\n\n ipcMain.handle(\"shell:getState\", () => readShellSettings().then((settings) => toShellState(settings, options.getRuntimeStatus?.())));\n ipcMain.handle(\"shell:listProfiles\", async () => (await readShellSettings()).profiles);\n\n ipcMain.handle(\"shell:saveProfile\", async (_event, profile: ShellConnectionProfileInput) => {\n const settings = await readShellSettings();\n const nextProfile = buildSavedProfile(settings, profile);\n const existing = settings.profiles.find((item) => item.id === nextProfile.id);\n\n settings.profiles = existing\n ? settings.profiles.map((item) => (item.id === existing.id ? nextProfile : item))\n : [...settings.profiles, nextProfile];\n await writeShellSettings(settings);\n await emitShellState(mainWindow, options.getRuntimeStatus);\n return nextProfile;\n });\n\n ipcMain.handle(\"shell:deleteProfile\", async (_event, profileId: string) => {\n const settings = applyDeleteProfile(await readShellSettings(), profileId);\n await writeShellSettings(settings);\n await emitShellState(mainWindow, options.getRuntimeStatus);\n });\n\n ipcMain.handle(\"shell:setActiveProfile\", async (_event, profileId: string | null) => {\n const settings = applySetActiveProfile(await readShellSettings(), profileId);\n await writeShellSettings(settings);\n return emitShellState(mainWindow, options.getRuntimeStatus);\n });\n\n ipcMain.handle(\"shell:getDesktopModeState\", async () => {\n const settings = await readShellSettings();\n return getDesktopShellModeState(settings);\n });\n\n ipcMain.handle(\"shell:setDesktopMode\", async (_event, mode: DesktopShellMode) => {\n const settings = await readShellSettings();\n settings.desktopMode = mode;\n settings.hasCompletedModeSelection = true;\n await writeShellSettings(settings);\n await options.onDesktopModeChange?.(mode);\n return emitShellState(mainWindow, options.getRuntimeStatus);\n });\n\n ipcMain.handle(\"shell:resetDesktopMode\", async () => {\n const settings = await readShellSettings();\n settings.desktopMode = null;\n settings.hasCompletedModeSelection = false;\n await writeShellSettings(settings);\n // Stop the embedded runtime so a subsequent local choice spins up fresh.\n await options.stopLocalRuntime?.().catch(() => undefined);\n return emitShellState(mainWindow, options.getRuntimeStatus);\n });\n\n ipcMain.handle(\"shell:startQrScan\", async () => {\n throw new Error(\"QR scanning is not available in desktop shell\");\n });\n\n ipcMain.handle(\"shell:openConnectionManager\", () => {\n mainWindow.webContents.send(\"shell:open-connection-manager\");\n });\n}\n", "import { readFile, rename, writeFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport {\n app,\n BrowserWindow,\n dialog,\n Notification,\n type OpenDialogOptions,\n type SaveDialogOptions,\n} from \"electron\";\n\nexport interface WindowState {\n x?: number;\n y?: number;\n width: number;\n height: number;\n isMaximized: boolean;\n}\n\nexport interface DisplayWorkAreaLike {\n workArea: {\n x: number;\n y: number;\n width: number;\n height: number;\n };\n}\n\nconst MIN_VISIBLE_OVERLAP_PX = 64;\n\nexport function clampWindowStateToVisibleDisplay(\n state: WindowState,\n displays: DisplayWorkAreaLike[],\n): WindowState {\n if (state.x === undefined || state.y === undefined) {\n return state;\n }\n\n const windowLeft = state.x;\n const windowTop = state.y;\n const windowRight = state.x + state.width;\n const windowBottom = state.y + state.height;\n\n const hasSufficientOverlap = displays.some(({ workArea }) => {\n const displayLeft = workArea.x;\n const displayTop = workArea.y;\n const displayRight = workArea.x + workArea.width;\n const displayBottom = workArea.y + workArea.height;\n\n const overlapWidth = Math.max(0, Math.min(windowRight, displayRight) - Math.max(windowLeft, displayLeft));\n const overlapHeight = Math.max(0, Math.min(windowBottom, displayBottom) - Math.max(windowTop, displayTop));\n\n return overlapWidth >= MIN_VISIBLE_OVERLAP_PX && overlapHeight >= MIN_VISIBLE_OVERLAP_PX;\n });\n\n if (hasSufficientOverlap) {\n return state;\n }\n\n return {\n width: state.width,\n height: state.height,\n isMaximized: state.isMaximized,\n };\n}\n\nexport type DesktopLaunchMode = \"choose\" | \"local\" | \"remote\";\n\nexport interface DesktopRemoteProfileLike {\n id: string;\n name: string;\n serverUrl: string;\n authToken?: string | null;\n}\n\nexport interface DesktopShellSettingsLike {\n desktopMode: \"local\" | \"remote\" | null;\n activeProfileId: string | null;\n profiles: DesktopRemoteProfileLike[];\n}\n\nexport interface NormalizedDesktopRemoteLaunch {\n mode: \"remote\";\n profileId: string;\n serverBaseUrl: string;\n serverLabel?: string;\n authToken?: string;\n}\n\nexport const SHELL_HANDOFF_QUERY = {\n shellKind: \"shellKind\",\n shellMode: \"shellMode\",\n profileId: \"profileId\",\n serverBaseUrl: \"serverBaseUrl\",\n serverLabel: \"serverLabel\",\n token: \"token\",\n canOpenConnectionManager: \"shellCanOpenConnectionManager\",\n} as const;\n\nexport const DEFAULT_WINDOW_STATE: WindowState = {\n width: 1280,\n height: 900,\n isMaximized: false,\n};\n\ninterface DesktopNotificationOptions {\n silent?: boolean;\n onClick?: () => void;\n}\n\nfunction generateSettingsExportFilename(date: Date = new Date()): string {\n const year = date.getUTCFullYear();\n const month = String(date.getUTCMonth() + 1).padStart(2, \"0\");\n const day = String(date.getUTCDate()).padStart(2, \"0\");\n const hours = String(date.getUTCHours()).padStart(2, \"0\");\n const minutes = String(date.getUTCMinutes()).padStart(2, \"0\");\n const seconds = String(date.getUTCSeconds()).padStart(2, \"0\");\n\n return `fusion-settings-${year}-${month}-${day}-${hours}${minutes}${seconds}.json`;\n}\n\nfunction getWindowStatePath(): string {\n return join(app.getPath(\"userData\"), \"window-state.json\");\n}\n\nfunction getDesktopLaunchModePath(): string {\n return join(app.getPath(\"userData\"), \"desktop-launch-mode.json\");\n}\n\nfunction isValidWindowState(value: unknown): value is WindowState {\n if (value === null || typeof value !== \"object\") {\n return false;\n }\n\n const candidate = value as Partial<WindowState>;\n const hasValidPosition =\n (candidate.x === undefined || typeof candidate.x === \"number\") &&\n (candidate.y === undefined || typeof candidate.y === \"number\");\n\n return (\n hasValidPosition &&\n typeof candidate.width === \"number\" &&\n Number.isFinite(candidate.width) &&\n typeof candidate.height === \"number\" &&\n Number.isFinite(candidate.height) &&\n typeof candidate.isMaximized === \"boolean\"\n );\n}\n\nexport async function showExportSettingsDialog(parentWindow?: BrowserWindow): Promise<string | null> {\n const filename = generateSettingsExportFilename();\n const defaultPath = join(app.getPath(\"documents\"), filename);\n const dialogOptions: SaveDialogOptions = {\n title: \"Export Fusion Settings\",\n defaultPath,\n filters: [{ name: \"JSON Files\", extensions: [\"json\"] }],\n };\n\n const result = parentWindow\n ? await dialog.showSaveDialog(parentWindow, dialogOptions)\n : await dialog.showSaveDialog(dialogOptions);\n\n if (result.canceled || !result.filePath) {\n return null;\n }\n\n return result.filePath;\n}\n\nexport async function showImportSettingsDialog(parentWindow?: BrowserWindow): Promise<string | null> {\n const dialogOptions: OpenDialogOptions = {\n title: \"Import Fusion Settings\",\n properties: [\"openFile\"],\n filters: [{ name: \"JSON Files\", extensions: [\"json\"] }],\n };\n\n const result = parentWindow\n ? await dialog.showOpenDialog(parentWindow, dialogOptions)\n : await dialog.showOpenDialog(dialogOptions);\n\n if (result.canceled || result.filePaths.length === 0) {\n return null;\n }\n\n return result.filePaths[0] ?? null;\n}\n\nexport function showDesktopNotification(\n title: string,\n body: string,\n options: DesktopNotificationOptions = {},\n): void {\n if (!Notification.isSupported()) {\n console.warn(\"[desktop/native] Notifications are not supported in this environment\");\n return;\n }\n\n try {\n const notification = new Notification({\n title,\n body,\n silent: options.silent,\n });\n\n if (options.onClick) {\n notification.on(\"click\", options.onClick);\n }\n\n notification.show();\n } catch (error) {\n console.error(\"[desktop/native] Failed to display desktop notification\", error);\n }\n}\n\ntype AutoUpdaterLike = {\n autoDownload: boolean;\n autoInstallOnAppQuit: boolean;\n on: (event: string, handler: (...args: unknown[]) => void) => unknown;\n checkForUpdates: () => Promise<unknown>;\n};\n\nlet cachedAutoUpdater: AutoUpdaterLike | null = null;\nlet autoUpdaterLoadPromise: Promise<AutoUpdaterLike | null> | null = null;\nlet listenersBound = false;\nlet hasRunInitialUpdateCheck = false;\nlet autoUpdaterWindow: BrowserWindow | undefined;\nlet updateIntervalTimer: ReturnType<typeof setInterval> | null = null;\nlet updateIntervalDisposer: (() => void) | null = null;\nlet updateIntervalWindow: BrowserWindow | null = null;\n\nfunction getErrorMessage(error: unknown): string {\n if (error instanceof Error) {\n return error.message;\n }\n if (typeof error === \"string\") {\n return error;\n }\n return \"Unknown error\";\n}\n\nasync function resolveAutoUpdater(): Promise<AutoUpdaterLike | null> {\n if (cachedAutoUpdater) {\n return cachedAutoUpdater;\n }\n\n if (!autoUpdaterLoadPromise) {\n autoUpdaterLoadPromise = (async () => {\n try {\n const mod = (await import(\"electron-updater\")) as {\n default?: { autoUpdater?: unknown };\n autoUpdater?: unknown;\n };\n const namedAutoUpdater = \"autoUpdater\" in mod ? (mod as { autoUpdater?: unknown }).autoUpdater : undefined;\n const autoUpdater = (mod.default?.autoUpdater ?? namedAutoUpdater) as AutoUpdaterLike | undefined;\n\n if (!autoUpdater) {\n console.warn(\"[desktop/native] Auto-updater module loaded without autoUpdater export\");\n return null;\n }\n\n cachedAutoUpdater = autoUpdater;\n return autoUpdater;\n } catch (error) {\n console.warn(\"[desktop/native] Auto-updater unavailable\", error);\n return null;\n }\n })();\n }\n\n return autoUpdaterLoadPromise;\n}\n\nfunction bindAutoUpdaterListeners(autoUpdater: AutoUpdaterLike): void {\n if (listenersBound) {\n return;\n }\n\n listenersBound = true;\n autoUpdater.autoDownload = true;\n autoUpdater.autoInstallOnAppQuit = true;\n\n autoUpdater.on(\"update-available\", (info) => {\n showDesktopNotification(\"Fusion Update Available\", \"Update available \u2014 downloading in background\", {\n silent: true,\n });\n autoUpdaterWindow?.webContents.send(\"update-available\", info);\n });\n\n autoUpdater.on(\"update-downloaded\", (info) => {\n showDesktopNotification(\"Fusion Update Ready\", \"Update ready \u2014 will install on quit\", {\n silent: true,\n });\n autoUpdaterWindow?.webContents.send(\"update-downloaded\", info);\n });\n\n autoUpdater.on(\"update-not-available\", (info) => {\n showDesktopNotification(\"Fusion is up to date\", \"You're on the latest version\", {\n silent: true,\n });\n autoUpdaterWindow?.webContents.send(\"update-not-available\", info);\n });\n\n autoUpdater.on(\"error\", (error) => {\n const message = getErrorMessage(error);\n console.error(\"[desktop/native] Auto-updater error\", error);\n autoUpdaterWindow?.webContents.send(\"update-error\", { message });\n });\n}\n\nexport function setupAutoUpdater(mainWindow?: BrowserWindow): void {\n if (mainWindow) {\n autoUpdaterWindow = mainWindow;\n }\n\n void (async () => {\n try {\n const autoUpdater = await resolveAutoUpdater();\n if (!autoUpdater) {\n return;\n }\n\n bindAutoUpdaterListeners(autoUpdater);\n\n if (hasRunInitialUpdateCheck) {\n return;\n }\n\n hasRunInitialUpdateCheck = true;\n await autoUpdater.checkForUpdates().catch((error: unknown) => {\n console.error(\"[desktop/native] Auto-updater check failed\", error);\n });\n } catch (error) {\n console.warn(\"[desktop/native] Auto-updater setup failed\", error);\n }\n })();\n}\n\nexport async function triggerUpdateCheck(\n mainWindow?: BrowserWindow,\n): Promise<{ status: \"checking\" } | { status: \"unavailable\"; reason: string } | { status: \"error\"; error: string }> {\n setupAutoUpdater(mainWindow);\n\n const autoUpdater = await resolveAutoUpdater();\n if (!autoUpdater) {\n return { status: \"unavailable\", reason: \"updater_unavailable\" };\n }\n\n try {\n await autoUpdater.checkForUpdates();\n return { status: \"checking\" };\n } catch (error) {\n return { status: \"error\", error: getErrorMessage(error) };\n }\n}\n\nexport function startUpdateCheckInterval(mainWindow: BrowserWindow, intervalMs = 4 * 60 * 60 * 1000): () => void {\n autoUpdaterWindow = mainWindow;\n\n if (updateIntervalDisposer && updateIntervalWindow === mainWindow) {\n return updateIntervalDisposer;\n }\n\n if (updateIntervalTimer) {\n clearInterval(updateIntervalTimer);\n updateIntervalTimer = null;\n }\n\n updateIntervalWindow = mainWindow;\n updateIntervalTimer = setInterval(() => {\n void triggerUpdateCheck(mainWindow);\n }, intervalMs);\n\n updateIntervalDisposer = () => {\n if (updateIntervalTimer) {\n clearInterval(updateIntervalTimer);\n updateIntervalTimer = null;\n }\n updateIntervalDisposer = null;\n updateIntervalWindow = null;\n };\n\n return updateIntervalDisposer;\n}\n\nfunction normalizeServerBaseUrl(serverUrl: string): string | null {\n try {\n const parsed = new URL(serverUrl);\n if (parsed.protocol !== \"http:\" && parsed.protocol !== \"https:\") {\n return null;\n }\n return parsed.toString().replace(/\\/$/, \"\");\n } catch {\n return null;\n }\n}\n\nexport function normalizeDesktopRemoteLaunch(settings: DesktopShellSettingsLike): NormalizedDesktopRemoteLaunch | null {\n if (settings.desktopMode !== \"remote\" || !settings.activeProfileId) {\n return null;\n }\n\n const activeProfile = settings.profiles.find((profile) => profile.id === settings.activeProfileId);\n if (!activeProfile) {\n return null;\n }\n\n const serverBaseUrl = normalizeServerBaseUrl(activeProfile.serverUrl);\n if (!serverBaseUrl) {\n return null;\n }\n\n return {\n mode: \"remote\",\n profileId: activeProfile.id,\n serverBaseUrl,\n ...(activeProfile.name ? { serverLabel: activeProfile.name } : {}),\n ...(activeProfile.authToken ? { authToken: activeProfile.authToken } : {}),\n };\n}\n\nexport function buildRemoteShellHandoffUrl(launch: NormalizedDesktopRemoteLaunch): string {\n const url = new URL(launch.serverBaseUrl);\n url.searchParams.set(SHELL_HANDOFF_QUERY.shellKind, \"desktop\");\n url.searchParams.set(SHELL_HANDOFF_QUERY.shellMode, \"remote\");\n url.searchParams.set(SHELL_HANDOFF_QUERY.profileId, launch.profileId);\n url.searchParams.set(SHELL_HANDOFF_QUERY.serverBaseUrl, launch.serverBaseUrl);\n if (launch.serverLabel) {\n url.searchParams.set(SHELL_HANDOFF_QUERY.serverLabel, launch.serverLabel);\n }\n if (launch.authToken) {\n url.searchParams.set(SHELL_HANDOFF_QUERY.token, launch.authToken);\n }\n url.searchParams.set(SHELL_HANDOFF_QUERY.canOpenConnectionManager, \"1\");\n return url.toString();\n}\n\nfunction isValidDesktopLaunchMode(value: unknown): value is DesktopLaunchMode {\n return value === \"choose\" || value === \"local\" || value === \"remote\";\n}\n\nexport async function loadDesktopLaunchMode(): Promise<DesktopLaunchMode> {\n const launchModePath = getDesktopLaunchModePath();\n\n try {\n const raw = await readFile(launchModePath, \"utf-8\");\n const parsed: unknown = JSON.parse(raw);\n\n if (parsed && typeof parsed === \"object\" && \"mode\" in parsed) {\n const mode = (parsed as { mode?: unknown }).mode;\n if (isValidDesktopLaunchMode(mode)) {\n return mode;\n }\n }\n\n return \"choose\";\n } catch {\n return \"choose\";\n }\n}\n\nexport async function saveDesktopLaunchMode(mode: DesktopLaunchMode): Promise<void> {\n const launchModePath = getDesktopLaunchModePath();\n const tempPath = `${launchModePath}.tmp`;\n\n await writeFile(tempPath, JSON.stringify({ mode }, null, 2), \"utf-8\");\n await rename(tempPath, launchModePath);\n}\n\nexport async function loadWindowState(): Promise<WindowState | null> {\n const statePath = getWindowStatePath();\n\n try {\n const raw = await readFile(statePath, \"utf-8\");\n const parsed: unknown = JSON.parse(raw);\n\n if (!isValidWindowState(parsed)) {\n return null;\n }\n\n return parsed;\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") {\n return null;\n }\n\n return null;\n }\n}\n\nexport function saveWindowState(mainWindow: BrowserWindow): void {\n if (mainWindow.isDestroyed()) {\n return;\n }\n\n const bounds = mainWindow.getBounds();\n const state: WindowState = {\n x: bounds.x,\n y: bounds.y,\n width: bounds.width,\n height: bounds.height,\n isMaximized: mainWindow.isMaximized(),\n };\n\n const statePath = getWindowStatePath();\n const tempPath = `${statePath}.tmp`;\n\n void writeFile(tempPath, JSON.stringify(state, null, 2), \"utf-8\")\n .then(() => rename(tempPath, statePath))\n .catch((error) => {\n console.error(\"[desktop/native] Failed to save window state\", error);\n });\n}\n", "import path from \"node:path\";\nimport {\n app,\n BrowserWindow,\n Menu,\n nativeImage,\n Tray,\n type MenuItemConstructorOptions,\n type NativeImage,\n} from \"electron\";\n\nexport type EngineStatus = \"running\" | \"paused\" | \"stopped\";\n\nexport interface TrayMenuOptions {\n isWindowVisible: boolean;\n engineStatus: EngineStatus;\n}\n\ninterface TrayState {\n mainWindow: BrowserWindow;\n engineStatus: EngineStatus;\n isQuitting: boolean;\n}\n\nconst trayState = new WeakMap<Tray, TrayState>();\n\nfunction toggleMainWindow(mainWindow: BrowserWindow): void {\n if (mainWindow.isVisible()) {\n mainWindow.hide();\n return;\n }\n\n mainWindow.show();\n mainWindow.focus();\n}\n\nfunction resolveEngineMenuLabel(engineStatus: EngineStatus): string {\n return engineStatus === \"running\" ? \"Pause Engine\" : \"Resume Engine\";\n}\n\nfunction applyTrayMenu(tray: Tray, state: TrayState): void {\n const baseTemplate = buildTrayContextMenu({\n isWindowVisible: state.mainWindow.isVisible(),\n engineStatus: state.engineStatus,\n });\n\n const contextTemplate = baseTemplate.map((item) => {\n if (item.type === \"separator\") {\n return item;\n }\n\n if (item.label === \"Show Window\" || item.label === \"Hide Window\") {\n return {\n ...item,\n click: () => toggleMainWindow(state.mainWindow),\n };\n }\n\n if (item.label === \"Pause Engine\" || item.label === \"Resume Engine\") {\n return {\n ...item,\n click: () => {\n if (state.engineStatus === \"stopped\") {\n return;\n }\n\n state.engineStatus = state.engineStatus === \"running\" ? \"paused\" : \"running\";\n applyTrayMenu(tray, state);\n },\n };\n }\n\n return {\n ...item,\n click: () => {\n state.isQuitting = true;\n app.quit();\n },\n };\n });\n\n tray.setToolTip(getTrayTooltip(state.engineStatus));\n tray.setContextMenu(Menu.buildFromTemplate(contextTemplate));\n}\n\nexport function createTrayIcon(): NativeImage {\n if (process.platform === \"darwin\") {\n const iconPath = path.join(import.meta.dirname, \"icons\", \"tray-32.png\");\n const retinaIcon = nativeImage.createFromPath(iconPath);\n return retinaIcon.resize({ width: 16, height: 16 });\n }\n\n const iconPath = path.join(import.meta.dirname, \"icons\", \"tray-48.png\");\n return nativeImage.createFromPath(iconPath);\n}\n\nexport function buildTrayContextMenu(options: TrayMenuOptions): MenuItemConstructorOptions[] {\n return [\n {\n label: options.isWindowVisible ? \"Hide Window\" : \"Show Window\",\n },\n {\n type: \"separator\",\n },\n {\n label: resolveEngineMenuLabel(options.engineStatus),\n enabled: options.engineStatus !== \"stopped\",\n },\n {\n type: \"separator\",\n },\n {\n label: \"Quit Fusion\",\n },\n ];\n}\n\nexport function getTrayTooltip(status: EngineStatus): string {\n switch (status) {\n case \"paused\":\n return \"Fusion \u2014 Paused\";\n case \"stopped\":\n return \"Fusion \u2014 Stopped\";\n case \"running\":\n default:\n return \"Fusion \u2014 Running\";\n }\n}\n\nexport function setupTray(mainWindow: BrowserWindow, tray: Tray): Tray {\n const state: TrayState = {\n mainWindow,\n engineStatus: \"running\",\n isQuitting: false,\n };\n\n trayState.set(tray, state);\n\n tray.setImage(createTrayIcon());\n applyTrayMenu(tray, state);\n\n tray.on(\"click\", () => {\n toggleMainWindow(mainWindow);\n });\n\n mainWindow.on(\"show\", () => {\n applyTrayMenu(tray, state);\n });\n\n mainWindow.on(\"hide\", () => {\n applyTrayMenu(tray, state);\n });\n\n mainWindow.on(\"close\", (event) => {\n if (state.isQuitting) {\n return;\n }\n\n event.preventDefault();\n mainWindow.hide();\n });\n\n app.on(\"before-quit\", () => {\n state.isQuitting = true;\n });\n\n return tray;\n}\n\nexport function updateTrayStatus(tray: Tray, status: EngineStatus): void {\n const state = trayState.get(tray);\n\n if (!state) {\n tray.setToolTip(getTrayTooltip(status));\n const menu = Menu.buildFromTemplate(\n buildTrayContextMenu({\n isWindowVisible: false,\n engineStatus: status,\n }),\n );\n tray.setContextMenu(menu);\n return;\n }\n\n state.engineStatus = status;\n applyTrayMenu(tray, state);\n}\n", "import { readFile, rename, writeFile } from \"node:fs/promises\";\nimport { createHash } from \"node:crypto\";\nimport { join } from \"node:path\";\nimport { app } from \"electron\";\n\nexport interface ShellConnectionProfile {\n id: string;\n name: string;\n serverUrl: string;\n authToken?: string | null;\n createdAt: string;\n updatedAt: string;\n lastUsedAt?: string | null;\n}\n\nexport type DesktopShellMode = \"local\" | \"remote\";\n\nexport interface DesktopShellModeState {\n isFirstRun: boolean;\n desktopMode: DesktopShellMode | null;\n}\n\nexport interface DesktopShellSettings {\n desktopMode: DesktopShellMode | null;\n hasCompletedModeSelection: boolean;\n activeProfileId: string | null;\n profiles: ShellConnectionProfile[];\n}\n\nconst DEFAULT_SETTINGS: DesktopShellSettings = {\n desktopMode: null,\n hasCompletedModeSelection: false,\n activeProfileId: null,\n profiles: [],\n};\n\nfunction getSettingsPath(): string {\n return join(app.getPath(\"userData\"), \"shell-connections.json\");\n}\n\nfunction nowIso(): string {\n return new Date().toISOString();\n}\n\nfunction normalizeDesktopMode(value: unknown): DesktopShellMode | null {\n return value === \"local\" || value === \"remote\" ? value : null;\n}\n\nfunction normalizeServerUrl(serverUrl: string): string {\n const normalized = serverUrl.trim().replace(/\\/$/, \"\");\n let parsed: URL;\n try {\n parsed = new URL(normalized);\n } catch {\n throw new Error(\"Server URL must be a valid absolute URL\");\n }\n if (!/^https?:$/.test(parsed.protocol)) {\n throw new Error(\"Server URL must use http or https\");\n }\n return normalized;\n}\n\nfunction normalizeProfileName(name: string): string {\n const normalized = name.trim().replace(/\\s+/g, \" \");\n return normalized.length > 0 ? normalized : \"Remote Server\";\n}\n\nfunction profileBaseId(name: string, serverUrl: string): string {\n const hash = createHash(\"sha1\").update(`${name}|${serverUrl}`).digest(\"hex\").slice(0, 10);\n return `profile_${hash}`;\n}\n\nfunction ensureUniqueProfileName(name: string, profiles: ShellConnectionProfile[], skipId?: string): string {\n const used = new Set(\n profiles.filter((profile) => profile.id !== skipId).map((profile) => profile.name.toLocaleLowerCase()),\n );\n if (!used.has(name.toLocaleLowerCase())) {\n return name;\n }\n let suffix = 2;\n let candidate = `${name} (${suffix})`;\n while (used.has(candidate.toLocaleLowerCase())) {\n suffix += 1;\n candidate = `${name} (${suffix})`;\n }\n return candidate;\n}\n\nfunction createDeterministicProfileId(name: string, serverUrl: string, profiles: ShellConnectionProfile[], skipId?: string): string {\n const used = new Set(profiles.filter((profile) => profile.id !== skipId).map((profile) => profile.id));\n const base = profileBaseId(name, serverUrl);\n if (!used.has(base)) {\n return base;\n }\n let suffix = 2;\n let candidate = `${base}_${suffix}`;\n while (used.has(candidate)) {\n suffix += 1;\n candidate = `${base}_${suffix}`;\n }\n return candidate;\n}\n\nfunction normalizeProfileRecord(input: unknown, fallbackIndex: number): ShellConnectionProfile | null {\n if (!input || typeof input !== \"object\") {\n return null;\n }\n const candidate = input as Partial<ShellConnectionProfile>;\n if (typeof candidate.serverUrl !== \"string\") {\n return null;\n }\n\n let serverUrl: string;\n try {\n serverUrl = normalizeServerUrl(candidate.serverUrl);\n } catch {\n return null;\n }\n\n const name = normalizeProfileName(typeof candidate.name === \"string\" ? candidate.name : \"\");\n const createdAt = typeof candidate.createdAt === \"string\" && candidate.createdAt.length > 0 ? candidate.createdAt : nowIso();\n const updatedAt = typeof candidate.updatedAt === \"string\" && candidate.updatedAt.length > 0 ? candidate.updatedAt : createdAt;\n return {\n id: typeof candidate.id === \"string\" && candidate.id.length > 0 ? candidate.id : `profile_imported_${fallbackIndex}`,\n name,\n serverUrl,\n authToken: typeof candidate.authToken === \"string\" ? candidate.authToken : null,\n createdAt,\n updatedAt,\n lastUsedAt: typeof candidate.lastUsedAt === \"string\" ? candidate.lastUsedAt : null,\n };\n}\n\nfunction normalize(input: unknown): DesktopShellSettings {\n if (!input || typeof input !== \"object\") {\n return { ...DEFAULT_SETTINGS };\n }\n\n const candidate = input as Partial<DesktopShellSettings>;\n const desktopMode = normalizeDesktopMode(candidate.desktopMode);\n const inferredCompleted = desktopMode !== null;\n\n const profiles: ShellConnectionProfile[] = [];\n const profileSource = Array.isArray(candidate.profiles) ? candidate.profiles : [];\n for (const [index, profileValue] of profileSource.entries()) {\n const normalizedProfile = normalizeProfileRecord(profileValue, index);\n if (!normalizedProfile) {\n continue;\n }\n const uniqueName = ensureUniqueProfileName(normalizedProfile.name, profiles);\n const idAlreadyUsed = profiles.some((profile) => profile.id === normalizedProfile.id);\n const id = idAlreadyUsed\n ? createDeterministicProfileId(uniqueName, normalizedProfile.serverUrl, profiles)\n : normalizedProfile.id;\n profiles.push({ ...normalizedProfile, name: uniqueName, id });\n }\n\n const persistedActiveId = typeof candidate.activeProfileId === \"string\" ? candidate.activeProfileId : null;\n const activeProfileId = persistedActiveId && profiles.some((profile) => profile.id === persistedActiveId)\n ? persistedActiveId\n : null;\n\n return {\n desktopMode,\n hasCompletedModeSelection: typeof candidate.hasCompletedModeSelection === \"boolean\" ? candidate.hasCompletedModeSelection : inferredCompleted,\n activeProfileId,\n profiles,\n };\n}\n\nexport function buildSavedProfile(\n settings: DesktopShellSettings,\n input: { id?: string; name: string; serverUrl: string; authToken?: string | null },\n): ShellConnectionProfile {\n const existing = input.id ? settings.profiles.find((item) => item.id === input.id) : undefined;\n const normalizedServerUrl = normalizeServerUrl(input.serverUrl);\n const normalizedName = normalizeProfileName(input.name);\n const name = ensureUniqueProfileName(normalizedName, settings.profiles, existing?.id);\n const timestamp = nowIso();\n\n return {\n id: existing?.id ?? createDeterministicProfileId(name, normalizedServerUrl, settings.profiles, existing?.id),\n name,\n serverUrl: normalizedServerUrl,\n authToken: input.authToken ?? null,\n createdAt: existing?.createdAt ?? timestamp,\n updatedAt: timestamp,\n lastUsedAt: existing?.lastUsedAt ?? null,\n };\n}\n\nexport function applyDeleteProfile(settings: DesktopShellSettings, profileId: string): DesktopShellSettings {\n const profiles = settings.profiles.filter((item) => item.id !== profileId);\n const activeProfileId =\n settings.activeProfileId !== profileId\n ? settings.activeProfileId\n : profiles.length > 0\n ? profiles[0]?.id ?? null\n : null;\n return { ...settings, profiles, activeProfileId };\n}\n\nexport function applySetActiveProfile(settings: DesktopShellSettings, profileId: string | null): DesktopShellSettings {\n const activeProfileId = profileId && settings.profiles.some((item) => item.id === profileId) ? profileId : null;\n const timestamp = nowIso();\n const profiles = settings.profiles.map((item) =>\n item.id === activeProfileId\n ? { ...item, lastUsedAt: timestamp, updatedAt: timestamp }\n : item,\n );\n\n return {\n ...settings,\n activeProfileId,\n profiles,\n };\n}\n\nexport async function readShellSettings(): Promise<DesktopShellSettings> {\n try {\n const raw = await readFile(getSettingsPath(), \"utf-8\");\n return normalize(JSON.parse(raw));\n } catch {\n return { ...DEFAULT_SETTINGS };\n }\n}\n\nexport function getDesktopShellModeState(settings: DesktopShellSettings): DesktopShellModeState {\n if (!settings.hasCompletedModeSelection || settings.desktopMode === null) {\n return {\n isFirstRun: true,\n desktopMode: null,\n };\n }\n\n return {\n isFirstRun: false,\n desktopMode: settings.desktopMode,\n };\n}\n\nexport async function writeShellSettings(settings: DesktopShellSettings): Promise<void> {\n const path = getSettingsPath();\n const temp = `${path}.tmp`;\n await writeFile(temp, JSON.stringify(settings, null, 2), \"utf-8\");\n await rename(temp, path);\n}\n", "import {\n Menu,\n shell,\n type BrowserWindow,\n type MenuItemConstructorOptions,\n} from \"electron\";\n\nexport interface AppMenuOptions {\n mainWindow: BrowserWindow;\n appName: string;\n onChangeLaunchMode?: () => Promise<void> | void;\n onStartLocalRuntime?: () => Promise<void> | void;\n onStopLocalRuntime?: () => Promise<void> | void;\n onConnectRemoteServer?: () => Promise<void> | void;\n onCheckForUpdates?: () => Promise<void> | void;\n}\n\nfunction runMenuAction(label: string, action: (() => Promise<void> | void) | undefined): void {\n if (!action) return;\n void Promise.resolve(action()).catch((error: unknown) => {\n console.error(`[desktop/menu] ${label} failed`, error);\n });\n}\n\nfunction buildConnectionSubmenu(options: AppMenuOptions): MenuItemConstructorOptions {\n /*\n * FNXC:DesktopConnectionMenu 2026-06-21-02:04:\n * Desktop users need menu-level controls to start the embedded local server, shut it down, or connect to a remote server without returning to first-run setup.\n */\n return {\n label: \"Connection\",\n submenu: [\n {\n label: \"Use Local Server\",\n click: () => runMenuAction(\"onStartLocalRuntime\", options.onStartLocalRuntime),\n },\n {\n label: \"Shut Down Local Server\",\n click: () => runMenuAction(\"onStopLocalRuntime\", options.onStopLocalRuntime),\n },\n {\n type: \"separator\",\n },\n {\n label: \"Connect to Remote Server\u2026\",\n click: () => runMenuAction(\"onConnectRemoteServer\", options.onConnectRemoteServer ?? options.onChangeLaunchMode),\n },\n {\n label: \"Change Launch Mode\u2026\",\n click: () => runMenuAction(\"onChangeLaunchMode\", options.onChangeLaunchMode),\n },\n ],\n };\n}\n\nfunction buildAppSubmenu(options: AppMenuOptions): MenuItemConstructorOptions {\n return {\n label: options.appName,\n submenu: [\n {\n label: `About ${options.appName}`,\n },\n {\n label: \"Check for Updates\u2026\",\n click: () => runMenuAction(\"onCheckForUpdates\", options.onCheckForUpdates),\n },\n {\n type: \"separator\",\n },\n {\n label: \"Preferences\",\n accelerator: \"CmdOrCtrl+,\",\n },\n {\n type: \"separator\",\n },\n {\n label: `Hide ${options.appName}`,\n role: \"hide\",\n },\n {\n label: \"Hide Others\",\n role: \"hideOthers\",\n },\n {\n label: \"Show All\",\n role: \"unhide\",\n },\n {\n type: \"separator\",\n },\n {\n label: `Quit ${options.appName}`,\n accelerator: \"CmdOrCtrl+Q\",\n role: \"quit\",\n },\n ],\n };\n}\n\nfunction buildEditSubmenu(): MenuItemConstructorOptions {\n return {\n label: \"Edit\",\n submenu: [\n {\n label: \"Undo\",\n accelerator: \"CmdOrCtrl+Z\",\n role: \"undo\",\n },\n {\n label: \"Redo\",\n accelerator: \"Shift+CmdOrCtrl+Z\",\n role: \"redo\",\n },\n {\n type: \"separator\",\n },\n {\n label: \"Cut\",\n accelerator: \"CmdOrCtrl+X\",\n role: \"cut\",\n },\n {\n label: \"Copy\",\n accelerator: \"CmdOrCtrl+C\",\n role: \"copy\",\n },\n {\n label: \"Paste\",\n accelerator: \"CmdOrCtrl+V\",\n role: \"paste\",\n },\n {\n label: \"Select All\",\n accelerator: \"CmdOrCtrl+A\",\n role: \"selectAll\",\n },\n ],\n };\n}\n\nfunction buildViewSubmenu(options: AppMenuOptions): MenuItemConstructorOptions {\n const { webContents } = options.mainWindow;\n\n return {\n label: \"View\",\n submenu: [\n {\n label: \"Reload\",\n accelerator: \"CmdOrCtrl+R\",\n click: () => webContents.reload(),\n },\n {\n label: \"Force Reload\",\n accelerator: \"CmdOrCtrl+Shift+R\",\n click: () => webContents.reloadIgnoringCache(),\n },\n {\n type: \"separator\",\n },\n {\n label: \"Toggle Dev Tools\",\n accelerator: \"Alt+CmdOrCtrl+I\",\n click: () => webContents.toggleDevTools(),\n },\n {\n type: \"separator\",\n },\n {\n label: \"Zoom In\",\n accelerator: \"CmdOrCtrl+Plus\",\n click: () => {\n const level = webContents.getZoomLevel();\n webContents.setZoomLevel(level + 0.5);\n },\n },\n {\n label: \"Zoom Out\",\n accelerator: \"CmdOrCtrl+-\",\n click: () => {\n const level = webContents.getZoomLevel();\n webContents.setZoomLevel(level - 0.5);\n },\n },\n {\n label: \"Reset Zoom\",\n accelerator: \"CmdOrCtrl+0\",\n click: () => {\n webContents.setZoomLevel(0);\n },\n },\n {\n type: \"separator\",\n },\n {\n label: \"Toggle Full Screen\",\n accelerator: \"F11\",\n role: \"togglefullscreen\",\n },\n ],\n };\n}\n\nfunction buildWindowSubmenu(isMac: boolean): MenuItemConstructorOptions {\n const windowItems: MenuItemConstructorOptions[] = [\n {\n label: \"Minimize\",\n accelerator: \"CmdOrCtrl+M\",\n role: \"minimize\",\n },\n ];\n\n if (isMac) {\n windowItems.push({\n label: \"Zoom\",\n role: \"zoom\",\n });\n }\n\n windowItems.push(\n {\n type: \"separator\",\n },\n {\n label: \"Close\",\n accelerator: \"CmdOrCtrl+W\",\n role: \"close\",\n },\n );\n\n if (isMac) {\n windowItems.push(\n {\n type: \"separator\",\n },\n {\n label: \"Bring All to Front\",\n role: \"front\",\n },\n );\n }\n\n return {\n label: \"Window\",\n submenu: windowItems,\n };\n}\n\nfunction buildHelpSubmenu(options: AppMenuOptions): MenuItemConstructorOptions {\n return {\n label: \"Help\",\n submenu: [\n {\n label: \"Check for Updates\u2026\",\n click: () => runMenuAction(\"onCheckForUpdates\", options.onCheckForUpdates),\n },\n {\n label: \"Fusion Documentation\",\n click: () => {\n void shell.openExternal(\"https://github.com/Runfusion/Fusion#readme\");\n },\n },\n ],\n };\n}\n\nexport function buildMenuTemplate(options: AppMenuOptions): MenuItemConstructorOptions[] {\n const isMac = process.platform === \"darwin\";\n\n const template: MenuItemConstructorOptions[] = [\n buildEditSubmenu(),\n buildViewSubmenu(options),\n buildConnectionSubmenu(options),\n buildWindowSubmenu(isMac),\n buildHelpSubmenu(options),\n ];\n\n if (isMac) {\n template.unshift(buildAppSubmenu(options));\n }\n\n return template;\n}\n\nexport function buildAppMenu(options: AppMenuOptions): Menu {\n const menu = Menu.buildFromTemplate(buildMenuTemplate(options));\n Menu.setApplicationMenu(menu);\n return menu;\n}\n", "/**\n * Renderer entry resolution for Electron desktop shell.\n *\n * Production: loads embedded renderer assets from dist/client/index.html\n * Development: loads from FUSION_DASHBOARD_URL or localhost:5173\n */\n\nimport { pathToFileURL } from \"node:url\";\nimport { join } from \"node:path\";\n\nconst DEFAULT_DEV_DASHBOARD_URL = \"http://localhost:5173\";\n\n/**\n * Determines if the app is running in development mode.\n * Development mode is active when:\n * - NODE_ENV is \"development\", OR\n * - --dev flag is passed in command line arguments\n */\nexport function isDevelopmentMode(): boolean {\n return process.env.NODE_ENV === \"development\" || process.argv.includes(\"--dev\");\n}\n\n/**\n * Gets the renderer URL for loading the dashboard UI.\n *\n * In development mode: uses FUSION_DASHBOARD_URL env var or defaults to localhost:5173\n * In production mode: loads from embedded renderer assets (file:// path to dist/client/index.html)\n */\nexport function getRendererUrl(): string {\n if (isDevelopmentMode()) {\n return process.env.FUSION_DASHBOARD_URL ?? DEFAULT_DEV_DASHBOARD_URL;\n }\n\n // Production: use embedded renderer assets\n // This path is relative to the bundled main.js location\n const rendererIndexPath = join(import.meta.dirname, \"client\", \"index.html\");\n return pathToFileURL(rendererIndexPath).toString();\n}\n\n/**\n * Gets the renderer file path for loadFile() calls.\n * Returns the absolute file path (not a URL).\n */\nexport function getRendererFilePath(): string {\n if (isDevelopmentMode()) {\n // In development, we use loadURL, not loadFile\n return \"\";\n }\n\n // Production: return the absolute file path\n return join(import.meta.dirname, \"client\", \"index.html\");\n}\n\n/**\n * Checks if the renderer should be loaded from a URL (development)\n * vs file path (production).\n */\nexport function isUrlRenderer(): boolean {\n if (isDevelopmentMode()) {\n // In dev, always use URL unless explicitly told to use file path\n const override = process.env.FUSION_USE_FILE_RENDERER;\n return override !== \"true\";\n }\n\n // In production, always use file path\n return false;\n}\n\n// Re-export for backward compatibility\nexport const IS_DEVELOPMENT = isDevelopmentMode();\nexport { getRendererUrl as DASHBOARD_URL };\n", "import { once } from \"node:events\";\nimport type { Server } from \"node:http\";\nimport type { AddressInfo } from \"node:net\";\n\nimport { ensureDesktopRuntimeProject } from \"./engine-runtime.js\";\n\nexport type RuntimeSource = \"embedded-local\" | \"external-cli\" | \"none\";\nexport type RuntimeState = \"stopped\" | \"starting\" | \"running\" | \"error\";\n\nexport interface DesktopRuntimeStatus {\n source: RuntimeSource;\n state: RuntimeState;\n port?: number;\n baseUrl?: string;\n error?: string;\n}\n\ntype TaskStoreLike = {\n init(): Promise<void>;\n watch(): Promise<void>;\n close(): void;\n};\n\ntype RuntimeCleanup = () => Promise<void> | void;\n\ntype RuntimeInstance = {\n store: TaskStoreLike;\n server: Server;\n port: number;\n baseUrl: string;\n cleanup?: RuntimeCleanup;\n};\n\nexport interface LocalRuntimeManagerOptions {\n rootDir: string;\n getExternalPort?: () => number | undefined;\n createStore?: (rootDir: string) => Promise<TaskStoreLike>;\n createDashboardServer?: (store: TaskStoreLike, rootDir: string) => Promise<Server | { server: Server; cleanup?: RuntimeCleanup }>;\n}\n\nasync function createStoreDefault(rootDir: string): Promise<TaskStoreLike> {\n const { TaskStore } = await import(\"@fusion/core\");\n return new TaskStore(rootDir) as TaskStoreLike;\n}\n\nasync function createDashboardServerDefault(store: TaskStoreLike, rootDir: string): Promise<{ server: Server; cleanup: RuntimeCleanup }> {\n const { CentralCore } = await import(\"@fusion/core\");\n const { createServer } = await import(\"@fusion/dashboard\");\n const { ProjectEngineManager } = await import(\"@fusion/engine\");\n\n /*\n * FNXC:DesktopRuntime 2026-06-20-23:39:\n * Embedded desktop local mode should be an executable Fusion node, not a dashboard-only shell. Start all registered project engines and pass the manager to the API server so project-scoped routes can start newly accessed engines.\n */\n const centralCore = new CentralCore();\n const engineManager = new ProjectEngineManager(centralCore);\n const cleanup = async () => {\n await engineManager.stopAll();\n await centralCore.close?.();\n };\n\n try {\n await centralCore.init();\n const rootProject = await ensureDesktopRuntimeProject(centralCore, rootDir);\n await engineManager.startAll();\n engineManager.startReconciliation();\n const primaryEngine = await engineManager.ensureEngine(rootProject.id);\n const app = createServer(store as never, {\n engine: primaryEngine,\n engineManager,\n centralCore,\n onProjectFirstAccessed: (projectId: string) => engineManager.onProjectAccessed(projectId),\n });\n\n return {\n server: app.listen(0),\n cleanup,\n };\n } catch (error) {\n await cleanup();\n throw error;\n }\n}\n\nfunction parsePort(raw: string | undefined): number | undefined {\n if (!raw) {\n return undefined;\n }\n\n const value = Number(raw);\n if (!Number.isInteger(value) || value <= 0) {\n return undefined;\n }\n\n return value;\n}\n\nfunction getAddressPort(server: Server): number {\n const address = server.address() as AddressInfo | null;\n const port = address?.port;\n if (!port) {\n throw new Error(\"Failed to resolve local server port\");\n }\n return port;\n}\n\nexport class LocalRuntimeManager {\n private runtime: RuntimeInstance | null = null;\n private startupPromise: Promise<DesktopRuntimeStatus> | null = null;\n private stopPromise: Promise<DesktopRuntimeStatus> | null = null;\n private status: DesktopRuntimeStatus = { source: \"none\", state: \"stopped\" };\n\n private readonly getExternalPort: () => number | undefined;\n private readonly createStore: (rootDir: string) => Promise<TaskStoreLike>;\n private readonly createDashboardServer: (store: TaskStoreLike, rootDir: string) => Promise<Server | { server: Server; cleanup?: RuntimeCleanup }>;\n\n constructor(private readonly options: LocalRuntimeManagerOptions) {\n this.getExternalPort = options.getExternalPort ?? (() => parsePort(process.env.FUSION_SERVER_PORT));\n this.createStore = options.createStore ?? createStoreDefault;\n this.createDashboardServer = options.createDashboardServer ?? createDashboardServerDefault;\n }\n\n getStatus(): DesktopRuntimeStatus {\n if (this.runtime) {\n return {\n source: \"embedded-local\",\n state: \"running\",\n port: this.runtime.port,\n baseUrl: this.runtime.baseUrl,\n };\n }\n\n const externalPort = this.getExternalPort();\n if (externalPort) {\n this.status = {\n source: \"external-cli\",\n state: \"running\",\n port: externalPort,\n baseUrl: `http://127.0.0.1:${externalPort}`,\n };\n }\n\n return this.status;\n }\n\n getServerPort(): number | undefined {\n return this.getStatus().port;\n }\n\n async startLocal(): Promise<DesktopRuntimeStatus> {\n const externalPort = this.getExternalPort();\n if (externalPort) {\n this.status = {\n source: \"external-cli\",\n state: \"running\",\n port: externalPort,\n baseUrl: `http://127.0.0.1:${externalPort}`,\n };\n return this.status;\n }\n\n if (this.runtime) {\n return this.getStatus();\n }\n\n if (this.startupPromise) {\n return this.startupPromise;\n }\n\n this.status = { source: \"embedded-local\", state: \"starting\" };\n this.startupPromise = this.startEmbedded();\n\n try {\n return await this.startupPromise;\n } finally {\n this.startupPromise = null;\n }\n }\n\n private async startEmbedded(): Promise<DesktopRuntimeStatus> {\n let store: TaskStoreLike | null = null;\n let server: Server | null = null;\n let cleanup: RuntimeCleanup | undefined;\n\n try {\n store = await this.createStore(this.options.rootDir);\n await store.init();\n await store.watch();\n\n const dashboardServer = await this.createDashboardServer(store, this.options.rootDir);\n cleanup = \"server\" in dashboardServer ? dashboardServer.cleanup : undefined;\n server = \"server\" in dashboardServer ? dashboardServer.server : dashboardServer;\n await Promise.race([\n once(server, \"listening\"),\n once(server, \"error\").then(([error]) => {\n throw error;\n }),\n ]);\n\n const port = getAddressPort(server);\n const baseUrl = `http://127.0.0.1:${port}`;\n this.runtime = { store, server, port, baseUrl, cleanup };\n this.status = { source: \"embedded-local\", state: \"running\", port, baseUrl };\n return this.status;\n } catch (error) {\n if (server) {\n await new Promise<void>((resolve) => {\n server!.close(() => resolve());\n });\n }\n await cleanup?.();\n if (store) {\n store.close();\n }\n this.runtime = null;\n this.status = {\n source: \"embedded-local\",\n state: \"error\",\n error: error instanceof Error ? error.message : String(error),\n };\n throw error;\n }\n }\n\n async stopLocal(): Promise<DesktopRuntimeStatus> {\n if (this.stopPromise) {\n return this.stopPromise;\n }\n\n this.stopPromise = this.stopInternal();\n try {\n return await this.stopPromise;\n } finally {\n this.stopPromise = null;\n }\n }\n\n private async stopInternal(): Promise<DesktopRuntimeStatus> {\n if (this.runtime) {\n const runtime = this.runtime;\n this.runtime = null;\n await new Promise<void>((resolve) => runtime.server.close(() => resolve()));\n await runtime.cleanup?.();\n runtime.store.close();\n this.status = { source: \"none\", state: \"stopped\" };\n return this.status;\n }\n\n if (this.getStatus().source === \"external-cli\") {\n return this.status;\n }\n\n this.status = { source: \"none\", state: \"stopped\" };\n return this.status;\n }\n}\n", "import { basename } from \"node:path\";\n\nimport type { CentralCore, RegisteredProject } from \"@fusion/core\";\n\n/*\n * FNXC:DesktopRuntime 2026-06-21-02:04:\n * Desktop local mode starts engines by default, so the embedded server should prefer the project represented by the desktop runtime root instead of whichever registered engine happens to be first. The runtime root may be a home directory, so this path must not call helpers that initialize Git repositories as a side effect.\n */\nexport async function ensureDesktopRuntimeProject(centralCore: CentralCore, rootDir: string): Promise<RegisteredProject> {\n const existing = await centralCore.getProjectByPath(rootDir);\n if (existing) {\n return existing;\n }\n\n const projects = await centralCore.listProjects();\n if (projects.length > 0) {\n return projects[0]!;\n }\n\n const registered = await centralCore.registerProject({\n path: rootDir,\n name: basename(rootDir) || \"Fusion Desktop\",\n isolationMode: \"in-process\",\n });\n return centralCore.updateProject(registered.id, { status: \"active\" });\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["
|
|
3
|
+
"sources": ["../src/main.ts", "../src/deep-link.ts", "../src/ipc.ts", "../src/native.ts", "../src/tray.ts", "../src/shell-settings.ts", "../src/menu.ts", "../src/renderer.ts", "../src/local-runtime.ts", "../src/engine-runtime.ts"],
|
|
4
|
+
"sourcesContent": ["import { app, BrowserWindow, nativeImage, screen, Tray } from \"electron\";\nimport { join, resolve } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { setupDeepLinkHandler, registerDeepLinkProtocol } from \"./deep-link.js\";\nimport { registerIpcHandlers } from \"./ipc.js\";\nimport { buildAppMenu } from \"./menu.js\";\nimport {\n DEFAULT_WINDOW_STATE,\n loadDesktopLaunchMode,\n loadWindowState,\n saveDesktopLaunchMode,\n saveWindowState,\n setupAutoUpdater,\n triggerUpdateCheck,\n startUpdateCheckInterval,\n normalizeDesktopRemoteLaunch,\n buildRemoteShellHandoffUrl,\n clampWindowStateToVisibleDisplay,\n type DesktopLaunchMode,\n type NormalizedDesktopRemoteLaunch,\n type WindowState,\n} from \"./native.js\";\nimport { setupTray } from \"./tray.js\";\nimport { getRendererUrl, getRendererFilePath, isUrlRenderer } from \"./renderer.js\";\nimport { LocalRuntimeManager } from \"./local-runtime.js\";\nimport { readShellSettings, writeShellSettings } from \"./shell-settings.js\";\n\n// Re-export for backward compatibility\nexport { IS_DEVELOPMENT } from \"./renderer.js\";\nexport { DASHBOARD_URL } from \"./renderer.js\";\n\ninterface AppWithQuitFlag {\n isQuitting?: boolean;\n}\n\nfunction enableSourceMaps(): void {\n const processWithSourceMaps = process as NodeJS.Process & {\n setSourceMapsEnabled?: (enabled: boolean) => void;\n };\n processWithSourceMaps.setSourceMapsEnabled?.(true);\n}\n\nenableSourceMaps();\n\nlet mainWindow: BrowserWindow | null = null;\nlet tray: Tray | null = null;\nlet localRuntimeManager: LocalRuntimeManager | null = null;\nlet currentDesktopLaunchMode: DesktopLaunchMode = \"choose\";\nlet currentRemoteLaunch: NormalizedDesktopRemoteLaunch | null = null;\nlet localRuntimeStartupAttempted = false;\nlet stopUpdateCheckInterval: (() => void) | null = null;\n\nfunction getAppWithQuitFlag(): Electron.App & AppWithQuitFlag {\n return app as Electron.App & AppWithQuitFlag;\n}\n\nasync function startLocalRuntimeOnce(): Promise<void> {\n if (!localRuntimeManager || localRuntimeStartupAttempted) {\n return;\n }\n\n const status = localRuntimeManager.getStatus();\n if (status.source === \"embedded-local\" && status.state === \"running\") {\n localRuntimeStartupAttempted = true;\n return;\n }\n\n localRuntimeStartupAttempted = true;\n await localRuntimeManager.startLocal();\n}\n\nexport function getCurrentDesktopLaunchMode(): DesktopLaunchMode {\n return currentDesktopLaunchMode;\n}\n\nasync function resetLaunchModeAndReload(window: BrowserWindow): Promise<void> {\n try {\n const settings = await readShellSettings();\n settings.desktopMode = null;\n settings.hasCompletedModeSelection = false;\n await writeShellSettings(settings);\n await saveDesktopLaunchMode(\"choose\");\n } catch (error) {\n console.error(\"[desktop/main] Failed to reset shell settings\", error);\n }\n if (localRuntimeManager) {\n try {\n await localRuntimeManager.stopLocal();\n } catch (error) {\n console.error(\"[desktop/main] Failed to stop local runtime during reset\", error);\n }\n }\n currentDesktopLaunchMode = \"choose\";\n currentRemoteLaunch = null;\n localRuntimeStartupAttempted = false;\n\n // Force a clean reload to the renderer entrypoint without any cached\n // serverBaseUrl / shellMode query params so the gate re-prompts.\n try {\n if (isUrlRenderer()) {\n await window.loadURL(getRendererUrl());\n } else {\n await window.loadFile(getRendererFilePath());\n }\n } catch (error) {\n console.error(\"[desktop/main] reload failed\", error);\n }\n}\n\nexport function createMainWindow(state?: WindowState, launchTargetUrl?: string): BrowserWindow {\n const hasValidPosition = typeof state?.x === \"number\" && typeof state?.y === \"number\";\n\n const window = new BrowserWindow({\n width: state?.width ?? DEFAULT_WINDOW_STATE.width,\n height: state?.height ?? DEFAULT_WINDOW_STATE.height,\n ...(hasValidPosition ? { x: state.x, y: state.y } : {}),\n title: \"Fusion\",\n webPreferences: {\n preload: join(import.meta.dirname, \"preload.js\"),\n contextIsolation: true,\n nodeIntegration: false,\n },\n });\n\n if (launchTargetUrl) {\n void window.loadURL(launchTargetUrl);\n } else if (isUrlRenderer()) {\n void window.loadURL(getRendererUrl());\n } else {\n void window.loadFile(getRendererFilePath());\n }\n\n const showFallbackTimer = setTimeout(() => {\n window.show();\n window.focus();\n }, 2000);\n\n window.once(\"ready-to-show\", () => {\n clearTimeout(showFallbackTimer);\n window.show();\n window.focus();\n });\n\n window.on(\"close\", (event) => {\n saveWindowState(window);\n\n if (getAppWithQuitFlag().isQuitting) {\n return;\n }\n\n event.preventDefault();\n window.hide();\n });\n\n window.on(\"closed\", () => {\n mainWindow = null;\n });\n\n mainWindow = window;\n return window;\n}\n\n/**\n * Resolve the project root for the embedded local runtime.\n *\n * Must NOT be `process.cwd()`: when a packaged build is launched from a desktop\n * launcher or file manager (notably the Linux AppImage), cwd is `/` or the\n * read-only squashfs mount point, so creating `<cwd>/.fusion/fusion.db` fails\n * with EACCES/EROFS and the local runtime never starts (\"Couldn't start local\n * Fusion\"). Anchor to a stable, writable per-user location instead \u2014 the home\n * directory, so data lives in `~/.fusion` (consistent with the CLI). Honor\n * `FUSION_HOME` for power users who want their data elsewhere.\n */\nexport function resolveLocalRuntimeRoot(): string {\n const override = process.env.FUSION_HOME?.trim();\n if (override) {\n return resolve(override);\n }\n return app.getPath(\"home\");\n}\n\nexport async function initializeApp(): Promise<void> {\n const state = await loadWindowState();\n const rememberedLaunchMode = await loadDesktopLaunchMode();\n\n localRuntimeManager = new LocalRuntimeManager({ rootDir: resolveLocalRuntimeRoot() });\n currentDesktopLaunchMode = rememberedLaunchMode;\n currentRemoteLaunch = null;\n localRuntimeStartupAttempted = false;\n\n if (rememberedLaunchMode === \"remote\") {\n const shellSettings = await readShellSettings();\n const normalizedRemoteLaunch = normalizeDesktopRemoteLaunch(shellSettings);\n if (normalizedRemoteLaunch) {\n currentRemoteLaunch = normalizedRemoteLaunch;\n } else {\n currentDesktopLaunchMode = \"choose\";\n await saveDesktopLaunchMode(\"choose\");\n }\n }\n\n if (rememberedLaunchMode === \"local\") {\n try {\n await startLocalRuntimeOnce();\n } catch (error) {\n await localRuntimeManager.stopLocal();\n currentDesktopLaunchMode = \"choose\";\n localRuntimeStartupAttempted = false;\n await saveDesktopLaunchMode(\"choose\");\n console.error(\"[desktop/main] Failed to restore local mode; falling back to chooser\", error);\n }\n }\n\n if (currentDesktopLaunchMode === \"choose\" && process.env.FUSION_DESKTOP_MODE === \"local\") {\n await startLocalRuntimeOnce();\n currentDesktopLaunchMode = \"local\";\n }\n\n const windowState = state\n ? clampWindowStateToVisibleDisplay(\n state,\n typeof screen?.getAllDisplays === \"function\"\n ? screen.getAllDisplays().map((display) => ({ workArea: display.workArea }))\n : [],\n )\n : undefined;\n\n const createdWindow = createMainWindow(\n windowState,\n currentDesktopLaunchMode === \"remote\" && currentRemoteLaunch\n ? buildRemoteShellHandoffUrl(currentRemoteLaunch)\n : undefined,\n );\n\n buildAppMenu({\n mainWindow: createdWindow,\n appName: \"Fusion\",\n onChangeLaunchMode: async () => {\n await resetLaunchModeAndReload(createdWindow);\n },\n /*\n * FNXC:DesktopRuntimeMode 2026-06-21-02:04:\n * Menu-driven local/remote switching must only persist local mode after the embedded runtime starts successfully; shutdown stops the local server without rewriting the launch-mode preference.\n */\n onStartLocalRuntime: async () => {\n if (!localRuntimeManager) return;\n localRuntimeStartupAttempted = false;\n await startLocalRuntimeOnce();\n currentRemoteLaunch = null;\n currentDesktopLaunchMode = \"local\";\n await saveDesktopLaunchMode(\"local\");\n createdWindow.webContents.reload();\n },\n onStopLocalRuntime: async () => {\n await localRuntimeManager?.stopLocal();\n },\n onConnectRemoteServer: async () => {\n await resetLaunchModeAndReload(createdWindow);\n },\n onCheckForUpdates: async () => {\n await triggerUpdateCheck(createdWindow);\n },\n });\n\n tray = new Tray(nativeImage.createEmpty());\n setupTray(createdWindow, tray);\n\n registerIpcHandlers(createdWindow, tray, {\n onDesktopModeChange: async (mode) => {\n if (!localRuntimeManager) {\n return;\n }\n currentDesktopLaunchMode = mode;\n if (mode === \"local\") {\n currentRemoteLaunch = null;\n localRuntimeStartupAttempted = false;\n await startLocalRuntimeOnce();\n } else {\n localRuntimeStartupAttempted = false;\n await localRuntimeManager.stopLocal();\n const shellSettings = await readShellSettings();\n currentRemoteLaunch = normalizeDesktopRemoteLaunch({ ...shellSettings, desktopMode: \"remote\" });\n }\n await saveDesktopLaunchMode(mode);\n },\n onDesktopLaunchModeChange: async (mode) => {\n if (!localRuntimeManager) {\n return;\n }\n currentDesktopLaunchMode = mode;\n localRuntimeStartupAttempted = false;\n if (mode === \"local\") {\n currentRemoteLaunch = null;\n await startLocalRuntimeOnce();\n } else {\n await localRuntimeManager.stopLocal();\n const shellSettings = await readShellSettings();\n currentRemoteLaunch = normalizeDesktopRemoteLaunch({ ...shellSettings, desktopMode: \"remote\" });\n }\n await saveDesktopLaunchMode(mode);\n },\n getRuntimeStatus: () => localRuntimeManager?.getStatus() ?? { source: \"none\", state: \"stopped\" },\n startLocalRuntime: () => localRuntimeManager?.startLocal() ?? Promise.resolve({ source: \"none\", state: \"stopped\" }),\n stopLocalRuntime: () => localRuntimeManager?.stopLocal() ?? Promise.resolve({ source: \"none\", state: \"stopped\" }),\n getServerPort: () => localRuntimeManager?.getServerPort(),\n getDesktopLaunchMode: () => currentDesktopLaunchMode,\n getDesktopLaunchContext: () => currentRemoteLaunch,\n });\n registerDeepLinkProtocol();\n setupDeepLinkHandler(createdWindow);\n setupAutoUpdater(createdWindow);\n stopUpdateCheckInterval = startUpdateCheckInterval(createdWindow);\n\n if (windowState?.isMaximized === true) {\n createdWindow.maximize();\n }\n}\n\nexport function run(): void {\n const appWithQuitFlag = getAppWithQuitFlag();\n appWithQuitFlag.isQuitting = false;\n\n void app.whenReady().then(() => initializeApp());\n\n app.on(\"window-all-closed\", () => {\n if (process.platform !== \"darwin\") {\n app.quit();\n }\n });\n\n app.on(\"before-quit\", () => {\n appWithQuitFlag.isQuitting = true;\n\n if (stopUpdateCheckInterval) {\n stopUpdateCheckInterval();\n stopUpdateCheckInterval = null;\n }\n\n if (tray) {\n tray.destroy();\n tray = null;\n }\n\n if (localRuntimeManager) {\n void localRuntimeManager.stopLocal();\n }\n });\n\n app.on(\"activate\", () => {\n if (mainWindow === null) {\n const window = createMainWindow();\n window.show();\n return;\n }\n // The close handler hides the window instead of destroying it, so a\n // subsequent dock/Finder activate must explicitly show + focus it \u2014\n // otherwise the app appears to do nothing when relaunched.\n if (!mainWindow.isVisible()) {\n mainWindow.show();\n }\n mainWindow.focus();\n });\n}\n\nconst modulePath = fileURLToPath(import.meta.url);\nconst isElectronMain =\n (process as NodeJS.Process & { type?: string }).type === \"browser\";\nconst isDirectInvocation =\n !!process.argv[1] && resolve(process.argv[1]) === modulePath;\nif (isElectronMain || isDirectInvocation) {\n run();\n}\n", "import { app, BrowserWindow } from \"electron\";\n\nexport interface DeepLinkResult {\n type: \"task\" | \"project\" | \"unknown\";\n id: string;\n raw: string;\n}\n\nconst DEEP_LINK_EVENT = \"deep-link\";\nconst FUSION_SCHEME = \"fusion:\";\n\nexport function registerDeepLinkProtocol(): void {\n try {\n const isRegistered = app.setAsDefaultProtocolClient(\"fusion\");\n if (!isRegistered) {\n console.warn(\"[desktop/deep-link] Failed to register fusion:// protocol\");\n return;\n }\n\n console.log(\"[desktop/deep-link] Registered fusion:// protocol handler\");\n } catch (error) {\n console.error(\"[desktop/deep-link] Error while registering fusion:// protocol\", error);\n }\n}\n\nexport function parseDeepLink(rawUrl: string): DeepLinkResult | null {\n if (!rawUrl) {\n return null;\n }\n\n try {\n const parsedUrl = new URL(rawUrl);\n\n if (parsedUrl.protocol !== FUSION_SCHEME) {\n return null;\n }\n\n const type = parsedUrl.hostname;\n if (type !== \"task\" && type !== \"project\") {\n return null;\n }\n\n const pathSegments = parsedUrl.pathname\n .split(\"/\")\n .filter((segment) => segment.length > 0);\n\n const decodedId = pathSegments.length > 0 ? decodeURIComponent(pathSegments[0]) : \"\";\n\n return {\n type,\n id: decodedId,\n raw: rawUrl,\n };\n } catch {\n return null;\n }\n}\n\nexport function handleDeepLink(mainWindow: BrowserWindow, url: string): void {\n const parsed = parseDeepLink(url);\n\n if (!parsed || parsed.type === \"unknown\") {\n console.warn(`[desktop/deep-link] Ignoring unsupported deep link: ${url}`);\n return;\n }\n\n if (!mainWindow.isVisible()) {\n mainWindow.show();\n }\n\n if (mainWindow.isMinimized()) {\n mainWindow.restore();\n }\n\n mainWindow.focus();\n mainWindow.webContents.send(DEEP_LINK_EVENT, parsed);\n}\n\nexport function setupDeepLinkHandler(mainWindow: BrowserWindow): void {\n const hasLock = app.requestSingleInstanceLock();\n if (!hasLock) {\n app.quit();\n return;\n }\n\n app.on(\"open-url\", (event, url) => {\n event.preventDefault();\n handleDeepLink(mainWindow, url);\n });\n\n app.on(\"second-instance\", (_event, argv) => {\n const deepLink = argv.find((arg) => arg.startsWith(\"fusion://\"));\n if (!deepLink) {\n return;\n }\n\n handleDeepLink(mainWindow, deepLink);\n });\n}\n", "import { app, type BrowserWindow, ipcMain, type Tray } from \"electron\";\nimport {\n showExportSettingsDialog,\n showImportSettingsDialog,\n triggerUpdateCheck,\n type NormalizedDesktopRemoteLaunch,\n} from \"./native.js\";\nimport { type EngineStatus, updateTrayStatus } from \"./tray.js\";\nimport {\n applyDeleteProfile,\n applySetActiveProfile,\n buildSavedProfile,\n getDesktopShellModeState,\n readShellSettings,\n writeShellSettings,\n type DesktopShellMode,\n type ShellConnectionProfile,\n} from \"./shell-settings.js\";\nimport type { DesktopRuntimeStatus } from \"./local-runtime.js\";\n\ninterface ShellConnectionProfileInput {\n id?: string;\n name: string;\n serverUrl: string;\n authToken?: string | null;\n}\n\ninterface ShellConnectionState {\n host: \"desktop-shell\";\n desktopModeState: {\n isFirstRun: boolean;\n desktopMode: DesktopShellMode | null;\n };\n desktopMode?: DesktopShellMode;\n activeProfileId: string | null;\n profiles: ShellConnectionProfile[];\n localRuntime?: DesktopRuntimeStatus;\n}\n\ntype DesktopLaunchMode = \"choose\" | \"local\" | \"remote\";\n\ninterface RegisterIpcOptions {\n onDesktopModeChange?: (mode: DesktopShellMode) => Promise<void>;\n onDesktopLaunchModeChange?: (mode: DesktopLaunchMode) => Promise<void>;\n getRuntimeStatus?: () => DesktopRuntimeStatus;\n startLocalRuntime?: () => Promise<DesktopRuntimeStatus>;\n stopLocalRuntime?: () => Promise<DesktopRuntimeStatus>;\n getServerPort?: () => number | undefined;\n getDesktopLaunchMode?: () => DesktopLaunchMode;\n getDesktopLaunchContext?: () => NormalizedDesktopRemoteLaunch | null;\n}\n\nfunction isDesktopLaunchMode(value: unknown): value is DesktopLaunchMode {\n return value === \"choose\" || value === \"local\" || value === \"remote\";\n}\n\nfunction toShellState(\n settings: Awaited<ReturnType<typeof readShellSettings>>,\n runtimeStatus?: DesktopRuntimeStatus,\n): ShellConnectionState {\n return {\n host: \"desktop-shell\",\n desktopModeState: getDesktopShellModeState(settings),\n desktopMode: settings.desktopMode ?? undefined,\n activeProfileId: settings.activeProfileId,\n profiles: settings.profiles,\n localRuntime: runtimeStatus ?? { source: \"none\", state: \"stopped\" },\n };\n}\n\nasync function emitShellState(\n mainWindow: BrowserWindow,\n getRuntimeStatus?: () => DesktopRuntimeStatus,\n): Promise<ShellConnectionState> {\n const state = toShellState(await readShellSettings(), getRuntimeStatus?.());\n mainWindow.webContents.send(\"shell:state\", state);\n return state;\n}\n\nexport function registerIpcHandlers(mainWindow: BrowserWindow, tray: Tray, options: RegisterIpcOptions = {}): void {\n ipcMain.handle(\"window:minimize\", () => mainWindow.minimize());\n ipcMain.handle(\"window:maximize\", () => {\n const isCurrentlyMaximized = mainWindow.isMaximized();\n if (isCurrentlyMaximized) {\n mainWindow.unmaximize();\n return false;\n }\n mainWindow.maximize();\n return true;\n });\n ipcMain.handle(\"window:close\", () => mainWindow.close());\n ipcMain.handle(\"window:isMaximized\", () => mainWindow.isMaximized());\n ipcMain.handle(\"platform:get\", () => process.platform);\n\n ipcMain.handle(\"app:getSystemInfo\", () => ({\n platform: process.platform,\n arch: process.arch,\n electronVersion: process.versions.electron,\n nodeVersion: process.versions.node,\n appVersion: app.getVersion(),\n }));\n\n ipcMain.handle(\"app:checkForUpdates\", async () => {\n try {\n return await triggerUpdateCheck(mainWindow);\n } catch (error) {\n return { status: \"error\" as const, error: error instanceof Error ? error.message : String(error) };\n }\n });\n\n ipcMain.handle(\"tray:updateStatus\", (_event, status: EngineStatus) => updateTrayStatus(tray, status));\n ipcMain.handle(\"native:showExportDialog\", () => showExportSettingsDialog(mainWindow));\n ipcMain.handle(\"native:showImportDialog\", () => showImportSettingsDialog(mainWindow));\n ipcMain.handle(\"app:getServerPort\", () => options.getServerPort?.());\n\n ipcMain.handle(\"desktopRuntime:getStatus\", async () => options.getRuntimeStatus?.() ?? { source: \"none\", state: \"stopped\" });\n ipcMain.handle(\"desktopRuntime:startLocal\", async () => options.startLocalRuntime?.() ?? { source: \"none\", state: \"stopped\" });\n ipcMain.handle(\"desktopRuntime:stopLocal\", async () => options.stopLocalRuntime?.() ?? { source: \"none\", state: \"stopped\" });\n ipcMain.handle(\"desktopLaunchMode:getMode\", async () => options.getDesktopLaunchMode?.() ?? \"choose\");\n ipcMain.handle(\"desktopLaunchMode:getContext\", async () => options.getDesktopLaunchContext?.() ?? null);\n ipcMain.handle(\"desktopLaunchMode:setMode\", async (_event, mode: unknown) => {\n if (!isDesktopLaunchMode(mode)) {\n throw new Error(\"Invalid desktop launch mode\");\n }\n\n if (options.onDesktopLaunchModeChange) {\n await options.onDesktopLaunchModeChange(mode);\n return options.getDesktopLaunchMode?.() ?? mode;\n }\n\n if ((mode === \"local\" || mode === \"remote\") && options.onDesktopModeChange) {\n await options.onDesktopModeChange(mode);\n return options.getDesktopLaunchMode?.() ?? mode;\n }\n\n return options.getDesktopLaunchMode?.() ?? mode;\n });\n\n ipcMain.handle(\"shell:getState\", () => readShellSettings().then((settings) => toShellState(settings, options.getRuntimeStatus?.())));\n ipcMain.handle(\"shell:listProfiles\", async () => (await readShellSettings()).profiles);\n\n ipcMain.handle(\"shell:saveProfile\", async (_event, profile: ShellConnectionProfileInput) => {\n const settings = await readShellSettings();\n const nextProfile = buildSavedProfile(settings, profile);\n const existing = settings.profiles.find((item) => item.id === nextProfile.id);\n\n settings.profiles = existing\n ? settings.profiles.map((item) => (item.id === existing.id ? nextProfile : item))\n : [...settings.profiles, nextProfile];\n await writeShellSettings(settings);\n await emitShellState(mainWindow, options.getRuntimeStatus);\n return nextProfile;\n });\n\n ipcMain.handle(\"shell:deleteProfile\", async (_event, profileId: string) => {\n const settings = applyDeleteProfile(await readShellSettings(), profileId);\n await writeShellSettings(settings);\n await emitShellState(mainWindow, options.getRuntimeStatus);\n });\n\n ipcMain.handle(\"shell:setActiveProfile\", async (_event, profileId: string | null) => {\n const settings = applySetActiveProfile(await readShellSettings(), profileId);\n await writeShellSettings(settings);\n return emitShellState(mainWindow, options.getRuntimeStatus);\n });\n\n ipcMain.handle(\"shell:getDesktopModeState\", async () => {\n const settings = await readShellSettings();\n return getDesktopShellModeState(settings);\n });\n\n ipcMain.handle(\"shell:setDesktopMode\", async (_event, mode: DesktopShellMode) => {\n const settings = await readShellSettings();\n settings.desktopMode = mode;\n settings.hasCompletedModeSelection = true;\n await writeShellSettings(settings);\n await options.onDesktopModeChange?.(mode);\n return emitShellState(mainWindow, options.getRuntimeStatus);\n });\n\n ipcMain.handle(\"shell:resetDesktopMode\", async () => {\n const settings = await readShellSettings();\n settings.desktopMode = null;\n settings.hasCompletedModeSelection = false;\n await writeShellSettings(settings);\n // Stop the embedded runtime so a subsequent local choice spins up fresh.\n await options.stopLocalRuntime?.().catch(() => undefined);\n return emitShellState(mainWindow, options.getRuntimeStatus);\n });\n\n ipcMain.handle(\"shell:startQrScan\", async () => {\n throw new Error(\"QR scanning is not available in desktop shell\");\n });\n\n ipcMain.handle(\"shell:openConnectionManager\", () => {\n mainWindow.webContents.send(\"shell:open-connection-manager\");\n });\n}\n", "import { readFile, rename, writeFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport {\n app,\n BrowserWindow,\n dialog,\n Notification,\n type OpenDialogOptions,\n type SaveDialogOptions,\n} from \"electron\";\n\nexport interface WindowState {\n x?: number;\n y?: number;\n width: number;\n height: number;\n isMaximized: boolean;\n}\n\nexport interface DisplayWorkAreaLike {\n workArea: {\n x: number;\n y: number;\n width: number;\n height: number;\n };\n}\n\nconst MIN_VISIBLE_OVERLAP_PX = 64;\n\nexport function clampWindowStateToVisibleDisplay(\n state: WindowState,\n displays: DisplayWorkAreaLike[],\n): WindowState {\n if (state.x === undefined || state.y === undefined) {\n return state;\n }\n\n const windowLeft = state.x;\n const windowTop = state.y;\n const windowRight = state.x + state.width;\n const windowBottom = state.y + state.height;\n\n const hasSufficientOverlap = displays.some(({ workArea }) => {\n const displayLeft = workArea.x;\n const displayTop = workArea.y;\n const displayRight = workArea.x + workArea.width;\n const displayBottom = workArea.y + workArea.height;\n\n const overlapWidth = Math.max(0, Math.min(windowRight, displayRight) - Math.max(windowLeft, displayLeft));\n const overlapHeight = Math.max(0, Math.min(windowBottom, displayBottom) - Math.max(windowTop, displayTop));\n\n return overlapWidth >= MIN_VISIBLE_OVERLAP_PX && overlapHeight >= MIN_VISIBLE_OVERLAP_PX;\n });\n\n if (hasSufficientOverlap) {\n return state;\n }\n\n return {\n width: state.width,\n height: state.height,\n isMaximized: state.isMaximized,\n };\n}\n\nexport type DesktopLaunchMode = \"choose\" | \"local\" | \"remote\";\n\nexport interface DesktopRemoteProfileLike {\n id: string;\n name: string;\n serverUrl: string;\n authToken?: string | null;\n}\n\nexport interface DesktopShellSettingsLike {\n desktopMode: \"local\" | \"remote\" | null;\n activeProfileId: string | null;\n profiles: DesktopRemoteProfileLike[];\n}\n\nexport interface NormalizedDesktopRemoteLaunch {\n mode: \"remote\";\n profileId: string;\n serverBaseUrl: string;\n serverLabel?: string;\n authToken?: string;\n}\n\nexport const SHELL_HANDOFF_QUERY = {\n shellKind: \"shellKind\",\n shellMode: \"shellMode\",\n profileId: \"profileId\",\n serverBaseUrl: \"serverBaseUrl\",\n serverLabel: \"serverLabel\",\n token: \"token\",\n canOpenConnectionManager: \"shellCanOpenConnectionManager\",\n} as const;\n\nexport const DEFAULT_WINDOW_STATE: WindowState = {\n width: 1280,\n height: 900,\n isMaximized: false,\n};\n\ninterface DesktopNotificationOptions {\n silent?: boolean;\n onClick?: () => void;\n}\n\nfunction generateSettingsExportFilename(date: Date = new Date()): string {\n const year = date.getUTCFullYear();\n const month = String(date.getUTCMonth() + 1).padStart(2, \"0\");\n const day = String(date.getUTCDate()).padStart(2, \"0\");\n const hours = String(date.getUTCHours()).padStart(2, \"0\");\n const minutes = String(date.getUTCMinutes()).padStart(2, \"0\");\n const seconds = String(date.getUTCSeconds()).padStart(2, \"0\");\n\n return `fusion-settings-${year}-${month}-${day}-${hours}${minutes}${seconds}.json`;\n}\n\nfunction getWindowStatePath(): string {\n return join(app.getPath(\"userData\"), \"window-state.json\");\n}\n\nfunction getDesktopLaunchModePath(): string {\n return join(app.getPath(\"userData\"), \"desktop-launch-mode.json\");\n}\n\nfunction isValidWindowState(value: unknown): value is WindowState {\n if (value === null || typeof value !== \"object\") {\n return false;\n }\n\n const candidate = value as Partial<WindowState>;\n const hasValidPosition =\n (candidate.x === undefined || typeof candidate.x === \"number\") &&\n (candidate.y === undefined || typeof candidate.y === \"number\");\n\n return (\n hasValidPosition &&\n typeof candidate.width === \"number\" &&\n Number.isFinite(candidate.width) &&\n typeof candidate.height === \"number\" &&\n Number.isFinite(candidate.height) &&\n typeof candidate.isMaximized === \"boolean\"\n );\n}\n\nexport async function showExportSettingsDialog(parentWindow?: BrowserWindow): Promise<string | null> {\n const filename = generateSettingsExportFilename();\n const defaultPath = join(app.getPath(\"documents\"), filename);\n const dialogOptions: SaveDialogOptions = {\n title: \"Export Fusion Settings\",\n defaultPath,\n filters: [{ name: \"JSON Files\", extensions: [\"json\"] }],\n };\n\n const result = parentWindow\n ? await dialog.showSaveDialog(parentWindow, dialogOptions)\n : await dialog.showSaveDialog(dialogOptions);\n\n if (result.canceled || !result.filePath) {\n return null;\n }\n\n return result.filePath;\n}\n\nexport async function showImportSettingsDialog(parentWindow?: BrowserWindow): Promise<string | null> {\n const dialogOptions: OpenDialogOptions = {\n title: \"Import Fusion Settings\",\n properties: [\"openFile\"],\n filters: [{ name: \"JSON Files\", extensions: [\"json\"] }],\n };\n\n const result = parentWindow\n ? await dialog.showOpenDialog(parentWindow, dialogOptions)\n : await dialog.showOpenDialog(dialogOptions);\n\n if (result.canceled || result.filePaths.length === 0) {\n return null;\n }\n\n return result.filePaths[0] ?? null;\n}\n\nexport function showDesktopNotification(\n title: string,\n body: string,\n options: DesktopNotificationOptions = {},\n): void {\n if (!Notification.isSupported()) {\n console.warn(\"[desktop/native] Notifications are not supported in this environment\");\n return;\n }\n\n try {\n const notification = new Notification({\n title,\n body,\n silent: options.silent,\n });\n\n if (options.onClick) {\n notification.on(\"click\", options.onClick);\n }\n\n notification.show();\n } catch (error) {\n console.error(\"[desktop/native] Failed to display desktop notification\", error);\n }\n}\n\ntype AutoUpdaterLike = {\n autoDownload: boolean;\n autoInstallOnAppQuit: boolean;\n on: (event: string, handler: (...args: unknown[]) => void) => unknown;\n checkForUpdates: () => Promise<unknown>;\n};\n\nlet cachedAutoUpdater: AutoUpdaterLike | null = null;\nlet autoUpdaterLoadPromise: Promise<AutoUpdaterLike | null> | null = null;\nlet listenersBound = false;\nlet hasRunInitialUpdateCheck = false;\nlet autoUpdaterWindow: BrowserWindow | undefined;\nlet updateIntervalTimer: ReturnType<typeof setInterval> | null = null;\nlet updateIntervalDisposer: (() => void) | null = null;\nlet updateIntervalWindow: BrowserWindow | null = null;\n\nfunction getErrorMessage(error: unknown): string {\n if (error instanceof Error) {\n return error.message;\n }\n if (typeof error === \"string\") {\n return error;\n }\n return \"Unknown error\";\n}\n\nasync function resolveAutoUpdater(): Promise<AutoUpdaterLike | null> {\n if (cachedAutoUpdater) {\n return cachedAutoUpdater;\n }\n\n if (!autoUpdaterLoadPromise) {\n autoUpdaterLoadPromise = (async () => {\n try {\n const mod = (await import(\"electron-updater\")) as {\n default?: { autoUpdater?: unknown };\n autoUpdater?: unknown;\n };\n const namedAutoUpdater = \"autoUpdater\" in mod ? (mod as { autoUpdater?: unknown }).autoUpdater : undefined;\n const autoUpdater = (mod.default?.autoUpdater ?? namedAutoUpdater) as AutoUpdaterLike | undefined;\n\n if (!autoUpdater) {\n console.warn(\"[desktop/native] Auto-updater module loaded without autoUpdater export\");\n return null;\n }\n\n cachedAutoUpdater = autoUpdater;\n return autoUpdater;\n } catch (error) {\n console.warn(\"[desktop/native] Auto-updater unavailable\", error);\n return null;\n }\n })();\n }\n\n return autoUpdaterLoadPromise;\n}\n\nfunction bindAutoUpdaterListeners(autoUpdater: AutoUpdaterLike): void {\n if (listenersBound) {\n return;\n }\n\n listenersBound = true;\n autoUpdater.autoDownload = true;\n autoUpdater.autoInstallOnAppQuit = true;\n\n autoUpdater.on(\"update-available\", (info) => {\n showDesktopNotification(\"Fusion Update Available\", \"Update available \u2014 downloading in background\", {\n silent: true,\n });\n autoUpdaterWindow?.webContents.send(\"update-available\", info);\n });\n\n autoUpdater.on(\"update-downloaded\", (info) => {\n showDesktopNotification(\"Fusion Update Ready\", \"Update ready \u2014 will install on quit\", {\n silent: true,\n });\n autoUpdaterWindow?.webContents.send(\"update-downloaded\", info);\n });\n\n autoUpdater.on(\"update-not-available\", (info) => {\n showDesktopNotification(\"Fusion is up to date\", \"You're on the latest version\", {\n silent: true,\n });\n autoUpdaterWindow?.webContents.send(\"update-not-available\", info);\n });\n\n autoUpdater.on(\"error\", (error) => {\n const message = getErrorMessage(error);\n console.error(\"[desktop/native] Auto-updater error\", error);\n autoUpdaterWindow?.webContents.send(\"update-error\", { message });\n });\n}\n\nexport function setupAutoUpdater(mainWindow?: BrowserWindow): void {\n if (mainWindow) {\n autoUpdaterWindow = mainWindow;\n }\n\n void (async () => {\n try {\n const autoUpdater = await resolveAutoUpdater();\n if (!autoUpdater) {\n return;\n }\n\n bindAutoUpdaterListeners(autoUpdater);\n\n if (hasRunInitialUpdateCheck) {\n return;\n }\n\n hasRunInitialUpdateCheck = true;\n await autoUpdater.checkForUpdates().catch((error: unknown) => {\n console.error(\"[desktop/native] Auto-updater check failed\", error);\n });\n } catch (error) {\n console.warn(\"[desktop/native] Auto-updater setup failed\", error);\n }\n })();\n}\n\nexport async function triggerUpdateCheck(\n mainWindow?: BrowserWindow,\n): Promise<{ status: \"checking\" } | { status: \"unavailable\"; reason: string } | { status: \"error\"; error: string }> {\n setupAutoUpdater(mainWindow);\n\n const autoUpdater = await resolveAutoUpdater();\n if (!autoUpdater) {\n return { status: \"unavailable\", reason: \"updater_unavailable\" };\n }\n\n try {\n await autoUpdater.checkForUpdates();\n return { status: \"checking\" };\n } catch (error) {\n return { status: \"error\", error: getErrorMessage(error) };\n }\n}\n\nexport function startUpdateCheckInterval(mainWindow: BrowserWindow, intervalMs = 4 * 60 * 60 * 1000): () => void {\n autoUpdaterWindow = mainWindow;\n\n if (updateIntervalDisposer && updateIntervalWindow === mainWindow) {\n return updateIntervalDisposer;\n }\n\n if (updateIntervalTimer) {\n clearInterval(updateIntervalTimer);\n updateIntervalTimer = null;\n }\n\n updateIntervalWindow = mainWindow;\n updateIntervalTimer = setInterval(() => {\n void triggerUpdateCheck(mainWindow);\n }, intervalMs);\n\n updateIntervalDisposer = () => {\n if (updateIntervalTimer) {\n clearInterval(updateIntervalTimer);\n updateIntervalTimer = null;\n }\n updateIntervalDisposer = null;\n updateIntervalWindow = null;\n };\n\n return updateIntervalDisposer;\n}\n\nfunction normalizeServerBaseUrl(serverUrl: string): string | null {\n try {\n const parsed = new URL(serverUrl);\n if (parsed.protocol !== \"http:\" && parsed.protocol !== \"https:\") {\n return null;\n }\n return parsed.toString().replace(/\\/$/, \"\");\n } catch {\n return null;\n }\n}\n\nexport function normalizeDesktopRemoteLaunch(settings: DesktopShellSettingsLike): NormalizedDesktopRemoteLaunch | null {\n if (settings.desktopMode !== \"remote\" || !settings.activeProfileId) {\n return null;\n }\n\n const activeProfile = settings.profiles.find((profile) => profile.id === settings.activeProfileId);\n if (!activeProfile) {\n return null;\n }\n\n const serverBaseUrl = normalizeServerBaseUrl(activeProfile.serverUrl);\n if (!serverBaseUrl) {\n return null;\n }\n\n return {\n mode: \"remote\",\n profileId: activeProfile.id,\n serverBaseUrl,\n ...(activeProfile.name ? { serverLabel: activeProfile.name } : {}),\n ...(activeProfile.authToken ? { authToken: activeProfile.authToken } : {}),\n };\n}\n\nexport function buildRemoteShellHandoffUrl(launch: NormalizedDesktopRemoteLaunch): string {\n const url = new URL(launch.serverBaseUrl);\n url.searchParams.set(SHELL_HANDOFF_QUERY.shellKind, \"desktop\");\n url.searchParams.set(SHELL_HANDOFF_QUERY.shellMode, \"remote\");\n url.searchParams.set(SHELL_HANDOFF_QUERY.profileId, launch.profileId);\n url.searchParams.set(SHELL_HANDOFF_QUERY.serverBaseUrl, launch.serverBaseUrl);\n if (launch.serverLabel) {\n url.searchParams.set(SHELL_HANDOFF_QUERY.serverLabel, launch.serverLabel);\n }\n if (launch.authToken) {\n url.searchParams.set(SHELL_HANDOFF_QUERY.token, launch.authToken);\n }\n url.searchParams.set(SHELL_HANDOFF_QUERY.canOpenConnectionManager, \"1\");\n return url.toString();\n}\n\nfunction isValidDesktopLaunchMode(value: unknown): value is DesktopLaunchMode {\n return value === \"choose\" || value === \"local\" || value === \"remote\";\n}\n\nexport async function loadDesktopLaunchMode(): Promise<DesktopLaunchMode> {\n const launchModePath = getDesktopLaunchModePath();\n\n try {\n const raw = await readFile(launchModePath, \"utf-8\");\n const parsed: unknown = JSON.parse(raw);\n\n if (parsed && typeof parsed === \"object\" && \"mode\" in parsed) {\n const mode = (parsed as { mode?: unknown }).mode;\n if (isValidDesktopLaunchMode(mode)) {\n return mode;\n }\n }\n\n return \"choose\";\n } catch {\n return \"choose\";\n }\n}\n\nexport async function saveDesktopLaunchMode(mode: DesktopLaunchMode): Promise<void> {\n const launchModePath = getDesktopLaunchModePath();\n const tempPath = `${launchModePath}.tmp`;\n\n await writeFile(tempPath, JSON.stringify({ mode }, null, 2), \"utf-8\");\n await rename(tempPath, launchModePath);\n}\n\nexport async function loadWindowState(): Promise<WindowState | null> {\n const statePath = getWindowStatePath();\n\n try {\n const raw = await readFile(statePath, \"utf-8\");\n const parsed: unknown = JSON.parse(raw);\n\n if (!isValidWindowState(parsed)) {\n return null;\n }\n\n return parsed;\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") {\n return null;\n }\n\n return null;\n }\n}\n\nexport function saveWindowState(mainWindow: BrowserWindow): void {\n if (mainWindow.isDestroyed()) {\n return;\n }\n\n const bounds = mainWindow.getBounds();\n const state: WindowState = {\n x: bounds.x,\n y: bounds.y,\n width: bounds.width,\n height: bounds.height,\n isMaximized: mainWindow.isMaximized(),\n };\n\n const statePath = getWindowStatePath();\n const tempPath = `${statePath}.tmp`;\n\n void writeFile(tempPath, JSON.stringify(state, null, 2), \"utf-8\")\n .then(() => rename(tempPath, statePath))\n .catch((error) => {\n console.error(\"[desktop/native] Failed to save window state\", error);\n });\n}\n", "import path from \"node:path\";\nimport {\n app,\n BrowserWindow,\n Menu,\n nativeImage,\n Tray,\n type MenuItemConstructorOptions,\n type NativeImage,\n} from \"electron\";\n\nexport type EngineStatus = \"running\" | \"paused\" | \"stopped\";\n\nexport interface TrayMenuOptions {\n isWindowVisible: boolean;\n engineStatus: EngineStatus;\n}\n\ninterface TrayState {\n mainWindow: BrowserWindow;\n engineStatus: EngineStatus;\n isQuitting: boolean;\n}\n\nconst trayState = new WeakMap<Tray, TrayState>();\n\nfunction toggleMainWindow(mainWindow: BrowserWindow): void {\n if (mainWindow.isVisible()) {\n mainWindow.hide();\n return;\n }\n\n mainWindow.show();\n mainWindow.focus();\n}\n\nfunction resolveEngineMenuLabel(engineStatus: EngineStatus): string {\n return engineStatus === \"running\" ? \"Pause Engine\" : \"Resume Engine\";\n}\n\nfunction applyTrayMenu(tray: Tray, state: TrayState): void {\n const baseTemplate = buildTrayContextMenu({\n isWindowVisible: state.mainWindow.isVisible(),\n engineStatus: state.engineStatus,\n });\n\n const contextTemplate = baseTemplate.map((item) => {\n if (item.type === \"separator\") {\n return item;\n }\n\n if (item.label === \"Show Window\" || item.label === \"Hide Window\") {\n return {\n ...item,\n click: () => toggleMainWindow(state.mainWindow),\n };\n }\n\n if (item.label === \"Pause Engine\" || item.label === \"Resume Engine\") {\n return {\n ...item,\n click: () => {\n if (state.engineStatus === \"stopped\") {\n return;\n }\n\n state.engineStatus = state.engineStatus === \"running\" ? \"paused\" : \"running\";\n applyTrayMenu(tray, state);\n },\n };\n }\n\n return {\n ...item,\n click: () => {\n state.isQuitting = true;\n app.quit();\n },\n };\n });\n\n tray.setToolTip(getTrayTooltip(state.engineStatus));\n tray.setContextMenu(Menu.buildFromTemplate(contextTemplate));\n}\n\nexport function createTrayIcon(): NativeImage {\n if (process.platform === \"darwin\") {\n const iconPath = path.join(import.meta.dirname, \"icons\", \"tray-32.png\");\n const retinaIcon = nativeImage.createFromPath(iconPath);\n return retinaIcon.resize({ width: 16, height: 16 });\n }\n\n const iconPath = path.join(import.meta.dirname, \"icons\", \"tray-48.png\");\n return nativeImage.createFromPath(iconPath);\n}\n\nexport function buildTrayContextMenu(options: TrayMenuOptions): MenuItemConstructorOptions[] {\n return [\n {\n label: options.isWindowVisible ? \"Hide Window\" : \"Show Window\",\n },\n {\n type: \"separator\",\n },\n {\n label: resolveEngineMenuLabel(options.engineStatus),\n enabled: options.engineStatus !== \"stopped\",\n },\n {\n type: \"separator\",\n },\n {\n label: \"Quit Fusion\",\n },\n ];\n}\n\nexport function getTrayTooltip(status: EngineStatus): string {\n switch (status) {\n case \"paused\":\n return \"Fusion \u2014 Paused\";\n case \"stopped\":\n return \"Fusion \u2014 Stopped\";\n case \"running\":\n default:\n return \"Fusion \u2014 Running\";\n }\n}\n\nexport function setupTray(mainWindow: BrowserWindow, tray: Tray): Tray {\n const state: TrayState = {\n mainWindow,\n engineStatus: \"running\",\n isQuitting: false,\n };\n\n trayState.set(tray, state);\n\n tray.setImage(createTrayIcon());\n applyTrayMenu(tray, state);\n\n tray.on(\"click\", () => {\n toggleMainWindow(mainWindow);\n });\n\n mainWindow.on(\"show\", () => {\n applyTrayMenu(tray, state);\n });\n\n mainWindow.on(\"hide\", () => {\n applyTrayMenu(tray, state);\n });\n\n mainWindow.on(\"close\", (event) => {\n if (state.isQuitting) {\n return;\n }\n\n event.preventDefault();\n mainWindow.hide();\n });\n\n app.on(\"before-quit\", () => {\n state.isQuitting = true;\n });\n\n return tray;\n}\n\nexport function updateTrayStatus(tray: Tray, status: EngineStatus): void {\n const state = trayState.get(tray);\n\n if (!state) {\n tray.setToolTip(getTrayTooltip(status));\n const menu = Menu.buildFromTemplate(\n buildTrayContextMenu({\n isWindowVisible: false,\n engineStatus: status,\n }),\n );\n tray.setContextMenu(menu);\n return;\n }\n\n state.engineStatus = status;\n applyTrayMenu(tray, state);\n}\n", "import { readFile, rename, writeFile } from \"node:fs/promises\";\nimport { createHash } from \"node:crypto\";\nimport { join } from \"node:path\";\nimport { app } from \"electron\";\n\nexport interface ShellConnectionProfile {\n id: string;\n name: string;\n serverUrl: string;\n authToken?: string | null;\n createdAt: string;\n updatedAt: string;\n lastUsedAt?: string | null;\n}\n\nexport type DesktopShellMode = \"local\" | \"remote\";\n\nexport interface DesktopShellModeState {\n isFirstRun: boolean;\n desktopMode: DesktopShellMode | null;\n}\n\nexport interface DesktopShellSettings {\n desktopMode: DesktopShellMode | null;\n hasCompletedModeSelection: boolean;\n activeProfileId: string | null;\n profiles: ShellConnectionProfile[];\n}\n\nconst DEFAULT_SETTINGS: DesktopShellSettings = {\n desktopMode: null,\n hasCompletedModeSelection: false,\n activeProfileId: null,\n profiles: [],\n};\n\nfunction getSettingsPath(): string {\n return join(app.getPath(\"userData\"), \"shell-connections.json\");\n}\n\nfunction nowIso(): string {\n return new Date().toISOString();\n}\n\nfunction normalizeDesktopMode(value: unknown): DesktopShellMode | null {\n return value === \"local\" || value === \"remote\" ? value : null;\n}\n\nfunction normalizeServerUrl(serverUrl: string): string {\n const normalized = serverUrl.trim().replace(/\\/$/, \"\");\n let parsed: URL;\n try {\n parsed = new URL(normalized);\n } catch {\n throw new Error(\"Server URL must be a valid absolute URL\");\n }\n if (!/^https?:$/.test(parsed.protocol)) {\n throw new Error(\"Server URL must use http or https\");\n }\n return normalized;\n}\n\nfunction normalizeProfileName(name: string): string {\n const normalized = name.trim().replace(/\\s+/g, \" \");\n return normalized.length > 0 ? normalized : \"Remote Server\";\n}\n\nfunction profileBaseId(name: string, serverUrl: string): string {\n const hash = createHash(\"sha1\").update(`${name}|${serverUrl}`).digest(\"hex\").slice(0, 10);\n return `profile_${hash}`;\n}\n\nfunction ensureUniqueProfileName(name: string, profiles: ShellConnectionProfile[], skipId?: string): string {\n const used = new Set(\n profiles.filter((profile) => profile.id !== skipId).map((profile) => profile.name.toLocaleLowerCase()),\n );\n if (!used.has(name.toLocaleLowerCase())) {\n return name;\n }\n let suffix = 2;\n let candidate = `${name} (${suffix})`;\n while (used.has(candidate.toLocaleLowerCase())) {\n suffix += 1;\n candidate = `${name} (${suffix})`;\n }\n return candidate;\n}\n\nfunction createDeterministicProfileId(name: string, serverUrl: string, profiles: ShellConnectionProfile[], skipId?: string): string {\n const used = new Set(profiles.filter((profile) => profile.id !== skipId).map((profile) => profile.id));\n const base = profileBaseId(name, serverUrl);\n if (!used.has(base)) {\n return base;\n }\n let suffix = 2;\n let candidate = `${base}_${suffix}`;\n while (used.has(candidate)) {\n suffix += 1;\n candidate = `${base}_${suffix}`;\n }\n return candidate;\n}\n\nfunction normalizeProfileRecord(input: unknown, fallbackIndex: number): ShellConnectionProfile | null {\n if (!input || typeof input !== \"object\") {\n return null;\n }\n const candidate = input as Partial<ShellConnectionProfile>;\n if (typeof candidate.serverUrl !== \"string\") {\n return null;\n }\n\n let serverUrl: string;\n try {\n serverUrl = normalizeServerUrl(candidate.serverUrl);\n } catch {\n return null;\n }\n\n const name = normalizeProfileName(typeof candidate.name === \"string\" ? candidate.name : \"\");\n const createdAt = typeof candidate.createdAt === \"string\" && candidate.createdAt.length > 0 ? candidate.createdAt : nowIso();\n const updatedAt = typeof candidate.updatedAt === \"string\" && candidate.updatedAt.length > 0 ? candidate.updatedAt : createdAt;\n return {\n id: typeof candidate.id === \"string\" && candidate.id.length > 0 ? candidate.id : `profile_imported_${fallbackIndex}`,\n name,\n serverUrl,\n authToken: typeof candidate.authToken === \"string\" ? candidate.authToken : null,\n createdAt,\n updatedAt,\n lastUsedAt: typeof candidate.lastUsedAt === \"string\" ? candidate.lastUsedAt : null,\n };\n}\n\nfunction normalize(input: unknown): DesktopShellSettings {\n if (!input || typeof input !== \"object\") {\n return { ...DEFAULT_SETTINGS };\n }\n\n const candidate = input as Partial<DesktopShellSettings>;\n const desktopMode = normalizeDesktopMode(candidate.desktopMode);\n const inferredCompleted = desktopMode !== null;\n\n const profiles: ShellConnectionProfile[] = [];\n const profileSource = Array.isArray(candidate.profiles) ? candidate.profiles : [];\n for (const [index, profileValue] of profileSource.entries()) {\n const normalizedProfile = normalizeProfileRecord(profileValue, index);\n if (!normalizedProfile) {\n continue;\n }\n const uniqueName = ensureUniqueProfileName(normalizedProfile.name, profiles);\n const idAlreadyUsed = profiles.some((profile) => profile.id === normalizedProfile.id);\n const id = idAlreadyUsed\n ? createDeterministicProfileId(uniqueName, normalizedProfile.serverUrl, profiles)\n : normalizedProfile.id;\n profiles.push({ ...normalizedProfile, name: uniqueName, id });\n }\n\n const persistedActiveId = typeof candidate.activeProfileId === \"string\" ? candidate.activeProfileId : null;\n const activeProfileId = persistedActiveId && profiles.some((profile) => profile.id === persistedActiveId)\n ? persistedActiveId\n : null;\n\n return {\n desktopMode,\n hasCompletedModeSelection: typeof candidate.hasCompletedModeSelection === \"boolean\" ? candidate.hasCompletedModeSelection : inferredCompleted,\n activeProfileId,\n profiles,\n };\n}\n\nexport function buildSavedProfile(\n settings: DesktopShellSettings,\n input: { id?: string; name: string; serverUrl: string; authToken?: string | null },\n): ShellConnectionProfile {\n const existing = input.id ? settings.profiles.find((item) => item.id === input.id) : undefined;\n const normalizedServerUrl = normalizeServerUrl(input.serverUrl);\n const normalizedName = normalizeProfileName(input.name);\n const name = ensureUniqueProfileName(normalizedName, settings.profiles, existing?.id);\n const timestamp = nowIso();\n\n return {\n id: existing?.id ?? createDeterministicProfileId(name, normalizedServerUrl, settings.profiles, existing?.id),\n name,\n serverUrl: normalizedServerUrl,\n authToken: input.authToken ?? null,\n createdAt: existing?.createdAt ?? timestamp,\n updatedAt: timestamp,\n lastUsedAt: existing?.lastUsedAt ?? null,\n };\n}\n\nexport function applyDeleteProfile(settings: DesktopShellSettings, profileId: string): DesktopShellSettings {\n const profiles = settings.profiles.filter((item) => item.id !== profileId);\n const activeProfileId =\n settings.activeProfileId !== profileId\n ? settings.activeProfileId\n : profiles.length > 0\n ? profiles[0]?.id ?? null\n : null;\n return { ...settings, profiles, activeProfileId };\n}\n\nexport function applySetActiveProfile(settings: DesktopShellSettings, profileId: string | null): DesktopShellSettings {\n const activeProfileId = profileId && settings.profiles.some((item) => item.id === profileId) ? profileId : null;\n const timestamp = nowIso();\n const profiles = settings.profiles.map((item) =>\n item.id === activeProfileId\n ? { ...item, lastUsedAt: timestamp, updatedAt: timestamp }\n : item,\n );\n\n return {\n ...settings,\n activeProfileId,\n profiles,\n };\n}\n\nexport async function readShellSettings(): Promise<DesktopShellSettings> {\n try {\n const raw = await readFile(getSettingsPath(), \"utf-8\");\n return normalize(JSON.parse(raw));\n } catch {\n return { ...DEFAULT_SETTINGS };\n }\n}\n\nexport function getDesktopShellModeState(settings: DesktopShellSettings): DesktopShellModeState {\n if (!settings.hasCompletedModeSelection || settings.desktopMode === null) {\n return {\n isFirstRun: true,\n desktopMode: null,\n };\n }\n\n return {\n isFirstRun: false,\n desktopMode: settings.desktopMode,\n };\n}\n\nexport async function writeShellSettings(settings: DesktopShellSettings): Promise<void> {\n const path = getSettingsPath();\n const temp = `${path}.tmp`;\n await writeFile(temp, JSON.stringify(settings, null, 2), \"utf-8\");\n await rename(temp, path);\n}\n", "import {\n Menu,\n shell,\n type BrowserWindow,\n type MenuItemConstructorOptions,\n} from \"electron\";\n\nexport interface AppMenuOptions {\n mainWindow: BrowserWindow;\n appName: string;\n onChangeLaunchMode?: () => Promise<void> | void;\n onStartLocalRuntime?: () => Promise<void> | void;\n onStopLocalRuntime?: () => Promise<void> | void;\n onConnectRemoteServer?: () => Promise<void> | void;\n onCheckForUpdates?: () => Promise<void> | void;\n}\n\nfunction runMenuAction(label: string, action: (() => Promise<void> | void) | undefined): void {\n if (!action) return;\n void Promise.resolve(action()).catch((error: unknown) => {\n console.error(`[desktop/menu] ${label} failed`, error);\n });\n}\n\nfunction buildConnectionSubmenu(options: AppMenuOptions): MenuItemConstructorOptions {\n /*\n * FNXC:DesktopConnectionMenu 2026-06-21-02:04:\n * Desktop users need menu-level controls to start the embedded local server, shut it down, or connect to a remote server without returning to first-run setup.\n */\n return {\n label: \"Connection\",\n submenu: [\n {\n label: \"Use Local Server\",\n click: () => runMenuAction(\"onStartLocalRuntime\", options.onStartLocalRuntime),\n },\n {\n label: \"Shut Down Local Server\",\n click: () => runMenuAction(\"onStopLocalRuntime\", options.onStopLocalRuntime),\n },\n {\n type: \"separator\",\n },\n {\n label: \"Connect to Remote Server\u2026\",\n click: () => runMenuAction(\"onConnectRemoteServer\", options.onConnectRemoteServer ?? options.onChangeLaunchMode),\n },\n {\n label: \"Change Launch Mode\u2026\",\n click: () => runMenuAction(\"onChangeLaunchMode\", options.onChangeLaunchMode),\n },\n ],\n };\n}\n\nfunction buildAppSubmenu(options: AppMenuOptions): MenuItemConstructorOptions {\n return {\n label: options.appName,\n submenu: [\n {\n label: `About ${options.appName}`,\n },\n {\n label: \"Check for Updates\u2026\",\n click: () => runMenuAction(\"onCheckForUpdates\", options.onCheckForUpdates),\n },\n {\n type: \"separator\",\n },\n {\n label: \"Preferences\",\n accelerator: \"CmdOrCtrl+,\",\n },\n {\n type: \"separator\",\n },\n {\n label: `Hide ${options.appName}`,\n role: \"hide\",\n },\n {\n label: \"Hide Others\",\n role: \"hideOthers\",\n },\n {\n label: \"Show All\",\n role: \"unhide\",\n },\n {\n type: \"separator\",\n },\n {\n label: `Quit ${options.appName}`,\n accelerator: \"CmdOrCtrl+Q\",\n role: \"quit\",\n },\n ],\n };\n}\n\nfunction buildEditSubmenu(): MenuItemConstructorOptions {\n return {\n label: \"Edit\",\n submenu: [\n {\n label: \"Undo\",\n accelerator: \"CmdOrCtrl+Z\",\n role: \"undo\",\n },\n {\n label: \"Redo\",\n accelerator: \"Shift+CmdOrCtrl+Z\",\n role: \"redo\",\n },\n {\n type: \"separator\",\n },\n {\n label: \"Cut\",\n accelerator: \"CmdOrCtrl+X\",\n role: \"cut\",\n },\n {\n label: \"Copy\",\n accelerator: \"CmdOrCtrl+C\",\n role: \"copy\",\n },\n {\n label: \"Paste\",\n accelerator: \"CmdOrCtrl+V\",\n role: \"paste\",\n },\n {\n label: \"Select All\",\n accelerator: \"CmdOrCtrl+A\",\n role: \"selectAll\",\n },\n ],\n };\n}\n\nfunction buildViewSubmenu(options: AppMenuOptions): MenuItemConstructorOptions {\n const { webContents } = options.mainWindow;\n\n return {\n label: \"View\",\n submenu: [\n {\n label: \"Reload\",\n accelerator: \"CmdOrCtrl+R\",\n click: () => webContents.reload(),\n },\n {\n label: \"Force Reload\",\n accelerator: \"CmdOrCtrl+Shift+R\",\n click: () => webContents.reloadIgnoringCache(),\n },\n {\n type: \"separator\",\n },\n {\n label: \"Toggle Dev Tools\",\n accelerator: \"Alt+CmdOrCtrl+I\",\n click: () => webContents.toggleDevTools(),\n },\n {\n type: \"separator\",\n },\n {\n label: \"Zoom In\",\n accelerator: \"CmdOrCtrl+Plus\",\n click: () => {\n const level = webContents.getZoomLevel();\n webContents.setZoomLevel(level + 0.5);\n },\n },\n {\n label: \"Zoom Out\",\n accelerator: \"CmdOrCtrl+-\",\n click: () => {\n const level = webContents.getZoomLevel();\n webContents.setZoomLevel(level - 0.5);\n },\n },\n {\n label: \"Reset Zoom\",\n accelerator: \"CmdOrCtrl+0\",\n click: () => {\n webContents.setZoomLevel(0);\n },\n },\n {\n type: \"separator\",\n },\n {\n label: \"Toggle Full Screen\",\n accelerator: \"F11\",\n role: \"togglefullscreen\",\n },\n ],\n };\n}\n\nfunction buildWindowSubmenu(isMac: boolean): MenuItemConstructorOptions {\n const windowItems: MenuItemConstructorOptions[] = [\n {\n label: \"Minimize\",\n accelerator: \"CmdOrCtrl+M\",\n role: \"minimize\",\n },\n ];\n\n if (isMac) {\n windowItems.push({\n label: \"Zoom\",\n role: \"zoom\",\n });\n }\n\n windowItems.push(\n {\n type: \"separator\",\n },\n {\n label: \"Close\",\n accelerator: \"CmdOrCtrl+W\",\n role: \"close\",\n },\n );\n\n if (isMac) {\n windowItems.push(\n {\n type: \"separator\",\n },\n {\n label: \"Bring All to Front\",\n role: \"front\",\n },\n );\n }\n\n return {\n label: \"Window\",\n submenu: windowItems,\n };\n}\n\nfunction buildHelpSubmenu(options: AppMenuOptions): MenuItemConstructorOptions {\n return {\n label: \"Help\",\n submenu: [\n {\n label: \"Check for Updates\u2026\",\n click: () => runMenuAction(\"onCheckForUpdates\", options.onCheckForUpdates),\n },\n {\n label: \"Fusion Documentation\",\n click: () => {\n void shell.openExternal(\"https://github.com/Runfusion/Fusion#readme\");\n },\n },\n ],\n };\n}\n\nexport function buildMenuTemplate(options: AppMenuOptions): MenuItemConstructorOptions[] {\n const isMac = process.platform === \"darwin\";\n\n const template: MenuItemConstructorOptions[] = [\n buildEditSubmenu(),\n buildViewSubmenu(options),\n buildConnectionSubmenu(options),\n buildWindowSubmenu(isMac),\n buildHelpSubmenu(options),\n ];\n\n if (isMac) {\n template.unshift(buildAppSubmenu(options));\n }\n\n return template;\n}\n\nexport function buildAppMenu(options: AppMenuOptions): Menu {\n const menu = Menu.buildFromTemplate(buildMenuTemplate(options));\n Menu.setApplicationMenu(menu);\n return menu;\n}\n", "/**\n * Renderer entry resolution for Electron desktop shell.\n *\n * Production: loads embedded renderer assets from dist/client/index.html\n * Development: loads from FUSION_DASHBOARD_URL or localhost:5173\n */\n\nimport { pathToFileURL } from \"node:url\";\nimport { join } from \"node:path\";\n\nconst DEFAULT_DEV_DASHBOARD_URL = \"http://localhost:5173\";\n\n/**\n * Determines if the app is running in development mode.\n * Development mode is active when:\n * - NODE_ENV is \"development\", OR\n * - --dev flag is passed in command line arguments\n */\nexport function isDevelopmentMode(): boolean {\n return process.env.NODE_ENV === \"development\" || process.argv.includes(\"--dev\");\n}\n\n/**\n * Gets the renderer URL for loading the dashboard UI.\n *\n * In development mode: uses FUSION_DASHBOARD_URL env var or defaults to localhost:5173\n * In production mode: loads from embedded renderer assets (file:// path to dist/client/index.html)\n */\nexport function getRendererUrl(): string {\n if (isDevelopmentMode()) {\n return process.env.FUSION_DASHBOARD_URL ?? DEFAULT_DEV_DASHBOARD_URL;\n }\n\n // Production: use embedded renderer assets\n // This path is relative to the bundled main.js location\n const rendererIndexPath = join(import.meta.dirname, \"client\", \"index.html\");\n return pathToFileURL(rendererIndexPath).toString();\n}\n\n/**\n * Gets the renderer file path for loadFile() calls.\n * Returns the absolute file path (not a URL).\n */\nexport function getRendererFilePath(): string {\n if (isDevelopmentMode()) {\n // In development, we use loadURL, not loadFile\n return \"\";\n }\n\n // Production: return the absolute file path\n return join(import.meta.dirname, \"client\", \"index.html\");\n}\n\n/**\n * Checks if the renderer should be loaded from a URL (development)\n * vs file path (production).\n */\nexport function isUrlRenderer(): boolean {\n if (isDevelopmentMode()) {\n // In dev, always use URL unless explicitly told to use file path\n const override = process.env.FUSION_USE_FILE_RENDERER;\n return override !== \"true\";\n }\n\n // In production, always use file path\n return false;\n}\n\n// Re-export for backward compatibility\nexport const IS_DEVELOPMENT = isDevelopmentMode();\nexport { getRendererUrl as DASHBOARD_URL };\n", "import { once } from \"node:events\";\nimport type { Server } from \"node:http\";\nimport type { AddressInfo } from \"node:net\";\n\nimport { ensureDesktopRuntimeProject } from \"./engine-runtime.js\";\n\nexport type RuntimeSource = \"embedded-local\" | \"external-cli\" | \"none\";\nexport type RuntimeState = \"stopped\" | \"starting\" | \"running\" | \"error\";\n\nexport interface DesktopRuntimeStatus {\n source: RuntimeSource;\n state: RuntimeState;\n port?: number;\n baseUrl?: string;\n error?: string;\n}\n\ntype TaskStoreLike = {\n init(): Promise<void>;\n watch(): Promise<void>;\n close(): void;\n};\n\ntype RuntimeCleanup = () => Promise<void> | void;\n\ntype RuntimeInstance = {\n store: TaskStoreLike;\n server: Server;\n port: number;\n baseUrl: string;\n cleanup?: RuntimeCleanup;\n};\n\nexport interface LocalRuntimeManagerOptions {\n rootDir: string;\n getExternalPort?: () => number | undefined;\n createStore?: (rootDir: string) => Promise<TaskStoreLike>;\n createDashboardServer?: (store: TaskStoreLike, rootDir: string) => Promise<Server | { server: Server; cleanup?: RuntimeCleanup }>;\n}\n\nasync function createStoreDefault(rootDir: string): Promise<TaskStoreLike> {\n const { TaskStore } = await import(\"@fusion/core\");\n return new TaskStore(rootDir) as TaskStoreLike;\n}\n\nasync function createDashboardServerDefault(store: TaskStoreLike, rootDir: string): Promise<{ server: Server; cleanup: RuntimeCleanup }> {\n const { CentralCore } = await import(\"@fusion/core\");\n const { createServer } = await import(\"@fusion/dashboard\");\n const { ProjectEngineManager } = await import(\"@fusion/engine\");\n\n /*\n * FNXC:DesktopRuntime 2026-06-20-23:39:\n * Embedded desktop local mode should be an executable Fusion node, not a dashboard-only shell. Start all registered project engines and pass the manager to the API server so project-scoped routes can start newly accessed engines.\n */\n const centralCore = new CentralCore();\n const engineManager = new ProjectEngineManager(centralCore);\n const cleanup = async () => {\n await engineManager.stopAll();\n await centralCore.close?.();\n };\n\n try {\n await centralCore.init();\n const rootProject = await ensureDesktopRuntimeProject(centralCore, rootDir);\n await engineManager.startAll();\n engineManager.startReconciliation();\n const primaryEngine = await engineManager.ensureEngine(rootProject.id);\n const app = createServer(store as never, {\n engine: primaryEngine,\n engineManager,\n centralCore,\n onProjectFirstAccessed: (projectId: string) => engineManager.onProjectAccessed(projectId),\n });\n\n return {\n server: app.listen(0),\n cleanup,\n };\n } catch (error) {\n await cleanup();\n throw error;\n }\n}\n\nfunction parsePort(raw: string | undefined): number | undefined {\n if (!raw) {\n return undefined;\n }\n\n const value = Number(raw);\n if (!Number.isInteger(value) || value <= 0) {\n return undefined;\n }\n\n return value;\n}\n\nfunction getAddressPort(server: Server): number {\n const address = server.address() as AddressInfo | null;\n const port = address?.port;\n if (!port) {\n throw new Error(\"Failed to resolve local server port\");\n }\n return port;\n}\n\nexport class LocalRuntimeManager {\n private runtime: RuntimeInstance | null = null;\n private startupPromise: Promise<DesktopRuntimeStatus> | null = null;\n private stopPromise: Promise<DesktopRuntimeStatus> | null = null;\n private status: DesktopRuntimeStatus = { source: \"none\", state: \"stopped\" };\n\n private readonly getExternalPort: () => number | undefined;\n private readonly createStore: (rootDir: string) => Promise<TaskStoreLike>;\n private readonly createDashboardServer: (store: TaskStoreLike, rootDir: string) => Promise<Server | { server: Server; cleanup?: RuntimeCleanup }>;\n\n constructor(private readonly options: LocalRuntimeManagerOptions) {\n this.getExternalPort = options.getExternalPort ?? (() => parsePort(process.env.FUSION_SERVER_PORT));\n this.createStore = options.createStore ?? createStoreDefault;\n this.createDashboardServer = options.createDashboardServer ?? createDashboardServerDefault;\n }\n\n getStatus(): DesktopRuntimeStatus {\n if (this.runtime) {\n return {\n source: \"embedded-local\",\n state: \"running\",\n port: this.runtime.port,\n baseUrl: this.runtime.baseUrl,\n };\n }\n\n const externalPort = this.getExternalPort();\n if (externalPort) {\n this.status = {\n source: \"external-cli\",\n state: \"running\",\n port: externalPort,\n baseUrl: `http://127.0.0.1:${externalPort}`,\n };\n }\n\n return this.status;\n }\n\n getServerPort(): number | undefined {\n return this.getStatus().port;\n }\n\n async startLocal(): Promise<DesktopRuntimeStatus> {\n const externalPort = this.getExternalPort();\n if (externalPort) {\n this.status = {\n source: \"external-cli\",\n state: \"running\",\n port: externalPort,\n baseUrl: `http://127.0.0.1:${externalPort}`,\n };\n return this.status;\n }\n\n if (this.runtime) {\n return this.getStatus();\n }\n\n if (this.startupPromise) {\n return this.startupPromise;\n }\n\n this.status = { source: \"embedded-local\", state: \"starting\" };\n this.startupPromise = this.startEmbedded();\n\n try {\n return await this.startupPromise;\n } finally {\n this.startupPromise = null;\n }\n }\n\n private async startEmbedded(): Promise<DesktopRuntimeStatus> {\n let store: TaskStoreLike | null = null;\n let server: Server | null = null;\n let cleanup: RuntimeCleanup | undefined;\n\n try {\n store = await this.createStore(this.options.rootDir);\n await store.init();\n await store.watch();\n\n const dashboardServer = await this.createDashboardServer(store, this.options.rootDir);\n cleanup = \"server\" in dashboardServer ? dashboardServer.cleanup : undefined;\n server = \"server\" in dashboardServer ? dashboardServer.server : dashboardServer;\n await Promise.race([\n once(server, \"listening\"),\n once(server, \"error\").then(([error]) => {\n throw error;\n }),\n ]);\n\n const port = getAddressPort(server);\n const baseUrl = `http://127.0.0.1:${port}`;\n this.runtime = { store, server, port, baseUrl, cleanup };\n this.status = { source: \"embedded-local\", state: \"running\", port, baseUrl };\n return this.status;\n } catch (error) {\n if (server) {\n await new Promise<void>((resolve) => {\n server!.close(() => resolve());\n });\n }\n await cleanup?.();\n if (store) {\n store.close();\n }\n this.runtime = null;\n this.status = {\n source: \"embedded-local\",\n state: \"error\",\n error: error instanceof Error ? error.message : String(error),\n };\n throw error;\n }\n }\n\n async stopLocal(): Promise<DesktopRuntimeStatus> {\n if (this.stopPromise) {\n return this.stopPromise;\n }\n\n this.stopPromise = this.stopInternal();\n try {\n return await this.stopPromise;\n } finally {\n this.stopPromise = null;\n }\n }\n\n private async stopInternal(): Promise<DesktopRuntimeStatus> {\n if (this.runtime) {\n const runtime = this.runtime;\n this.runtime = null;\n await new Promise<void>((resolve) => runtime.server.close(() => resolve()));\n await runtime.cleanup?.();\n runtime.store.close();\n this.status = { source: \"none\", state: \"stopped\" };\n return this.status;\n }\n\n if (this.getStatus().source === \"external-cli\") {\n return this.status;\n }\n\n this.status = { source: \"none\", state: \"stopped\" };\n return this.status;\n }\n}\n", "import { basename } from \"node:path\";\n\nimport type { CentralCore, RegisteredProject } from \"@fusion/core\";\n\n/*\n * FNXC:DesktopRuntime 2026-06-21-02:04:\n * Desktop local mode starts engines by default, so the embedded server should prefer the project represented by the desktop runtime root instead of whichever registered engine happens to be first. The runtime root may be a home directory, so this path must not call helpers that initialize Git repositories as a side effect.\n */\nexport async function ensureDesktopRuntimeProject(centralCore: CentralCore, rootDir: string): Promise<RegisteredProject> {\n const existing = await centralCore.getProjectByPath(rootDir);\n if (existing) {\n return existing;\n }\n\n const projects = await centralCore.listProjects();\n if (projects.length > 0) {\n return projects[0]!;\n }\n\n const registered = await centralCore.registerProject({\n path: rootDir,\n name: basename(rootDir) || \"Fusion Desktop\",\n isolationMode: \"in-process\",\n });\n return centralCore.updateProject(registered.id, { status: \"active\" });\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["app", "BrowserWindow", "nativeImage", "Tray", "join", "mainWindow", "app", "app", "mainWindow", "app", "mainWindow", "tray", "iconPath", "readFile", "rename", "writeFile", "join", "app", "path", "mainWindow", "tray", "app", "Menu", "join", "app", "resolve", "app", "BrowserWindow", "join", "Tray", "nativeImage"]
|
|
7
7
|
}
|