@wailsio/runtime 3.0.0-alpha.73 → 3.0.0-alpha.75

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/calls.js CHANGED
@@ -12,8 +12,6 @@ import { newRuntimeCaller, objectNames } from "./runtime.js";
12
12
  import { nanoid } from "./nanoid.js";
13
13
  // Setup
14
14
  window._wails = window._wails || {};
15
- window._wails.callResultHandler = resultHandler;
16
- window._wails.callErrorHandler = errorHandler;
17
15
  const call = newRuntimeCaller(objectNames.Call);
18
16
  const cancelCall = newRuntimeCaller(objectNames.CancelCall);
19
17
  const callResponses = new Map();
@@ -34,90 +32,6 @@ export class RuntimeError extends Error {
34
32
  this.name = "RuntimeError";
35
33
  }
36
34
  }
37
- /**
38
- * Handles the result of a call request.
39
- *
40
- * @param id - The id of the request to handle the result for.
41
- * @param data - The result data of the request.
42
- * @param isJSON - Indicates whether the data is JSON or not.
43
- */
44
- function resultHandler(id, data, isJSON) {
45
- const resolvers = getAndDeleteResponse(id);
46
- if (!resolvers) {
47
- return;
48
- }
49
- if (!data) {
50
- resolvers.resolve(undefined);
51
- }
52
- else if (!isJSON) {
53
- resolvers.resolve(data);
54
- }
55
- else {
56
- try {
57
- resolvers.resolve(JSON.parse(data));
58
- }
59
- catch (err) {
60
- resolvers.reject(new TypeError("could not parse result: " + err.message, { cause: err }));
61
- }
62
- }
63
- }
64
- /**
65
- * Handles the error from a call request.
66
- *
67
- * @param id - The id of the promise handler.
68
- * @param data - The error data to reject the promise handler with.
69
- * @param isJSON - Indicates whether the data is JSON or not.
70
- */
71
- function errorHandler(id, data, isJSON) {
72
- const resolvers = getAndDeleteResponse(id);
73
- if (!resolvers) {
74
- return;
75
- }
76
- if (!isJSON) {
77
- resolvers.reject(new Error(data));
78
- }
79
- else {
80
- let error;
81
- try {
82
- error = JSON.parse(data);
83
- }
84
- catch (err) {
85
- resolvers.reject(new TypeError("could not parse error: " + err.message, { cause: err }));
86
- return;
87
- }
88
- let options = {};
89
- if (error.cause) {
90
- options.cause = error.cause;
91
- }
92
- let exception;
93
- switch (error.kind) {
94
- case "ReferenceError":
95
- exception = new ReferenceError(error.message, options);
96
- break;
97
- case "TypeError":
98
- exception = new TypeError(error.message, options);
99
- break;
100
- case "RuntimeError":
101
- exception = new RuntimeError(error.message, options);
102
- break;
103
- default:
104
- exception = new Error(error.message, options);
105
- break;
106
- }
107
- resolvers.reject(exception);
108
- }
109
- }
110
- /**
111
- * Retrieves and removes the response associated with the given ID from the callResponses map.
112
- *
113
- * @param id - The ID of the response to be retrieved and removed.
114
- * @returns The response object associated with the given ID, if any.
115
- */
116
- function getAndDeleteResponse(id) {
117
- const response = callResponses.get(id);
118
- callResponses.delete(id);
119
- return response;
120
- }
121
35
  /**
122
36
  * Generates a unique ID using the nanoid library.
123
37
  *
@@ -147,10 +61,13 @@ export function Call(options) {
147
61
  const result = CancellablePromise.withResolvers();
148
62
  callResponses.set(id, { resolve: result.resolve, reject: result.reject });
149
63
  const request = call(CallBinding, Object.assign({ "call-id": id }, options));
150
- let running = false;
151
- request.then(() => {
152
- running = true;
64
+ let running = true;
65
+ request.then((res) => {
66
+ running = false;
67
+ callResponses.delete(id);
68
+ result.resolve(res);
153
69
  }, (err) => {
70
+ running = false;
154
71
  callResponses.delete(id);
155
72
  result.reject(err);
156
73
  });
package/dist/dialogs.js CHANGED
@@ -8,13 +8,9 @@ The electron alternative for Go
8
8
  (c) Lea Anthony 2019-present
9
9
  */
10
10
  import { newRuntimeCaller, objectNames } from "./runtime.js";
11
- import { nanoid } from './nanoid.js';
12
11
  // setup
13
12
  window._wails = window._wails || {};
14
- window._wails.dialogErrorCallback = dialogErrorCallback;
15
- window._wails.dialogResultCallback = dialogResultCallback;
16
13
  const call = newRuntimeCaller(objectNames.Dialog);
17
- const dialogResponses = new Map();
18
14
  // Define constants from the `methods` object in Title Case
19
15
  const DialogInfo = 0;
20
16
  const DialogWarning = 1;
@@ -22,63 +18,6 @@ const DialogError = 2;
22
18
  const DialogQuestion = 3;
23
19
  const DialogOpenFile = 4;
24
20
  const DialogSaveFile = 5;
25
- /**
26
- * Handles the result of a dialog request.
27
- *
28
- * @param id - The id of the request to handle the result for.
29
- * @param data - The result data of the request.
30
- * @param isJSON - Indicates whether the data is JSON or not.
31
- */
32
- function dialogResultCallback(id, data, isJSON) {
33
- let resolvers = getAndDeleteResponse(id);
34
- if (!resolvers) {
35
- return;
36
- }
37
- if (isJSON) {
38
- try {
39
- resolvers.resolve(JSON.parse(data));
40
- }
41
- catch (err) {
42
- resolvers.reject(new TypeError("could not parse result: " + err.message, { cause: err }));
43
- }
44
- }
45
- else {
46
- resolvers.resolve(data);
47
- }
48
- }
49
- /**
50
- * Handles the error from a dialog request.
51
- *
52
- * @param id - The id of the promise handler.
53
- * @param message - An error message.
54
- */
55
- function dialogErrorCallback(id, message) {
56
- var _a;
57
- (_a = getAndDeleteResponse(id)) === null || _a === void 0 ? void 0 : _a.reject(new window.Error(message));
58
- }
59
- /**
60
- * Retrieves and removes the response associated with the given ID from the dialogResponses map.
61
- *
62
- * @param id - The ID of the response to be retrieved and removed.
63
- * @returns The response object associated with the given ID, if any.
64
- */
65
- function getAndDeleteResponse(id) {
66
- const response = dialogResponses.get(id);
67
- dialogResponses.delete(id);
68
- return response;
69
- }
70
- /**
71
- * Generates a unique ID using the nanoid library.
72
- *
73
- * @returns A unique ID that does not exist in the dialogResponses set.
74
- */
75
- function generateID() {
76
- let result;
77
- do {
78
- result = nanoid();
79
- } while (dialogResponses.has(result));
80
- return result;
81
- }
82
21
  /**
83
22
  * Presents a dialog of specified type with the given options.
84
23
  *
@@ -87,14 +26,7 @@ function generateID() {
87
26
  * @returns A promise that resolves with result of dialog.
88
27
  */
89
28
  function dialog(type, options = {}) {
90
- const id = generateID();
91
- return new Promise((resolve, reject) => {
92
- dialogResponses.set(id, { resolve, reject });
93
- call(type, Object.assign({ "dialog-id": id }, options)).catch((err) => {
94
- dialogResponses.delete(id);
95
- reject(err);
96
- });
97
- });
29
+ return call(type, options);
98
30
  }
99
31
  /**
100
32
  * Presents an info dialog.
package/dist/drag.js CHANGED
@@ -29,12 +29,46 @@ window._wails.setResizable = (value) => {
29
29
  setResize();
30
30
  }
31
31
  };
32
- window.addEventListener('mousedown', update, { capture: true });
33
- window.addEventListener('mousemove', update, { capture: true });
34
- window.addEventListener('mouseup', update, { capture: true });
35
- for (const ev of ['click', 'contextmenu', 'dblclick']) {
36
- window.addEventListener(ev, suppressEvent, { capture: true });
32
+ // Defer attaching mouse listeners until we know we're not on mobile.
33
+ let dragInitDone = false;
34
+ function isMobile() {
35
+ var _a, _b;
36
+ const os = (_b = (_a = window._wails) === null || _a === void 0 ? void 0 : _a.environment) === null || _b === void 0 ? void 0 : _b.OS;
37
+ if (os === "ios" || os === "android")
38
+ return true;
39
+ // Fallback heuristic if environment not yet set
40
+ const ua = navigator.userAgent || navigator.vendor || window.opera || "";
41
+ return /android|iphone|ipad|ipod|iemobile|wpdesktop/i.test(ua);
37
42
  }
43
+ function tryInitDragHandlers() {
44
+ if (dragInitDone)
45
+ return;
46
+ if (isMobile())
47
+ return;
48
+ window.addEventListener('mousedown', update, { capture: true });
49
+ window.addEventListener('mousemove', update, { capture: true });
50
+ window.addEventListener('mouseup', update, { capture: true });
51
+ for (const ev of ['click', 'contextmenu', 'dblclick']) {
52
+ window.addEventListener(ev, suppressEvent, { capture: true });
53
+ }
54
+ dragInitDone = true;
55
+ }
56
+ // Attempt immediate init (in case environment already present)
57
+ tryInitDragHandlers();
58
+ // Also attempt on DOM ready
59
+ document.addEventListener('DOMContentLoaded', tryInitDragHandlers, { once: true });
60
+ // As a last resort, poll for environment for a short period
61
+ let dragEnvPolls = 0;
62
+ const dragEnvPoll = window.setInterval(() => {
63
+ if (dragInitDone) {
64
+ window.clearInterval(dragEnvPoll);
65
+ return;
66
+ }
67
+ tryInitDragHandlers();
68
+ if (++dragEnvPolls > 100) {
69
+ window.clearInterval(dragEnvPoll);
70
+ }
71
+ }, 50);
38
72
  function suppressEvent(event) {
39
73
  // Suppress click events while resizing or dragging.
40
74
  if (dragging || resizing) {
@@ -200,6 +200,30 @@ export const Types = Object.freeze({
200
200
  WindowFocusOut: "linux:WindowFocusOut",
201
201
  WindowLoadChanged: "linux:WindowLoadChanged",
202
202
  }),
203
+ iOS: Object.freeze({
204
+ ApplicationDidBecomeActive: "ios:ApplicationDidBecomeActive",
205
+ ApplicationDidEnterBackground: "ios:ApplicationDidEnterBackground",
206
+ ApplicationDidFinishLaunching: "ios:ApplicationDidFinishLaunching",
207
+ ApplicationDidReceiveMemoryWarning: "ios:ApplicationDidReceiveMemoryWarning",
208
+ ApplicationWillEnterForeground: "ios:ApplicationWillEnterForeground",
209
+ ApplicationWillResignActive: "ios:ApplicationWillResignActive",
210
+ ApplicationWillTerminate: "ios:ApplicationWillTerminate",
211
+ WindowDidLoad: "ios:WindowDidLoad",
212
+ WindowWillAppear: "ios:WindowWillAppear",
213
+ WindowDidAppear: "ios:WindowDidAppear",
214
+ WindowWillDisappear: "ios:WindowWillDisappear",
215
+ WindowDidDisappear: "ios:WindowDidDisappear",
216
+ WindowSafeAreaInsetsChanged: "ios:WindowSafeAreaInsetsChanged",
217
+ WindowOrientationChanged: "ios:WindowOrientationChanged",
218
+ WindowTouchBegan: "ios:WindowTouchBegan",
219
+ WindowTouchMoved: "ios:WindowTouchMoved",
220
+ WindowTouchEnded: "ios:WindowTouchEnded",
221
+ WindowTouchCancelled: "ios:WindowTouchCancelled",
222
+ WebViewDidStartNavigation: "ios:WebViewDidStartNavigation",
223
+ WebViewDidFinishNavigation: "ios:WebViewDidFinishNavigation",
224
+ WebViewDidFailNavigation: "ios:WebViewDidFailNavigation",
225
+ WebViewDecidePolicyForNavigationAction: "ios:WebViewDecidePolicyForNavigationAction",
226
+ }),
203
227
  Common: Object.freeze({
204
228
  ApplicationOpenedWithFile: "common:ApplicationOpenedWithFile",
205
229
  ApplicationStarted: "common:ApplicationStarted",
@@ -230,7 +254,3 @@ export const Types = Object.freeze({
230
254
  WindowDropZoneFilesDropped: "common:WindowDropZoneFilesDropped",
231
255
  }),
232
256
  });
233
- export const Windows = Types.Windows;
234
- export const Mac = Types.Mac;
235
- export const Linux = Types.Linux;
236
- export const Common = Types.Common;
package/dist/index.js CHANGED
@@ -22,9 +22,10 @@ import * as Events from "./events.js";
22
22
  import * as Flags from "./flags.js";
23
23
  import * as Screens from "./screens.js";
24
24
  import * as System from "./system.js";
25
+ import * as IOS from "./ios.js";
25
26
  import Window from "./window.js";
26
27
  import * as WML from "./wml.js";
27
- export { Application, Browser, Call, Clipboard, Dialogs, Events, Flags, Screens, System, Window, WML };
28
+ export { Application, Browser, Call, Clipboard, Dialogs, Events, Flags, Screens, System, IOS, Window, WML };
28
29
  /**
29
30
  * An internal utility consumed by the binding generator.
30
31
  *
@@ -32,6 +33,8 @@ export { Application, Browser, Call, Clipboard, Dialogs, Events, Flags, Screens,
32
33
  */
33
34
  export { Create };
34
35
  export * from "./cancellable.js";
36
+ // Export transport interfaces and utilities
37
+ export { setTransport, getTransport, objectNames, clientId, } from "./runtime.js";
35
38
  // Notify backend
36
39
  window._wails.invoke = System.invoke;
37
40
  // Register platform handlers (internal API)
package/dist/ios.js ADDED
@@ -0,0 +1,28 @@
1
+ /*
2
+ _ __ _ __
3
+ | | / /___ _(_) /____
4
+ | | /| / / __ `/ / / ___/
5
+ | |/ |/ / /_/ / / (__ )
6
+ |__/|__/\__,_/_/_/____/
7
+ The electron alternative for Go
8
+ (c) Lea Anthony 2019-present
9
+ */
10
+ import { newRuntimeCaller, objectNames } from "./runtime.js";
11
+ const call = newRuntimeCaller(objectNames.IOS);
12
+ // Method IDs
13
+ const HapticsImpact = 0;
14
+ const DeviceInfo = 1;
15
+ export var Haptics;
16
+ (function (Haptics) {
17
+ function Impact(style = "medium") {
18
+ return call(HapticsImpact, { style });
19
+ }
20
+ Haptics.Impact = Impact;
21
+ })(Haptics || (Haptics = {}));
22
+ export var Device;
23
+ (function (Device) {
24
+ function Info() {
25
+ return call(DeviceInfo);
26
+ }
27
+ Device.Info = Info;
28
+ })(Device || (Device = {}));
package/dist/runtime.js CHANGED
@@ -7,8 +7,10 @@
7
7
  The electron alternative for Go
8
8
  (c) Lea Anthony 2019-present
9
9
  */
10
- import { nanoid } from './nanoid.js';
10
+ import { nanoid } from "./nanoid.js";
11
11
  const runtimeURL = window.location.origin + "/wails/runtime";
12
+ // Re-export nanoid for custom transport implementations
13
+ export { nanoid };
12
14
  // Object Names
13
15
  export const objectNames = Object.freeze({
14
16
  Call: 0,
@@ -22,8 +24,42 @@ export const objectNames = Object.freeze({
22
24
  System: 8,
23
25
  Browser: 9,
24
26
  CancelCall: 10,
27
+ IOS: 11,
25
28
  });
26
29
  export let clientId = nanoid();
30
+ /**
31
+ * Custom transport implementation (can be set by user)
32
+ */
33
+ let customTransport = null;
34
+ /**
35
+ * Set a custom transport for all Wails runtime calls.
36
+ * This allows you to replace the default HTTP fetch transport with
37
+ * WebSockets, custom protocols, or any other mechanism.
38
+ *
39
+ * @param transport - Your custom transport implementation
40
+ *
41
+ * @example
42
+ * ```typescript
43
+ * import { setTransport } from '/wails/runtime.js';
44
+ *
45
+ * const wsTransport = {
46
+ * call: async (objectID, method, windowName, args) => {
47
+ * // Your WebSocket implementation
48
+ * }
49
+ * };
50
+ *
51
+ * setTransport(wsTransport);
52
+ * ```
53
+ */
54
+ export function setTransport(transport) {
55
+ customTransport = transport;
56
+ }
57
+ /**
58
+ * Get the current transport (useful for extending/wrapping)
59
+ */
60
+ export function getTransport() {
61
+ return customTransport;
62
+ }
27
63
  /**
28
64
  * Creates a new runtime caller with specified ID.
29
65
  *
@@ -38,19 +74,31 @@ export function newRuntimeCaller(object, windowName = '') {
38
74
  }
39
75
  async function runtimeCallWithID(objectID, method, windowName, args) {
40
76
  var _a, _b;
77
+ // Use custom transport if available
78
+ if (customTransport) {
79
+ return customTransport.call(objectID, method, windowName, args);
80
+ }
81
+ // Default HTTP fetch transport
41
82
  let url = new URL(runtimeURL);
42
- url.searchParams.append("object", objectID.toString());
43
- url.searchParams.append("method", method.toString());
44
- if (args) {
45
- url.searchParams.append("args", JSON.stringify(args));
83
+ let body = {
84
+ object: objectID,
85
+ method
86
+ };
87
+ if (args !== null && args !== undefined) {
88
+ body.args = args;
46
89
  }
47
90
  let headers = {
48
- ["x-wails-client-id"]: clientId
91
+ ["x-wails-client-id"]: clientId,
92
+ ["Content-Type"]: "application/json"
49
93
  };
50
94
  if (windowName) {
51
95
  headers["x-wails-window-name"] = windowName;
52
96
  }
53
- let response = await fetch(url, { headers });
97
+ let response = await fetch(url, {
98
+ method: 'POST',
99
+ headers,
100
+ body: JSON.stringify(body)
101
+ });
54
102
  if (!response.ok) {
55
103
  throw new Error(await response.text());
56
104
  }
package/dist/system.js CHANGED
@@ -11,16 +11,23 @@ import { newRuntimeCaller, objectNames } from "./runtime.js";
11
11
  const call = newRuntimeCaller(objectNames.System);
12
12
  const SystemIsDarkMode = 0;
13
13
  const SystemEnvironment = 1;
14
+ const SystemCapabilities = 2;
14
15
  const ApplicationFilesDroppedWithContext = 100; // New method ID for enriched drop event
15
16
  const _invoke = (function () {
16
- var _a, _b, _c, _d, _e;
17
+ var _a, _b, _c, _d, _e, _f;
17
18
  try {
19
+ // Windows WebView2
18
20
  if ((_b = (_a = window.chrome) === null || _a === void 0 ? void 0 : _a.webview) === null || _b === void 0 ? void 0 : _b.postMessage) {
19
21
  return window.chrome.webview.postMessage.bind(window.chrome.webview);
20
22
  }
23
+ // macOS/iOS WKWebView
21
24
  else if ((_e = (_d = (_c = window.webkit) === null || _c === void 0 ? void 0 : _c.messageHandlers) === null || _d === void 0 ? void 0 : _d['external']) === null || _e === void 0 ? void 0 : _e.postMessage) {
22
25
  return window.webkit.messageHandlers['external'].postMessage.bind(window.webkit.messageHandlers['external']);
23
26
  }
27
+ // Android WebView - uses addJavascriptInterface which exposes window.wails.invoke
28
+ else if ((_f = window.wails) === null || _f === void 0 ? void 0 : _f.invoke) {
29
+ return (msg) => window.wails.invoke(typeof msg === 'string' ? msg : JSON.stringify(msg));
30
+ }
24
31
  }
25
32
  catch (e) { }
26
33
  console.warn('\n%c⚠️ Browser Environment Detected %c\n\n%cOnly UI previews are available in the browser. For full functionality, please run the application in desktop mode.\nMore information at: https://v3.wails.io/learn/build/#using-a-browser-for-development\n', 'background: #ffffff; color: #000000; font-weight: bold; padding: 4px 8px; border-radius: 4px; border: 2px solid #000000;', 'background: transparent;', 'color: #ffffff; font-style: italic; font-weight: bold;');
@@ -43,13 +50,7 @@ export function IsDarkMode() {
43
50
  * @returns A promise that resolves to an object containing the capabilities.
44
51
  */
45
52
  export async function Capabilities() {
46
- let response = await fetch("/wails/capabilities");
47
- if (response.ok) {
48
- return response.json();
49
- }
50
- else {
51
- throw new Error("could not fetch capabilities: " + response.statusText);
52
- }
53
+ return call(SystemCapabilities);
53
54
  }
54
55
  /**
55
56
  * Retrieves environment details.
@@ -65,7 +66,8 @@ export function Environment() {
65
66
  * @return True if the operating system is Windows, otherwise false.
66
67
  */
67
68
  export function IsWindows() {
68
- return window._wails.environment.OS === "windows";
69
+ var _a, _b;
70
+ return ((_b = (_a = window._wails) === null || _a === void 0 ? void 0 : _a.environment) === null || _b === void 0 ? void 0 : _b.OS) === "windows";
69
71
  }
70
72
  /**
71
73
  * Checks if the current operating system is Linux.
@@ -73,7 +75,8 @@ export function IsWindows() {
73
75
  * @returns Returns true if the current operating system is Linux, false otherwise.
74
76
  */
75
77
  export function IsLinux() {
76
- return window._wails.environment.OS === "linux";
78
+ var _a, _b;
79
+ return ((_b = (_a = window._wails) === null || _a === void 0 ? void 0 : _a.environment) === null || _b === void 0 ? void 0 : _b.OS) === "linux";
77
80
  }
78
81
  /**
79
82
  * Checks if the current environment is a macOS operating system.
@@ -81,7 +84,8 @@ export function IsLinux() {
81
84
  * @returns True if the environment is macOS, false otherwise.
82
85
  */
83
86
  export function IsMac() {
84
- return window._wails.environment.OS === "darwin";
87
+ var _a, _b;
88
+ return ((_b = (_a = window._wails) === null || _a === void 0 ? void 0 : _a.environment) === null || _b === void 0 ? void 0 : _b.OS) === "darwin";
85
89
  }
86
90
  /**
87
91
  * Checks if the current environment architecture is AMD64.
@@ -89,7 +93,8 @@ export function IsMac() {
89
93
  * @returns True if the current environment architecture is AMD64, false otherwise.
90
94
  */
91
95
  export function IsAMD64() {
92
- return window._wails.environment.Arch === "amd64";
96
+ var _a, _b;
97
+ return ((_b = (_a = window._wails) === null || _a === void 0 ? void 0 : _a.environment) === null || _b === void 0 ? void 0 : _b.Arch) === "amd64";
93
98
  }
94
99
  /**
95
100
  * Checks if the current architecture is ARM.
@@ -97,7 +102,8 @@ export function IsAMD64() {
97
102
  * @returns True if the current architecture is ARM, false otherwise.
98
103
  */
99
104
  export function IsARM() {
100
- return window._wails.environment.Arch === "arm";
105
+ var _a, _b;
106
+ return ((_b = (_a = window._wails) === null || _a === void 0 ? void 0 : _a.environment) === null || _b === void 0 ? void 0 : _b.Arch) === "arm";
101
107
  }
102
108
  /**
103
109
  * Checks if the current environment is ARM64 architecture.
@@ -105,7 +111,8 @@ export function IsARM() {
105
111
  * @returns Returns true if the environment is ARM64 architecture, otherwise returns false.
106
112
  */
107
113
  export function IsARM64() {
108
- return window._wails.environment.Arch === "arm64";
114
+ var _a, _b;
115
+ return ((_b = (_a = window._wails) === null || _a === void 0 ? void 0 : _a.environment) === null || _b === void 0 ? void 0 : _b.Arch) === "arm64";
109
116
  }
110
117
  /**
111
118
  * Reports whether the app is being run in debug mode.
@@ -113,7 +120,8 @@ export function IsARM64() {
113
120
  * @returns True if the app is being run in debug mode.
114
121
  */
115
122
  export function IsDebug() {
116
- return Boolean(window._wails.environment.Debug);
123
+ var _a, _b;
124
+ return Boolean((_b = (_a = window._wails) === null || _a === void 0 ? void 0 : _a.environment) === null || _b === void 0 ? void 0 : _b.Debug);
117
125
  }
118
126
  /**
119
127
  * Handles file drops originating from platform-specific code (e.g., macOS native drag-and-drop).
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@wailsio/runtime",
3
3
  "type": "module",
4
- "version": "3.0.0-alpha.73",
4
+ "version": "3.0.0-alpha.75",
5
5
  "description": "Wails Runtime",
6
6
  "types": "types/index.d.ts",
7
7
  "exports": {