@swiftbrowser/native 0.13.0 → 0.14.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/README.md +13 -0
- package/dist/bridge.d.ts +2 -1
- package/dist/bridge.d.ts.map +1 -1
- package/dist/bridge.js.map +1 -1
- package/dist/build.d.ts +7 -4
- package/dist/build.d.ts.map +1 -1
- package/dist/build.js +23 -10
- package/dist/build.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/openURL.d.ts +18 -0
- package/dist/openURL.d.ts.map +1 -0
- package/dist/openURL.js +35 -0
- package/dist/openURL.js.map +1 -0
- package/dist/runtime.d.ts +2 -2
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +11 -6
- package/dist/runtime.js.map +1 -1
- package/package.json +3 -3
- package/src/bridge.ts +2 -1
- package/src/build.ts +24 -10
- package/src/index.ts +1 -0
- package/src/openURL.ts +38 -0
- package/src/runtime.ts +11 -6
- package/swift/Sources/SwiftBrowserNative/Runtime/NativeApp.swift +27 -0
- package/wasm/SwiftBrowserNative.wasm +2 -2
package/README.md
CHANGED
|
@@ -126,6 +126,19 @@ worker. Drawn in a page (`site`), `createWorker` returns the page's own
|
|
|
126
126
|
is the same in all three places. The iOS app's `WebAssembly` is the engine's
|
|
127
127
|
interpreter (a third-party app has no JIT), and SIMD in it needs iOS 26.2.
|
|
128
128
|
|
|
129
|
+
## URLs the app is opened with
|
|
130
|
+
|
|
131
|
+
```ts
|
|
132
|
+
import { onOpenURL } from '@swiftbrowser/native';
|
|
133
|
+
useEffect(() => onOpenURL((url) => take(new URL(url).searchParams.get('token'))), []);
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
A universal link or a custom scheme opens the app through SwiftUI's
|
|
137
|
+
`onOpenURL`, which the App file hands to `NativeApp.open(url:)` (the
|
|
138
|
+
project `native init` writes does); `onOpenURL` here delivers it to the
|
|
139
|
+
app's listeners. A URL that launched the app waits for the bundle and then
|
|
140
|
+
for the first listener, so nothing is lost on a cold start.
|
|
141
|
+
|
|
129
142
|
## The dev loop and Fast Refresh
|
|
130
143
|
|
|
131
144
|
`swiftbrowser-native dev` serves the bundle in two halves and a manifest:
|
package/dist/bridge.d.ts
CHANGED
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
* The native side of the bridge, as Swift installs it on `__sbNative`
|
|
3
3
|
* (Native/Sources/SwiftBrowserNative/Host/HostBridge.swift). Every call is
|
|
4
4
|
* synchronous; the ones that answer later do so by calling a global this
|
|
5
|
-
* package defines (`__sbTimerFired`, `__sbFetchResult`
|
|
5
|
+
* package defines (`__sbTimerFired`, `__sbFetchResult`, `__sbWorkerMessage`,
|
|
6
|
+
* `__sbOpenURL`).
|
|
6
7
|
*/
|
|
7
8
|
export interface NativeBridge {
|
|
8
9
|
/** Applies a render pass's ops (a JSON array). Returns an error message, or nothing. */
|
package/dist/bridge.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../src/bridge.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../src/bridge.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,WAAW,YAAY;IAC3B,wFAAwF;IACxF,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAClD,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1C,+BAA+B;IAC/B,GAAG,IAAI,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IAC9D,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,6EAA6E;IAC7E,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,kBAAkB,GAAG,IAAI,CAAC;IAC9D,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IACvC,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7C,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,WAAW,IAAI,MAAM,EAAE,CAAC;IACxB,YAAY,IAAI,IAAI,CAAC;IACrB,sCAAsC;IACtC,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACnC,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAC9B,gDAAgD;IAChD,MAAM,IAAI,MAAM,CAAC;IACjB,+FAA+F;IAC/F,eAAe,CAAC,IAAI,MAAM,EAAE,CAAC;IAM7B,4LAA4L;IAC5L,WAAW,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAClE,0FAA0F;IAC1F,UAAU,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5C,eAAe,CAAC,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,sEAAsE;IACtE,iBAAiB,CAAC,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACxC;AAED,kEAAkE;AAClE,wBAAgB,eAAe,IAAI,MAAM,EAAE,CAG1C;AAED,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,uBAAuB;IACvB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,cAAc;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,yFAAyF;AACzF,wBAAgB,YAAY,CAAC,CAAC,GAAE,OAAO,UAAuB,GAAG,YAAY,GAAG,SAAS,CAExF"}
|
package/dist/bridge.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bridge.js","sourceRoot":"","sources":["../src/bridge.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"bridge.js","sourceRoot":"","sources":["../src/bridge.ts"],"names":[],"mappings":"AA2CA,kEAAkE;AAClE,MAAM,UAAU,eAAe;IAC7B,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;IAC9B,OAAO,MAAM,EAAE,eAAe,EAAE,EAAE,IAAI,EAAE,CAAC;AAC3C,CAAC;AAoBD,yFAAyF;AACzF,MAAM,UAAU,YAAY,CAAC,IAAuB,UAAU;IAC5D,OAAQ,CAA8C,CAAC,UAAU,CAAC;AACpE,CAAC"}
|
package/dist/build.d.ts
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Builds `app.js` for an Xcode target: the runtime first (./runtime, so the
|
|
3
3
|
* web globals exist before React's scheduler reads them), then the app, as
|
|
4
|
-
* one script JavaScriptCore evaluates with `NativeApp.load`.
|
|
5
|
-
*
|
|
6
|
-
*
|
|
4
|
+
* one script JavaScriptCore evaluates with `NativeApp.load`. Both are one
|
|
5
|
+
* esbuild graph, so the package's modules exist once in the script: the
|
|
6
|
+
* runtime's `__sbOpenURL` and the app's `onOpenURL` share their listeners,
|
|
7
|
+
* and `__sbWorkerMessage` the app's workers. `react-dom` is aliased to
|
|
8
|
+
* stubs (no DOM here); `@swiftbrowser/react` and React are bundled in.
|
|
9
|
+
* Node only (the CLI in ../bin and build scripts use it).
|
|
7
10
|
*/
|
|
8
11
|
export interface BuildOptions {
|
|
9
12
|
/** The app's entry module, which calls `run(<App />)`. */
|
|
@@ -38,7 +41,7 @@ export interface BuildResult {
|
|
|
38
41
|
bytes: number;
|
|
39
42
|
}>;
|
|
40
43
|
}
|
|
41
|
-
/** Builds the
|
|
44
|
+
/** Builds the app's script, and each worker's the same way. */
|
|
42
45
|
export declare function bundle(options: BuildOptions): Promise<BuildResult>;
|
|
43
46
|
/** Where a worker bundle goes: `<name>.worker.js` beside the app bundle. */
|
|
44
47
|
export declare function workerOutfile(outfile: string, name: string): string;
|
package/dist/build.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../src/build.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../src/build.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAUH,MAAM,WAAW,YAAY;IAC3B,0DAA0D;IAC1D,KAAK,EAAE,MAAM,CAAC;IACd,+EAA+E;IAC/E,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,+EAA+E;IAC/E,IAAI,CAAC,EAAE,aAAa,GAAG,YAAY,CAAC;IACpC;;;;;OAKG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,mCAAmC;IACnC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC1D;AAgED,+DAA+D;AAC/D,wBAAsB,MAAM,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,CAaxE;AAED,4EAA4E;AAC5E,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAEnE;AAMD,sEAAsE;AACtE,wBAAsB,QAAQ,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,CAM1E;AAED,MAAM,WAAW,YAAa,SAAQ,YAAY;IAChD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,6CAA6C;IAC7C,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,GAAG,KAAK,KAAK,IAAI,CAAC;CACjD;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,CAuE/E"}
|
package/dist/build.js
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Builds `app.js` for an Xcode target: the runtime first (./runtime, so the
|
|
3
3
|
* web globals exist before React's scheduler reads them), then the app, as
|
|
4
|
-
* one script JavaScriptCore evaluates with `NativeApp.load`.
|
|
5
|
-
*
|
|
6
|
-
*
|
|
4
|
+
* one script JavaScriptCore evaluates with `NativeApp.load`. Both are one
|
|
5
|
+
* esbuild graph, so the package's modules exist once in the script: the
|
|
6
|
+
* runtime's `__sbOpenURL` and the app's `onOpenURL` share their listeners,
|
|
7
|
+
* and `__sbWorkerMessage` the app's workers. `react-dom` is aliased to
|
|
8
|
+
* stubs (no DOM here); `@swiftbrowser/react` and React are bundled in.
|
|
9
|
+
* Node only (the CLI in ../bin and build scripts use it).
|
|
7
10
|
*/
|
|
8
11
|
import * as esbuild from 'esbuild';
|
|
9
12
|
import { createHash } from 'node:crypto';
|
|
@@ -58,18 +61,28 @@ function common(options) {
|
|
|
58
61
|
absWorkingDir: here,
|
|
59
62
|
};
|
|
60
63
|
}
|
|
61
|
-
/**
|
|
64
|
+
/**
|
|
65
|
+
* One script: the runtime, then `entry`, in one graph (the runtime is
|
|
66
|
+
* injected, which esbuild evaluates ahead of the entry). A second build of
|
|
67
|
+
* the runtime prepended to the app's would leave the app a copy of this
|
|
68
|
+
* package of its own, whose `onOpenURL` listeners and workers the runtime's
|
|
69
|
+
* globals never reach.
|
|
70
|
+
*/
|
|
71
|
+
async function script(options, entry) {
|
|
72
|
+
const path = resolve(entry);
|
|
73
|
+
return esbuild.build({ ...common(options), entryPoints: [path], inject: [runtimeEntry], alias: aliases(path) });
|
|
74
|
+
}
|
|
75
|
+
/** Builds the app's script, and each worker's the same way. */
|
|
62
76
|
export async function bundle(options) {
|
|
63
|
-
const
|
|
64
|
-
const
|
|
65
|
-
const
|
|
66
|
-
const warnings = [...runtime.warnings, ...app.warnings].map((warning) => warning.text);
|
|
77
|
+
const app = await script(options, options.entry);
|
|
78
|
+
const code = text(app);
|
|
79
|
+
const warnings = app.warnings.map((warning) => warning.text);
|
|
67
80
|
const workers = {};
|
|
68
81
|
for (const [name, entry] of Object.entries(options.workers ?? {})) {
|
|
69
82
|
if (!WORKER_NAME.test(name))
|
|
70
83
|
throw new Error(`worker names are letters, digits, "_" and "-": ${name}`);
|
|
71
|
-
const worker = await
|
|
72
|
-
const workerCode =
|
|
84
|
+
const worker = await script(options, entry);
|
|
85
|
+
const workerCode = text(worker);
|
|
73
86
|
workers[name] = { code: workerCode, bytes: Buffer.byteLength(workerCode) };
|
|
74
87
|
warnings.push(...worker.warnings.map((warning) => warning.text));
|
|
75
88
|
}
|
package/dist/build.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build.js","sourceRoot":"","sources":["../src/build.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"build.js","sourceRoot":"","sources":["../src/build.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -18,4 +18,5 @@ export { SimpleHeaders, SimpleRequest, SimpleResponse, SimpleAbortController, Si
|
|
|
18
18
|
export { SimpleURL, SimpleURLSearchParams } from './url';
|
|
19
19
|
export { SimpleTextEncoder, SimpleTextDecoder, base64Encode, base64Decode, utf8Encode, utf8Decode } from './encoding';
|
|
20
20
|
export { createWorker, NativeWorker, encodeMessage, decodeMessage, workerName, type WorkerLike, type WorkerMessageEvent, type WorkerErrorEvent } from './worker';
|
|
21
|
+
export { onOpenURL } from './openURL';
|
|
21
22
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,GAAG,EAAE,KAAK,UAAU,EAAE,KAAK,OAAO,EAAE,MAAM,OAAO,CAAC;AAC3D,OAAO,EAAE,MAAM,EAAE,KAAK,WAAW,EAAE,MAAM,UAAU,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,KAAK,cAAc,EAAE,MAAM,WAAW,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,KAAK,YAAY,EAAE,KAAK,kBAAkB,EAAE,KAAK,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC7H,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,cAAc,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC9H,OAAO,EAAE,SAAS,EAAE,qBAAqB,EAAE,MAAM,OAAO,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACtH,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,UAAU,EAAE,KAAK,UAAU,EAAE,KAAK,kBAAkB,EAAE,KAAK,gBAAgB,EAAE,MAAM,UAAU,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,GAAG,EAAE,KAAK,UAAU,EAAE,KAAK,OAAO,EAAE,MAAM,OAAO,CAAC;AAC3D,OAAO,EAAE,MAAM,EAAE,KAAK,WAAW,EAAE,MAAM,UAAU,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,KAAK,cAAc,EAAE,MAAM,WAAW,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,KAAK,YAAY,EAAE,KAAK,kBAAkB,EAAE,KAAK,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC7H,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,cAAc,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC9H,OAAO,EAAE,SAAS,EAAE,qBAAqB,EAAE,MAAM,OAAO,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACtH,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,UAAU,EAAE,KAAK,UAAU,EAAE,KAAK,kBAAkB,EAAE,KAAK,gBAAgB,EAAE,MAAM,UAAU,CAAC;AACjK,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -18,4 +18,5 @@ export { SimpleHeaders, SimpleRequest, SimpleResponse, SimpleAbortController, Si
|
|
|
18
18
|
export { SimpleURL, SimpleURLSearchParams } from './url';
|
|
19
19
|
export { SimpleTextEncoder, SimpleTextDecoder, base64Encode, base64Decode, utf8Encode, utf8Decode } from './encoding';
|
|
20
20
|
export { createWorker, NativeWorker, encodeMessage, decodeMessage, workerName } from './worker';
|
|
21
|
+
export { onOpenURL } from './openURL';
|
|
21
22
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,GAAG,EAAiC,MAAM,OAAO,CAAC;AAC3D,OAAO,EAAE,MAAM,EAAoB,MAAM,UAAU,CAAC;AACpD,OAAO,EAAE,cAAc,EAAuB,MAAM,WAAW,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,eAAe,EAAsE,MAAM,UAAU,CAAC;AAC7H,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,cAAc,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC9H,OAAO,EAAE,SAAS,EAAE,qBAAqB,EAAE,MAAM,OAAO,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACtH,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,UAAU,EAAmE,MAAM,UAAU,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,GAAG,EAAiC,MAAM,OAAO,CAAC;AAC3D,OAAO,EAAE,MAAM,EAAoB,MAAM,UAAU,CAAC;AACpD,OAAO,EAAE,cAAc,EAAuB,MAAM,WAAW,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,eAAe,EAAsE,MAAM,UAAU,CAAC;AAC7H,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,cAAc,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC9H,OAAO,EAAE,SAAS,EAAE,qBAAqB,EAAE,MAAM,OAAO,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACtH,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,UAAU,EAAmE,MAAM,UAAU,CAAC;AACjK,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* URLs the app is opened with: a universal link (an `applinks:` associated
|
|
3
|
+
* domain) or a custom scheme, which SwiftUI's `onOpenURL` hands to
|
|
4
|
+
* `NativeApp.open(url:)` and the host passes to `__sbOpenURL`. A URL that
|
|
5
|
+
* arrives before anything listens (the link launched the app) waits for
|
|
6
|
+
* the first listener.
|
|
7
|
+
*
|
|
8
|
+
* ```ts
|
|
9
|
+
* useEffect(() => onOpenURL((url) => signIn(new URL(url).searchParams.get('token'))), []);
|
|
10
|
+
* ```
|
|
11
|
+
*/
|
|
12
|
+
type Listener = (url: string) => void;
|
|
13
|
+
/** Listens for URLs the app is opened with; returns what stops listening. */
|
|
14
|
+
export declare function onOpenURL(listener: Listener): () => void;
|
|
15
|
+
/** The bridge's `__sbOpenURL(url)`. */
|
|
16
|
+
export declare function receiveOpenURL(url: string): void;
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=openURL.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openURL.d.ts","sourceRoot":"","sources":["../src/openURL.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,KAAK,QAAQ,GAAG,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;AAKtC,6EAA6E;AAC7E,wBAAgB,SAAS,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,IAAI,CAUxD;AAED,uCAAuC;AACvC,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAMhD"}
|
package/dist/openURL.js
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* URLs the app is opened with: a universal link (an `applinks:` associated
|
|
3
|
+
* domain) or a custom scheme, which SwiftUI's `onOpenURL` hands to
|
|
4
|
+
* `NativeApp.open(url:)` and the host passes to `__sbOpenURL`. A URL that
|
|
5
|
+
* arrives before anything listens (the link launched the app) waits for
|
|
6
|
+
* the first listener.
|
|
7
|
+
*
|
|
8
|
+
* ```ts
|
|
9
|
+
* useEffect(() => onOpenURL((url) => signIn(new URL(url).searchParams.get('token'))), []);
|
|
10
|
+
* ```
|
|
11
|
+
*/
|
|
12
|
+
const listeners = new Set();
|
|
13
|
+
let pending = null;
|
|
14
|
+
/** Listens for URLs the app is opened with; returns what stops listening. */
|
|
15
|
+
export function onOpenURL(listener) {
|
|
16
|
+
listeners.add(listener);
|
|
17
|
+
if (pending !== null) {
|
|
18
|
+
const url = pending;
|
|
19
|
+
pending = null;
|
|
20
|
+
listener(url);
|
|
21
|
+
}
|
|
22
|
+
return () => {
|
|
23
|
+
listeners.delete(listener);
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
/** The bridge's `__sbOpenURL(url)`. */
|
|
27
|
+
export function receiveOpenURL(url) {
|
|
28
|
+
if (listeners.size === 0) {
|
|
29
|
+
pending = String(url);
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
for (const listener of listeners)
|
|
33
|
+
listener(String(url));
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=openURL.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openURL.js","sourceRoot":"","sources":["../src/openURL.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,MAAM,SAAS,GAAG,IAAI,GAAG,EAAY,CAAC;AACtC,IAAI,OAAO,GAAkB,IAAI,CAAC;AAElC,6EAA6E;AAC7E,MAAM,UAAU,SAAS,CAAC,QAAkB;IAC1C,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACxB,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACrB,MAAM,GAAG,GAAG,OAAO,CAAC;QACpB,OAAO,GAAG,IAAI,CAAC;QACf,QAAQ,CAAC,GAAG,CAAC,CAAC;IAChB,CAAC;IACD,OAAO,GAAG,EAAE;QACV,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC7B,CAAC,CAAC;AACJ,CAAC;AAED,uCAAuC;AACvC,MAAM,UAAU,cAAc,CAAC,GAAW;IACxC,IAAI,SAAS,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QACtB,OAAO;IACT,CAAC;IACD,KAAK,MAAM,QAAQ,IAAI,SAAS;QAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1D,CAAC"}
|
package/dist/runtime.d.ts
CHANGED
|
@@ -12,8 +12,8 @@
|
|
|
12
12
|
* `AbortController` and `AbortSignal`, `URL`, `URLSearchParams`, `crypto`
|
|
13
13
|
* (`getRandomValues`, `randomUUID`), `localStorage`, `structuredClone`,
|
|
14
14
|
* `navigator`, `Worker` (worker.ts) with the bridge's `__sbWorkerMessage`
|
|
15
|
-
* and `__sbWorkerError`, and the bridge's
|
|
16
|
-
* `__sbFetchResult`. In a worker's own context (its bridge has
|
|
15
|
+
* and `__sbWorkerError`, `__sbOpenURL` (openURL.ts), and the bridge's
|
|
16
|
+
* callbacks `__sbTimerFired` and `__sbFetchResult`. In a worker's own context (its bridge has
|
|
17
17
|
* `workerPostMessage`), `self`, `postMessage`, `addEventListener` and
|
|
18
18
|
* `__sbWorkerReceive` instead of `Worker`. `window` and `document` are not
|
|
19
19
|
* defined: code that checks for them takes its headless path, as it should
|
package/dist/runtime.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAgB,KAAK,YAAY,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAgB,KAAK,YAAY,EAAE,MAAM,UAAU,CAAC;AAO3D,KAAK,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAQzC,MAAM,WAAW,cAAc;IAC7B,uDAAuD;IACvD,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,GAAE,SAA8C,EAAE,OAAO,GAAE,cAAmB,GAAG,MAAM,EAAE,CA8KnJ"}
|
package/dist/runtime.js
CHANGED
|
@@ -12,8 +12,8 @@
|
|
|
12
12
|
* `AbortController` and `AbortSignal`, `URL`, `URLSearchParams`, `crypto`
|
|
13
13
|
* (`getRandomValues`, `randomUUID`), `localStorage`, `structuredClone`,
|
|
14
14
|
* `navigator`, `Worker` (worker.ts) with the bridge's `__sbWorkerMessage`
|
|
15
|
-
* and `__sbWorkerError`, and the bridge's
|
|
16
|
-
* `__sbFetchResult`. In a worker's own context (its bridge has
|
|
15
|
+
* and `__sbWorkerError`, `__sbOpenURL` (openURL.ts), and the bridge's
|
|
16
|
+
* callbacks `__sbTimerFired` and `__sbFetchResult`. In a worker's own context (its bridge has
|
|
17
17
|
* `workerPostMessage`), `self`, `postMessage`, `addEventListener` and
|
|
18
18
|
* `__sbWorkerReceive` instead of `Worker`. `window` and `document` are not
|
|
19
19
|
* defined: code that checks for them takes its headless path, as it should
|
|
@@ -24,6 +24,7 @@ import { atobPolyfill, base64Decode, btoaPolyfill, SimpleTextDecoder, SimpleText
|
|
|
24
24
|
import { createFetch } from './fetch';
|
|
25
25
|
import { SimpleURL, SimpleURLSearchParams } from './url';
|
|
26
26
|
import { installWorkerScope, NativeWorker } from './worker';
|
|
27
|
+
import { receiveOpenURL } from './openURL';
|
|
27
28
|
/**
|
|
28
29
|
* Installs the runtime on `target` (the global object) over `native`.
|
|
29
30
|
* Returns what it installed, by name.
|
|
@@ -191,10 +192,14 @@ export function installRuntime(native, target = globalThis, options = {}) {
|
|
|
191
192
|
if (native.workerPostMessage) {
|
|
192
193
|
installed.push(...installWorkerScope(native, target));
|
|
193
194
|
}
|
|
194
|
-
else
|
|
195
|
-
|
|
196
|
-
define('
|
|
197
|
-
|
|
195
|
+
else {
|
|
196
|
+
// The app's context: the URLs it is opened with (openURL.ts), and workers.
|
|
197
|
+
define('__sbOpenURL', receiveOpenURL);
|
|
198
|
+
if (native.workerStart) {
|
|
199
|
+
define('Worker', NativeWorker);
|
|
200
|
+
define('__sbWorkerMessage', NativeWorker.receive);
|
|
201
|
+
define('__sbWorkerError', NativeWorker.fail);
|
|
202
|
+
}
|
|
198
203
|
}
|
|
199
204
|
return installed;
|
|
200
205
|
}
|
package/dist/runtime.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,YAAY,EAAqB,MAAM,UAAU,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC5G,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,qBAAqB,EAAE,MAAM,OAAO,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@swiftbrowser/native",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.14.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Run a @swiftbrowser/react app natively: the runtime a JavaScriptCore-hosted app needs (timers, console, fetch and the other web globals over the SwiftBrowser Native bridge), the `run` entry that renders into the native SwiftUI renderer, and the bundler that builds app.js for the Xcode target.",
|
|
6
6
|
"repository": {
|
|
@@ -59,8 +59,8 @@
|
|
|
59
59
|
},
|
|
60
60
|
"dependencies": {
|
|
61
61
|
"@babel/core": "^7.29.7",
|
|
62
|
-
"@swiftbrowser/react": "0.
|
|
63
|
-
"@swiftbrowser/web": "0.
|
|
62
|
+
"@swiftbrowser/react": "0.14.1",
|
|
63
|
+
"@swiftbrowser/web": "0.14.1",
|
|
64
64
|
"esbuild": "^0.28.2",
|
|
65
65
|
"react-refresh": "^0.17.0"
|
|
66
66
|
},
|
package/src/bridge.ts
CHANGED
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
* The native side of the bridge, as Swift installs it on `__sbNative`
|
|
3
3
|
* (Native/Sources/SwiftBrowserNative/Host/HostBridge.swift). Every call is
|
|
4
4
|
* synchronous; the ones that answer later do so by calling a global this
|
|
5
|
-
* package defines (`__sbTimerFired`, `__sbFetchResult`
|
|
5
|
+
* package defines (`__sbTimerFired`, `__sbFetchResult`, `__sbWorkerMessage`,
|
|
6
|
+
* `__sbOpenURL`).
|
|
6
7
|
*/
|
|
7
8
|
export interface NativeBridge {
|
|
8
9
|
/** Applies a render pass's ops (a JSON array). Returns an error message, or nothing. */
|
package/src/build.ts
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Builds `app.js` for an Xcode target: the runtime first (./runtime, so the
|
|
3
3
|
* web globals exist before React's scheduler reads them), then the app, as
|
|
4
|
-
* one script JavaScriptCore evaluates with `NativeApp.load`.
|
|
5
|
-
*
|
|
6
|
-
*
|
|
4
|
+
* one script JavaScriptCore evaluates with `NativeApp.load`. Both are one
|
|
5
|
+
* esbuild graph, so the package's modules exist once in the script: the
|
|
6
|
+
* runtime's `__sbOpenURL` and the app's `onOpenURL` share their listeners,
|
|
7
|
+
* and `__sbWorkerMessage` the app's workers. `react-dom` is aliased to
|
|
8
|
+
* stubs (no DOM here); `@swiftbrowser/react` and React are bundled in.
|
|
9
|
+
* Node only (the CLI in ../bin and build scripts use it).
|
|
7
10
|
*/
|
|
8
11
|
|
|
9
12
|
import * as esbuild from 'esbuild';
|
|
@@ -96,17 +99,28 @@ function common(options: BuildOptions): esbuild.BuildOptions {
|
|
|
96
99
|
};
|
|
97
100
|
}
|
|
98
101
|
|
|
99
|
-
/**
|
|
102
|
+
/**
|
|
103
|
+
* One script: the runtime, then `entry`, in one graph (the runtime is
|
|
104
|
+
* injected, which esbuild evaluates ahead of the entry). A second build of
|
|
105
|
+
* the runtime prepended to the app's would leave the app a copy of this
|
|
106
|
+
* package of its own, whose `onOpenURL` listeners and workers the runtime's
|
|
107
|
+
* globals never reach.
|
|
108
|
+
*/
|
|
109
|
+
async function script(options: BuildOptions, entry: string): Promise<esbuild.BuildResult> {
|
|
110
|
+
const path = resolve(entry);
|
|
111
|
+
return esbuild.build({ ...common(options), entryPoints: [path], inject: [runtimeEntry], alias: aliases(path) });
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/** Builds the app's script, and each worker's the same way. */
|
|
100
115
|
export async function bundle(options: BuildOptions): Promise<BuildResult> {
|
|
101
|
-
const
|
|
102
|
-
const
|
|
103
|
-
const
|
|
104
|
-
const warnings = [...runtime.warnings, ...app.warnings].map((warning) => warning.text);
|
|
116
|
+
const app = await script(options, options.entry);
|
|
117
|
+
const code = text(app);
|
|
118
|
+
const warnings = app.warnings.map((warning) => warning.text);
|
|
105
119
|
const workers: BuildResult['workers'] = {};
|
|
106
120
|
for (const [name, entry] of Object.entries(options.workers ?? {})) {
|
|
107
121
|
if (!WORKER_NAME.test(name)) throw new Error(`worker names are letters, digits, "_" and "-": ${name}`);
|
|
108
|
-
const worker = await
|
|
109
|
-
const workerCode =
|
|
122
|
+
const worker = await script(options, entry);
|
|
123
|
+
const workerCode = text(worker);
|
|
110
124
|
workers[name] = { code: workerCode, bytes: Buffer.byteLength(workerCode) };
|
|
111
125
|
warnings.push(...worker.warnings.map((warning) => warning.text));
|
|
112
126
|
}
|
package/src/index.ts
CHANGED
|
@@ -19,3 +19,4 @@ export { SimpleHeaders, SimpleRequest, SimpleResponse, SimpleAbortController, Si
|
|
|
19
19
|
export { SimpleURL, SimpleURLSearchParams } from './url';
|
|
20
20
|
export { SimpleTextEncoder, SimpleTextDecoder, base64Encode, base64Decode, utf8Encode, utf8Decode } from './encoding';
|
|
21
21
|
export { createWorker, NativeWorker, encodeMessage, decodeMessage, workerName, type WorkerLike, type WorkerMessageEvent, type WorkerErrorEvent } from './worker';
|
|
22
|
+
export { onOpenURL } from './openURL';
|
package/src/openURL.ts
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* URLs the app is opened with: a universal link (an `applinks:` associated
|
|
3
|
+
* domain) or a custom scheme, which SwiftUI's `onOpenURL` hands to
|
|
4
|
+
* `NativeApp.open(url:)` and the host passes to `__sbOpenURL`. A URL that
|
|
5
|
+
* arrives before anything listens (the link launched the app) waits for
|
|
6
|
+
* the first listener.
|
|
7
|
+
*
|
|
8
|
+
* ```ts
|
|
9
|
+
* useEffect(() => onOpenURL((url) => signIn(new URL(url).searchParams.get('token'))), []);
|
|
10
|
+
* ```
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
type Listener = (url: string) => void;
|
|
14
|
+
|
|
15
|
+
const listeners = new Set<Listener>();
|
|
16
|
+
let pending: string | null = null;
|
|
17
|
+
|
|
18
|
+
/** Listens for URLs the app is opened with; returns what stops listening. */
|
|
19
|
+
export function onOpenURL(listener: Listener): () => void {
|
|
20
|
+
listeners.add(listener);
|
|
21
|
+
if (pending !== null) {
|
|
22
|
+
const url = pending;
|
|
23
|
+
pending = null;
|
|
24
|
+
listener(url);
|
|
25
|
+
}
|
|
26
|
+
return () => {
|
|
27
|
+
listeners.delete(listener);
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/** The bridge's `__sbOpenURL(url)`. */
|
|
32
|
+
export function receiveOpenURL(url: string): void {
|
|
33
|
+
if (listeners.size === 0) {
|
|
34
|
+
pending = String(url);
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
for (const listener of listeners) listener(String(url));
|
|
38
|
+
}
|
package/src/runtime.ts
CHANGED
|
@@ -12,8 +12,8 @@
|
|
|
12
12
|
* `AbortController` and `AbortSignal`, `URL`, `URLSearchParams`, `crypto`
|
|
13
13
|
* (`getRandomValues`, `randomUUID`), `localStorage`, `structuredClone`,
|
|
14
14
|
* `navigator`, `Worker` (worker.ts) with the bridge's `__sbWorkerMessage`
|
|
15
|
-
* and `__sbWorkerError`, and the bridge's
|
|
16
|
-
* `__sbFetchResult`. In a worker's own context (its bridge has
|
|
15
|
+
* and `__sbWorkerError`, `__sbOpenURL` (openURL.ts), and the bridge's
|
|
16
|
+
* callbacks `__sbTimerFired` and `__sbFetchResult`. In a worker's own context (its bridge has
|
|
17
17
|
* `workerPostMessage`), `self`, `postMessage`, `addEventListener` and
|
|
18
18
|
* `__sbWorkerReceive` instead of `Worker`. `window` and `document` are not
|
|
19
19
|
* defined: code that checks for them takes its headless path, as it should
|
|
@@ -25,6 +25,7 @@ import { atobPolyfill, base64Decode, btoaPolyfill, SimpleTextDecoder, SimpleText
|
|
|
25
25
|
import { createFetch } from './fetch';
|
|
26
26
|
import { SimpleURL, SimpleURLSearchParams } from './url';
|
|
27
27
|
import { installWorkerScope, NativeWorker } from './worker';
|
|
28
|
+
import { receiveOpenURL } from './openURL';
|
|
28
29
|
|
|
29
30
|
type AnyGlobal = Record<string, unknown>;
|
|
30
31
|
|
|
@@ -206,10 +207,14 @@ export function installRuntime(native: NativeBridge, target: AnyGlobal = globalT
|
|
|
206
207
|
|
|
207
208
|
if (native.workerPostMessage) {
|
|
208
209
|
installed.push(...installWorkerScope(native, target));
|
|
209
|
-
} else
|
|
210
|
-
|
|
211
|
-
define('
|
|
212
|
-
|
|
210
|
+
} else {
|
|
211
|
+
// The app's context: the URLs it is opened with (openURL.ts), and workers.
|
|
212
|
+
define('__sbOpenURL', receiveOpenURL);
|
|
213
|
+
if (native.workerStart) {
|
|
214
|
+
define('Worker', NativeWorker);
|
|
215
|
+
define('__sbWorkerMessage', NativeWorker.receive);
|
|
216
|
+
define('__sbWorkerError', NativeWorker.fail);
|
|
217
|
+
}
|
|
213
218
|
}
|
|
214
219
|
|
|
215
220
|
return installed;
|
|
@@ -37,6 +37,9 @@ public final class NativeApp {
|
|
|
37
37
|
public private(set) var colorScheme: String?
|
|
38
38
|
public private(set) var dynamicTypeSize: String?
|
|
39
39
|
public private(set) var horizontalSizeClass: String?
|
|
40
|
+
/// URLs the app was opened with before its script could take them (a
|
|
41
|
+
/// universal link that launched it): delivered once it loads.
|
|
42
|
+
private var pendingURLs: [URL] = []
|
|
40
43
|
|
|
41
44
|
#if canImport(JavaScriptCore)
|
|
42
45
|
public convenience init() {
|
|
@@ -72,11 +75,34 @@ public final class NativeApp {
|
|
|
72
75
|
isLoaded = host.hasGlobal("__sbDispatch")
|
|
73
76
|
if !isLoaded { error = "\(name) did not call run(): no __sbDispatch" }
|
|
74
77
|
sendEnvironment()
|
|
78
|
+
deliverPendingURLs()
|
|
75
79
|
} catch {
|
|
76
80
|
self.error = "\(error)"
|
|
77
81
|
}
|
|
78
82
|
}
|
|
79
83
|
|
|
84
|
+
/// Hands the app a URL it was opened with (a universal link, a custom
|
|
85
|
+
/// scheme: SwiftUI's `onOpenURL`). JavaScript's `onOpenURL` listeners
|
|
86
|
+
/// (`@swiftbrowser/native`) get it; before the bundle loads, it waits.
|
|
87
|
+
public func open(url: URL) {
|
|
88
|
+
guard isLoaded, host.hasGlobal("__sbOpenURL") else {
|
|
89
|
+
pendingURLs.append(url)
|
|
90
|
+
return
|
|
91
|
+
}
|
|
92
|
+
do {
|
|
93
|
+
try host.call("__sbOpenURL", [.string(url.absoluteString)])
|
|
94
|
+
} catch {
|
|
95
|
+
self.error = "\(error)"
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
private func deliverPendingURLs() {
|
|
100
|
+
guard isLoaded, !pendingURLs.isEmpty else { return }
|
|
101
|
+
let urls = pendingURLs
|
|
102
|
+
pendingURLs = []
|
|
103
|
+
for url in urls { open(url: url) }
|
|
104
|
+
}
|
|
105
|
+
|
|
80
106
|
/// Starts over for a reload: a fresh engine (the old one's globals and
|
|
81
107
|
/// timers go with it) and an empty tree, which the views are observing.
|
|
82
108
|
private func reset() {
|
|
@@ -188,6 +214,7 @@ public final class NativeApp {
|
|
|
188
214
|
isLoaded = host.hasGlobal("__sbDispatch")
|
|
189
215
|
if !isLoaded { error = "the scripts did not call run(): no __sbDispatch" }
|
|
190
216
|
sendEnvironment()
|
|
217
|
+
deliverPendingURLs()
|
|
191
218
|
} catch {
|
|
192
219
|
self.error = "\(error)"
|
|
193
220
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
[diffend] Oversized file quarantined before diffing.
|
|
2
2
|
name: package/wasm/SwiftBrowserNative.wasm
|
|
3
|
-
size:
|
|
4
|
-
sha256:
|
|
3
|
+
size: 49301069 bytes
|
|
4
|
+
sha256: 644cdf56fe487eb95d2c2c0e40782626f6fb70259a3ea40a6b9e11d2c23c401a
|