electrobun 1.18.4-beta.6 → 2.0.1-beta.13

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.
Files changed (63) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +31 -170
  3. package/bin/electrobun.cjs +230 -153
  4. package/package.json +18 -49
  5. package/bun.lock +0 -119
  6. package/dist/api/browser/builtinrpcSchema.ts +0 -19
  7. package/dist/api/browser/global.d.ts +0 -36
  8. package/dist/api/browser/index.ts +0 -234
  9. package/dist/api/browser/webviewtag.ts +0 -88
  10. package/dist/api/browser/wgputag.ts +0 -48
  11. package/dist/api/bun/ElectrobunConfig.ts +0 -530
  12. package/dist/api/bun/__tests__/ffi-contract.test.ts +0 -105
  13. package/dist/api/bun/core/ApplicationMenu.ts +0 -70
  14. package/dist/api/bun/core/BrowserView.ts +0 -419
  15. package/dist/api/bun/core/BrowserWindow.ts +0 -400
  16. package/dist/api/bun/core/BuildConfig.ts +0 -71
  17. package/dist/api/bun/core/ContextMenu.ts +0 -75
  18. package/dist/api/bun/core/GpuWindow.ts +0 -289
  19. package/dist/api/bun/core/Paths.ts +0 -5
  20. package/dist/api/bun/core/Socket.ts +0 -22
  21. package/dist/api/bun/core/Tray.ts +0 -197
  22. package/dist/api/bun/core/Updater.ts +0 -1162
  23. package/dist/api/bun/core/Utils.ts +0 -487
  24. package/dist/api/bun/core/WGPUView.ts +0 -167
  25. package/dist/api/bun/core/menuRoles.ts +0 -181
  26. package/dist/api/bun/events/ApplicationEvents.ts +0 -22
  27. package/dist/api/bun/events/event.ts +0 -29
  28. package/dist/api/bun/events/eventEmitter.ts +0 -45
  29. package/dist/api/bun/events/trayEvents.ts +0 -11
  30. package/dist/api/bun/events/webviewEvents.ts +0 -39
  31. package/dist/api/bun/events/windowEvents.ts +0 -23
  32. package/dist/api/bun/index.ts +0 -298
  33. package/dist/api/bun/preload/.generated/compiled.ts +0 -8
  34. package/dist/api/bun/preload/build.ts +0 -65
  35. package/dist/api/bun/preload/dragRegions.ts +0 -41
  36. package/dist/api/bun/preload/encryption.ts +0 -86
  37. package/dist/api/bun/preload/events.ts +0 -171
  38. package/dist/api/bun/preload/globals.d.ts +0 -45
  39. package/dist/api/bun/preload/index-sandboxed.ts +0 -28
  40. package/dist/api/bun/preload/index.ts +0 -77
  41. package/dist/api/bun/preload/internalRpc.ts +0 -80
  42. package/dist/api/bun/preload/overlaySync.ts +0 -107
  43. package/dist/api/bun/preload/webviewTag.ts +0 -451
  44. package/dist/api/bun/preload/wgpuTag.ts +0 -246
  45. package/dist/api/bun/proc/linux.md +0 -43
  46. package/dist/api/bun/proc/native.ts +0 -3385
  47. package/dist/api/bun/webGPU.ts +0 -346
  48. package/dist/api/bun/webgpuAdapter.ts +0 -3011
  49. package/dist/api/shared/bun-version.ts +0 -3
  50. package/dist/api/shared/cef-version.ts +0 -5
  51. package/dist/api/shared/electrobun-version.ts +0 -2
  52. package/dist/api/shared/naming.test.ts +0 -327
  53. package/dist/api/shared/naming.ts +0 -188
  54. package/dist/api/shared/platform.ts +0 -48
  55. package/dist/api/shared/rpc.ts +0 -541
  56. package/dist/main.js +0 -168
  57. package/dist/preload-full.js +0 -913
  58. package/dist/preload-sandboxed.js +0 -111
  59. package/dist/zig-sdk/electrobun.zig +0 -1993
  60. package/src/cli/bun.lockb +0 -0
  61. package/src/cli/index.ts +0 -5689
  62. package/src/cli/package-lock.json +0 -81
  63. package/src/cli/package.json +0 -11
package/package.json CHANGED
@@ -1,62 +1,31 @@
1
1
  {
2
2
  "name": "electrobun",
3
- "version": "1.18.4-beta.6",
4
- "description": "Build ultra fast, tiny, and cross-platform desktop apps with Typescript.",
3
+ "version": "2.0.1-beta.13",
4
+ "description": "The lightweight npm bootstrap for Electrobun and Hutch.",
5
5
  "license": "MIT",
6
6
  "author": "Blackboard Technologies Inc.",
7
+ "homepage": "https://electrobun.dev",
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "git+https://github.com/blackboardsh/electrobun.git",
11
+ "directory": "npm/electrobun"
12
+ },
7
13
  "keywords": [
8
- "bun",
9
14
  "desktop",
10
15
  "app",
11
16
  "cross-platform",
12
- "typescript"
17
+ "typescript",
18
+ "hutch"
13
19
  ],
14
- "exports": {
15
- ".": "./dist/api/bun/index.ts",
16
- "./bun": "./dist/api/bun/index.ts",
17
- "./view": "./dist/api/browser/index.ts"
18
- },
19
- "type": "module",
20
20
  "bin": {
21
- "electrobun": "./bin/electrobun.cjs"
22
- },
23
- "homepage": "https://electrobun.dev",
24
- "repository": {
25
- "type": "git",
26
- "url": "git+https://github.com/blackboardsh/electrobun.git"
21
+ "electrobun": "bin/electrobun.cjs"
27
22
  },
28
- "scripts": {
29
- "start": "bun src/bun/index.ts",
30
- "check-zig-version": "vendors/zig/zig version",
31
- "build:dev": "bun build.ts",
32
- "build:release": "bun build.ts --release",
33
- "dev": "bun install && bun build:dev && cd ../kitchen && bun install && bun dev",
34
- "dev:clean": "cd ../kitchen && rm -rf node_modules && rm -rf vendors/cef && cd ../package && bun dev",
35
- "dev:canary": "bun install && bun build:release && cd ../kitchen && bun install && bun build:canary",
36
- "dev:stable": "bun install && bun build:release && cd ../kitchen && bun install && bun build:stable",
37
- "build:docs:release": "cd ../documentation && bun run build",
38
- "npm:publish": "bun build:release && npm publish",
39
- "npm:publish:beta": "bun build:release && npm publish --tag beta",
40
- "typecheck": "bunx tsc --noEmit && cd ../kitchen && bunx tsc --noEmit",
41
- "push:beta": "bun run typecheck && bun scripts/push-version.js beta",
42
- "push:patch": "bun run typecheck && bun scripts/push-version.js patch",
43
- "push:minor": "bun run typecheck && bun scripts/push-version.js minor",
44
- "push:major": "bun run typecheck && bun scripts/push-version.js major",
45
- "push:stable": "bun run typecheck && bun scripts/push-version.js stable",
46
- "build:push:artifacts": "bun scripts/build-and-upload-artifacts.js",
47
- "test": "bun install && bun build:dev && bun build:cli && cd ../tests && bun install && bun build:dev && bun start",
48
- "test:unit": "bun test src/shared src/bun",
49
- "bump-cef": "bun scripts/update-cef-version.ts"
50
- },
51
- "devDependencies": {
52
- "typescript": "^5.9.3"
53
- },
54
- "dependencies": {
55
- "@babylonjs/core": "^7.45.0",
56
- "@types/bun": "^1.3.8",
57
- "png-to-ico": "^2.1.8",
58
- "proxy-agent": "^6.5.0",
59
- "rcedit": "^4.0.1",
60
- "three": "^0.165.0"
23
+ "files": [
24
+ "bin/electrobun.cjs",
25
+ "README.md",
26
+ "LICENSE"
27
+ ],
28
+ "engines": {
29
+ "node": ">=18"
61
30
  }
62
31
  }
package/bun.lock DELETED
@@ -1,119 +0,0 @@
1
- {
2
- "lockfileVersion": 1,
3
- "configVersion": 0,
4
- "workspaces": {
5
- "": {
6
- "name": "electrobun",
7
- "dependencies": {
8
- "@babylonjs/core": "^7.45.0",
9
- "@types/bun": "^1.3.8",
10
- "png-to-ico": "^2.1.8",
11
- "proxy-agent": "^6.5.0",
12
- "rcedit": "^4.0.1",
13
- "three": "^0.165.0",
14
- },
15
- "devDependencies": {
16
- "typescript": "^5.9.3",
17
- },
18
- },
19
- },
20
- "packages": {
21
- "@babylonjs/core": ["@babylonjs/core@7.54.3", "", {}, "sha512-P5ncXVd8GEUJLhwloP9V0oVwQYIrvZztguVeLlvd5Rx+9aQnenKjpV8auJ6SRsUlAmNZU4pFTKzwF6o2EUfhAw=="],
22
-
23
- "@malept/cross-spawn-promise": ["@malept/cross-spawn-promise@1.1.1", "", { "dependencies": { "cross-spawn": "^7.0.1" } }, "sha512-RTBGWL5FWQcg9orDOCcp4LvItNzUPcyEU9bwaeJX0rJ1IQxzucC48Y0/sQLp/g6t99IQgAlGIaesJS+gTn7tVQ=="],
24
-
25
- "@tootallnate/quickjs-emscripten": ["@tootallnate/quickjs-emscripten@0.23.0", "", {}, "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA=="],
26
-
27
- "@types/bun": ["@types/bun@1.3.8", "", { "dependencies": { "bun-types": "1.3.8" } }, "sha512-3LvWJ2q5GerAXYxO2mffLTqOzEu5qnhEAlh48Vnu8WQfnmSwbgagjGZV6BoHKJztENYEDn6QmVd949W4uESRJA=="],
28
-
29
- "@types/node": ["@types/node@17.0.45", "", {}, "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw=="],
30
-
31
- "agent-base": ["agent-base@7.1.4", "", {}, "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ=="],
32
-
33
- "ast-types": ["ast-types@0.13.4", "", { "dependencies": { "tslib": "^2.0.1" } }, "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w=="],
34
-
35
- "basic-ftp": ["basic-ftp@5.2.0", "", {}, "sha512-VoMINM2rqJwJgfdHq6RiUudKt2BV+FY5ZFezP/ypmwayk68+NzzAQy4XXLlqsGD4MCzq3DrmNFD/uUmBJuGoXw=="],
36
-
37
- "bun-types": ["bun-types@1.3.8", "", { "dependencies": { "@types/node": "*" } }, "sha512-fL99nxdOWvV4LqjmC+8Q9kW3M4QTtTR1eePs94v5ctGqU8OeceWrSUaRw3JYb7tU3FkMIAjkueehrHPPPGKi5Q=="],
38
-
39
- "cross-spawn": ["cross-spawn@7.0.6", "", { "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" } }, "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA=="],
40
-
41
- "cross-spawn-windows-exe": ["cross-spawn-windows-exe@1.2.0", "", { "dependencies": { "@malept/cross-spawn-promise": "^1.1.0", "is-wsl": "^2.2.0", "which": "^2.0.2" } }, "sha512-mkLtJJcYbDCxEG7Js6eUnUNndWjyUZwJ3H7bErmmtOYU/Zb99DyUkpamuIZE0b3bhmJyZ7D90uS6f+CGxRRjOw=="],
42
-
43
- "data-uri-to-buffer": ["data-uri-to-buffer@6.0.2", "", {}, "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw=="],
44
-
45
- "debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="],
46
-
47
- "degenerator": ["degenerator@5.0.1", "", { "dependencies": { "ast-types": "^0.13.4", "escodegen": "^2.1.0", "esprima": "^4.0.1" } }, "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ=="],
48
-
49
- "escodegen": ["escodegen@2.1.0", "", { "dependencies": { "esprima": "^4.0.1", "estraverse": "^5.2.0", "esutils": "^2.0.2" }, "optionalDependencies": { "source-map": "~0.6.1" }, "bin": { "esgenerate": "bin/esgenerate.js", "escodegen": "bin/escodegen.js" } }, "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w=="],
50
-
51
- "esprima": ["esprima@4.0.1", "", { "bin": { "esparse": "./bin/esparse.js", "esvalidate": "./bin/esvalidate.js" } }, "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="],
52
-
53
- "estraverse": ["estraverse@5.3.0", "", {}, "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA=="],
54
-
55
- "esutils": ["esutils@2.0.3", "", {}, "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g=="],
56
-
57
- "get-uri": ["get-uri@6.0.5", "", { "dependencies": { "basic-ftp": "^5.0.2", "data-uri-to-buffer": "^6.0.2", "debug": "^4.3.4" } }, "sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg=="],
58
-
59
- "http-proxy-agent": ["http-proxy-agent@7.0.2", "", { "dependencies": { "agent-base": "^7.1.0", "debug": "^4.3.4" } }, "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig=="],
60
-
61
- "https-proxy-agent": ["https-proxy-agent@7.0.6", "", { "dependencies": { "agent-base": "^7.1.2", "debug": "4" } }, "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw=="],
62
-
63
- "ip-address": ["ip-address@10.1.0", "", {}, "sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q=="],
64
-
65
- "is-docker": ["is-docker@2.2.1", "", { "bin": { "is-docker": "cli.js" } }, "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ=="],
66
-
67
- "is-wsl": ["is-wsl@2.2.0", "", { "dependencies": { "is-docker": "^2.0.0" } }, "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww=="],
68
-
69
- "isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="],
70
-
71
- "lru-cache": ["lru-cache@7.18.3", "", {}, "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA=="],
72
-
73
- "minimist": ["minimist@1.2.8", "", {}, "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="],
74
-
75
- "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="],
76
-
77
- "netmask": ["netmask@2.0.2", "", {}, "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg=="],
78
-
79
- "pac-proxy-agent": ["pac-proxy-agent@7.2.0", "", { "dependencies": { "@tootallnate/quickjs-emscripten": "^0.23.0", "agent-base": "^7.1.2", "debug": "^4.3.4", "get-uri": "^6.0.1", "http-proxy-agent": "^7.0.0", "https-proxy-agent": "^7.0.6", "pac-resolver": "^7.0.1", "socks-proxy-agent": "^8.0.5" } }, "sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA=="],
80
-
81
- "pac-resolver": ["pac-resolver@7.0.1", "", { "dependencies": { "degenerator": "^5.0.0", "netmask": "^2.0.2" } }, "sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg=="],
82
-
83
- "path-key": ["path-key@3.1.1", "", {}, "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="],
84
-
85
- "png-to-ico": ["png-to-ico@2.1.8", "", { "dependencies": { "@types/node": "^17.0.36", "minimist": "^1.2.6", "pngjs": "^6.0.0" }, "bin": { "png-to-ico": "bin/cli.js" } }, "sha512-Nf+IIn/cZ/DIZVdGveJp86NG5uNib1ZXMiDd/8x32HCTeKSvgpyg6D/6tUBn1QO/zybzoMK0/mc3QRgAyXdv9w=="],
86
-
87
- "pngjs": ["pngjs@6.0.0", "", {}, "sha512-TRzzuFRRmEoSW/p1KVAmiOgPco2Irlah+bGFCeNfJXxxYGwSw7YwAOAcd7X28K/m5bjBWKsC29KyoMfHbypayg=="],
88
-
89
- "proxy-agent": ["proxy-agent@6.5.0", "", { "dependencies": { "agent-base": "^7.1.2", "debug": "^4.3.4", "http-proxy-agent": "^7.0.1", "https-proxy-agent": "^7.0.6", "lru-cache": "^7.14.1", "pac-proxy-agent": "^7.1.0", "proxy-from-env": "^1.1.0", "socks-proxy-agent": "^8.0.5" } }, "sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A=="],
90
-
91
- "proxy-from-env": ["proxy-from-env@1.1.0", "", {}, "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="],
92
-
93
- "rcedit": ["rcedit@4.0.1", "", { "dependencies": { "cross-spawn-windows-exe": "^1.1.0" } }, "sha512-bZdaQi34krFWhrDn+O53ccBDw0MkAT2Vhu75SqhtvhQu4OPyFM4RoVheyYiVQYdjhUi6EJMVWQ0tR6bCIYVkUg=="],
94
-
95
- "shebang-command": ["shebang-command@2.0.0", "", { "dependencies": { "shebang-regex": "^3.0.0" } }, "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA=="],
96
-
97
- "shebang-regex": ["shebang-regex@3.0.0", "", {}, "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="],
98
-
99
- "smart-buffer": ["smart-buffer@4.2.0", "", {}, "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg=="],
100
-
101
- "socks": ["socks@2.8.7", "", { "dependencies": { "ip-address": "^10.0.1", "smart-buffer": "^4.2.0" } }, "sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A=="],
102
-
103
- "socks-proxy-agent": ["socks-proxy-agent@8.0.5", "", { "dependencies": { "agent-base": "^7.1.2", "debug": "^4.3.4", "socks": "^2.8.3" } }, "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw=="],
104
-
105
- "source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="],
106
-
107
- "three": ["three@0.165.0", "", {}, "sha512-cc96IlVYGydeceu0e5xq70H8/yoVT/tXBxV/W8A/U6uOq7DXc4/s1Mkmnu6SqoYGhSRWWYFOhVwvq6V0VtbplA=="],
108
-
109
- "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="],
110
-
111
- "typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="],
112
-
113
- "undici-types": ["undici-types@5.26.5", "", {}, "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA=="],
114
-
115
- "which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="],
116
-
117
- "bun-types/@types/node": ["@types/node@20.12.14", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-scnD59RpYD91xngrQQLGkE+6UrHUPzeKZWhhjBSa3HSkwjbQc38+q3RoIVEwxQGRw3M+j5hpNAM+lgV3cVormg=="],
118
- }
119
- }
@@ -1,19 +0,0 @@
1
- // consider just makeing a shared types file
2
-
3
- export type BuiltinBunToWebviewSchema = {
4
- requests: {
5
- evaluateJavascriptWithResponse: {
6
- params: { script: string };
7
- response: any;
8
- };
9
- };
10
- };
11
-
12
- export type BuiltinWebviewToBunSchema = {
13
- requests: {
14
- webviewTagInit: {
15
- params: {};
16
- response: any;
17
- };
18
- };
19
- };
@@ -1,36 +0,0 @@
1
- // Global type declarations for Electrobun browser environment
2
-
3
- interface ElectrobunEncryptResult {
4
- encryptedData: string;
5
- iv: string;
6
- tag: string;
7
- }
8
-
9
- interface ElectrobunBridge {
10
- receiveMessageFromHost: (msg: unknown) => void;
11
- receiveInternalMessageFromHost: (msg: unknown) => void;
12
- receiveMessageFromBun: (msg: unknown) => void;
13
- receiveInternalMessageFromBun: (msg: unknown) => void;
14
- }
15
-
16
- interface MessageHandler {
17
- postMessage: (msg: string) => void;
18
- }
19
-
20
- declare global {
21
- interface Window {
22
- __electrobunWebviewId: number;
23
- __electrobunWindowId: number;
24
- __electrobunRpcSocketPort: number;
25
- __electrobunHostSocketPort?: number;
26
- __electrobun?: ElectrobunBridge;
27
- __electrobunPendingHostMessages?: unknown[];
28
- __electrobun_encrypt: (msg: string) => Promise<ElectrobunEncryptResult>;
29
- __electrobun_decrypt: (encryptedData: string, iv: string, tag: string) => Promise<string>;
30
- __electrobunInternalBridge?: MessageHandler;
31
- __electrobunHostBridge?: MessageHandler;
32
- __electrobunBunBridge?: MessageHandler;
33
- }
34
- }
35
-
36
- export {};
@@ -1,234 +0,0 @@
1
- import {
2
- type RPCSchema,
3
- type RPCTransport,
4
- type ElectrobunRPCSchema,
5
- type ElectrobunRPCConfig,
6
- type RPCWithTransport,
7
- createRPC,
8
- defineElectrobunRPC,
9
- } from "../shared/rpc.js";
10
- import {
11
- type WebviewTagElement,
12
- type WebviewEventTypes,
13
- } from "./webviewtag";
14
- import { type WgpuTagElement, type WgpuEventTypes } from "./wgputag";
15
- import "./global.d.ts";
16
-
17
- const WEBVIEW_ID = window.__electrobunWebviewId;
18
- const HOST_SOCKET_PORT =
19
- window.__electrobunHostSocketPort ?? window.__electrobunRpcSocketPort;
20
-
21
- class Electroview<T extends RPCWithTransport> {
22
- hostSocket?: WebSocket;
23
- hostSocketCanSend = false;
24
- // user's custom rpc browser <-> bun
25
- rpc?: T;
26
- rpcHandler?: (msg: unknown) => void;
27
- carrots = {
28
- invoke: <R = unknown>(
29
- carrotId: string,
30
- method: string,
31
- params?: unknown,
32
- options?: { windowId?: string },
33
- ) => this.invokeCarrot<R>(carrotId, method, params, options),
34
- };
35
-
36
- constructor(config: { rpc: T }) {
37
- this.rpc = config.rpc;
38
- this.init();
39
- }
40
-
41
- init() {
42
- this.initSocketToHost();
43
-
44
- // Set up handler for user RPC messages from the host runtime.
45
- const hostMessageHandler = this.receiveMessageFromHost.bind(this);
46
- window.__electrobun!.receiveMessageFromHost = hostMessageHandler;
47
- window.__electrobun!.receiveMessageFromBun = hostMessageHandler;
48
-
49
- if (this.rpc) {
50
- this.rpc.setTransport(this.createTransport());
51
- }
52
-
53
- const pendingMessages = window.__electrobunPendingHostMessages;
54
- if (pendingMessages?.length) {
55
- window.__electrobunPendingHostMessages = [];
56
- for (const message of pendingMessages) {
57
- hostMessageHandler(message);
58
- }
59
- }
60
- }
61
-
62
- initSocketToHost() {
63
- // Skip native socket when running in a remote browser (no port/webview ID)
64
- if (!HOST_SOCKET_PORT || !WEBVIEW_ID) {
65
- return;
66
- }
67
-
68
- // Note: Using ws:// for loopback is intentional - all RPC messages are
69
- // encrypted with per-webview AES-GCM keys, making TLS redundant
70
- const socket = new WebSocket(
71
- `ws://127.0.0.1:${HOST_SOCKET_PORT}/socket?webviewId=${WEBVIEW_ID}`,
72
- );
73
-
74
- this.hostSocket = socket;
75
-
76
- socket.addEventListener("open", () => {
77
- this.hostSocketCanSend = true;
78
- });
79
-
80
- socket.addEventListener("message", async (event) => {
81
- const message = event.data;
82
- if (typeof message === "string") {
83
- try {
84
- const encryptedPacket = JSON.parse(message);
85
-
86
- const decrypted = await window.__electrobun_decrypt(
87
- encryptedPacket.encryptedData,
88
- encryptedPacket.iv,
89
- encryptedPacket.tag,
90
- );
91
-
92
- this.hostSocketCanSend = true;
93
- this.rpcHandler?.(JSON.parse(decrypted));
94
- } catch (err) {
95
- console.error("Error parsing bun message:", err);
96
- }
97
- } else if (message instanceof Blob) {
98
- // Handle binary data (e.g., convert Blob to ArrayBuffer if needed)
99
- } else {
100
- console.error("UNKNOWN DATA TYPE RECEIVED:", event.data);
101
- }
102
- });
103
-
104
- socket.addEventListener("error", (event) => {
105
- this.hostSocketCanSend = false;
106
- console.error("Socket error:", event);
107
- });
108
-
109
- socket.addEventListener("close", (_event) => {
110
- this.hostSocketCanSend = false;
111
- // console.log("Socket closed:", event);
112
- });
113
- }
114
-
115
- createTransport(): RPCTransport {
116
- const that = this;
117
- return {
118
- send(message: unknown) {
119
- try {
120
- const messageString = JSON.stringify(message);
121
- that.sendMessageToHost(messageString);
122
- } catch (error) {
123
- console.error("host: failed to serialize message to webview", error);
124
- }
125
- },
126
- registerHandler(handler: (msg: unknown) => void) {
127
- that.rpcHandler = handler;
128
- },
129
- };
130
- }
131
-
132
- async sendMessageToHost(msg: string) {
133
- if (
134
- this.hostSocketCanSend &&
135
- this.hostSocket?.readyState === WebSocket.OPEN
136
- ) {
137
- try {
138
- const { encryptedData, iv, tag } =
139
- await window.__electrobun_encrypt(msg);
140
-
141
- const encryptedPacket = {
142
- encryptedData: encryptedData,
143
- iv: iv,
144
- tag: tag,
145
- };
146
- const encryptedPacketString = JSON.stringify(encryptedPacket);
147
- this.hostSocket.send(encryptedPacketString);
148
- return;
149
- } catch (error) {
150
- console.error("Error sending message to host via socket:", error);
151
- }
152
- }
153
-
154
- // if socket's are unavailable, fallback to postMessage
155
- window.__electrobunHostBridge?.postMessage(msg);
156
- }
157
-
158
- receiveMessageFromHost(msg: unknown) {
159
- // NOTE: in the webview messages are passed by executing window.__electrobun.receiveMessageFromHost(object)
160
- // so they're already parsed into an object here
161
- if (this.rpcHandler) {
162
- this.rpcHandler(msg);
163
- }
164
- }
165
-
166
- async invokeCarrot<R = unknown>(
167
- carrotId: string,
168
- method: string,
169
- params?: unknown,
170
- options?: { windowId?: string },
171
- ): Promise<R> {
172
- const requestProxy = (this.rpc as any)?.request;
173
- if (!requestProxy || typeof requestProxy.invokeCarrot !== "function") {
174
- throw new Error("Renderer carrot invocation is not available in this Electrobun host.");
175
- }
176
- return requestProxy.invokeCarrot({
177
- carrotId,
178
- method,
179
- params,
180
- windowId: options?.windowId,
181
- }) as Promise<R>;
182
- }
183
- static defineRPC<Schema extends ElectrobunRPCSchema>(
184
- config: ElectrobunRPCConfig<Schema, "webview">,
185
- ) {
186
- return defineElectrobunRPC("webview", {
187
- ...config,
188
- extraRequestHandlers: {
189
- evaluateJavascriptWithResponse: ({ script }: { script: string }) => {
190
- return new Promise((resolve) => {
191
- try {
192
- const resultFunction = new Function(script);
193
- const result = resultFunction();
194
-
195
- if (result instanceof Promise) {
196
- result
197
- .then((resolvedResult) => {
198
- resolve(resolvedResult);
199
- })
200
- .catch((error) => {
201
- console.error("bun: async script execution failed", error);
202
- resolve(String(error));
203
- });
204
- } else {
205
- resolve(result);
206
- }
207
- } catch (error) {
208
- console.error("bun: failed to eval script", error);
209
- resolve(String(error));
210
- }
211
- });
212
- },
213
- },
214
- });
215
- }
216
- }
217
-
218
- export {
219
- type RPCSchema,
220
- type ElectrobunRPCSchema,
221
- type ElectrobunRPCConfig,
222
- createRPC,
223
- Electroview,
224
- type WebviewTagElement,
225
- type WebviewEventTypes,
226
- type WgpuTagElement,
227
- type WgpuEventTypes,
228
- };
229
-
230
- const Electrobun = {
231
- Electroview,
232
- };
233
-
234
- export default Electrobun;
@@ -1,88 +0,0 @@
1
- import "./global.d.ts";
2
-
3
- type WebviewEventTypes =
4
- | "did-navigate"
5
- | "did-navigate-in-page"
6
- | "did-commit-navigation"
7
- | "dom-ready"
8
- | "host-message"
9
- | "new-window-open";
10
-
11
- /**
12
- * Interface representing an <electrobun-webview> custom element.
13
- * Use this to properly type webview elements obtained via querySelector.
14
- *
15
- * @example
16
- * const webview = document.querySelector('electrobun-webview') as WebviewTagElement;
17
- * webview.loadURL('https://example.com');
18
- * webview.toggleHidden(false);
19
- */
20
- interface WebviewTagElement extends HTMLElement {
21
- // Properties
22
- webviewId?: number;
23
- maskSelectors: Set<string>;
24
- transparent: boolean;
25
- passthroughEnabled: boolean;
26
- hidden: boolean;
27
- hiddenMirrorMode: boolean;
28
- partition: string | null;
29
-
30
- // Attribute-backed properties (getters/setters)
31
- src: string | null;
32
- html: string | null;
33
- preload: string | null;
34
- renderer: "cef" | "native";
35
-
36
- // Mask management
37
- addMaskSelector(selector: string): void;
38
- removeMaskSelector(selector: string): void;
39
-
40
- // Navigation
41
- canGoBack(): Promise<boolean>;
42
- canGoForward(): Promise<boolean>;
43
- goBack(): void;
44
- goForward(): void;
45
- reload(): void;
46
- loadURL(url: string): void;
47
- loadHTML(html: string): void;
48
-
49
- // Visibility and interaction
50
- toggleTransparent(transparent?: boolean, bypassState?: boolean): void;
51
- togglePassthrough(enablePassthrough?: boolean, bypassState?: boolean): void;
52
- toggleHidden(hidden?: boolean, bypassState?: boolean): void;
53
-
54
- // Events - listener receives a CustomEvent with detail property
55
- on(event: WebviewEventTypes, listener: (event: CustomEvent) => void): void;
56
- off(event: WebviewEventTypes, listener: (event: CustomEvent) => void): void;
57
- emit(event: WebviewEventTypes, detail: unknown): void;
58
-
59
- // Dimension sync
60
- syncDimensions(force?: boolean): void;
61
-
62
- // Navigation rules
63
- setNavigationRules(rules: string[]): void;
64
-
65
- // Find in page
66
- findInPage(
67
- searchText: string,
68
- options?: { forward?: boolean; matchCase?: boolean },
69
- ): void;
70
- stopFindInPage(): void;
71
-
72
- // Developer tools
73
- openDevTools(): void;
74
- closeDevTools(): void;
75
- toggleDevTools(): void;
76
-
77
- // JavaScript execution
78
- executeJavascript(js: string): void;
79
- }
80
-
81
- // Augment global types so querySelector('electrobun-webview') returns WebviewTagElement
82
- declare global {
83
- interface HTMLElementTagNameMap {
84
- "electrobun-webview": WebviewTagElement;
85
- }
86
- }
87
-
88
- export { type WebviewTagElement, type WebviewEventTypes };
@@ -1,48 +0,0 @@
1
- import "./global.d.ts";
2
-
3
- type WgpuEventTypes = "ready";
4
-
5
- /**
6
- * Interface representing an <electrobun-wgpu> custom element.
7
- * Use this to properly type wgpu elements obtained via querySelector.
8
- *
9
- * @example
10
- * const wgpu = document.querySelector('electrobun-wgpu') as WgpuTagElement;
11
- * wgpu.toggleTransparent(true);
12
- */
13
- interface WgpuTagElement extends HTMLElement {
14
- // Properties
15
- wgpuViewId?: number;
16
- transparent: boolean;
17
- passthroughEnabled: boolean;
18
- hidden: boolean;
19
-
20
- // Visibility and interaction
21
- toggleTransparent(transparent?: boolean): void;
22
- togglePassthrough(enablePassthrough?: boolean): void;
23
- toggleHidden(hidden?: boolean): void;
24
-
25
- // Dimension sync
26
- syncDimensions(force?: boolean): void;
27
-
28
- // Debug helper
29
- runTest(): void;
30
-
31
- // Mask management
32
- addMaskSelector(selector: string): void;
33
- removeMaskSelector(selector: string): void;
34
-
35
- // Events - listener receives a CustomEvent with detail property
36
- on(event: WgpuEventTypes, listener: (event: CustomEvent) => void): void;
37
- off(event: WgpuEventTypes, listener: (event: CustomEvent) => void): void;
38
- emit(event: WgpuEventTypes, detail: unknown): void;
39
- }
40
-
41
- // Augment global types so querySelector('electrobun-wgpu') returns WgpuTagElement
42
- declare global {
43
- interface HTMLElementTagNameMap {
44
- "electrobun-wgpu": WgpuTagElement;
45
- }
46
- }
47
-
48
- export { type WgpuTagElement, type WgpuEventTypes };