@symbiote-native/web-browser 0.2.0 → 1.0.0

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 CHANGED
@@ -3,11 +3,12 @@
3
3
  A wrapper package for [SymbioteNative](../../README.md) that makes
4
4
  [`expo-web-browser`](https://github.com/expo/expo/tree/main/packages/expo-web-browser) — an in-app
5
5
  browser (`SFSafariViewController` on iOS, Chrome Custom Tabs on Android) plus the OAuth
6
- auth-session flow — usable from **every** adapter, React, Vue, and Angular, not just React. Built
7
- the same way as [`@symbiote-native/secure-store`](../secure-store): an `expo-modules-core`-based
8
- wrapper (see the `symbiote-expo-native-module` project skill for the full mechanism — why
9
- `expo-modules-core` is depended on directly and never the `expo` meta-package, why the upstream JS
10
- is hand-ported into `core/` rather than imported, and how autolinking picks up the native module).
6
+ auth-session flow — usable from **every** adapter, React, Vue, Svelte, Solid, and Angular, not just
7
+ React. Built the same way as [`@symbiote-native/secure-store`](../secure-store): an
8
+ `expo-modules-core`-based wrapper (see the `symbiote-expo-native-module` project skill for the full
9
+ mechanism — why `expo-modules-core` is depended on directly and never the `expo` meta-package, why
10
+ the upstream JS is hand-ported into `core/` rather than imported, and how autolinking picks up the
11
+ native module).
11
12
 
12
13
  ## Install
13
14
 
@@ -25,12 +26,12 @@ Unlike a plain RN native module, `expo-web-browser`'s native code is discovered
25
26
  `expo-modules-autolinking` — this needs wiring into the native host app **once**, covering this
26
27
  package and every other `expo-modules-core` package with zero further changes:
27
28
 
28
- | Platform | Touches |
29
- |---|---|
30
- | iOS | `ios/Podfile` — add `use_expo_modules!` |
31
- | iOS | `AppDelegate.swift` — Expo's runtime-bootstrap hook |
32
- | Android | `settings.gradle` / `app/build.gradle` — resolve and include the Expo Gradle projects |
33
- | Android | `MainApplication.kt` — Expo's bootstrap hook, plus a native-module name map |
29
+ | Platform | Touches |
30
+ | -------- | ------------------------------------------------------------------------------------- |
31
+ | iOS | `ios/Podfile` — add `use_expo_modules!` |
32
+ | iOS | `AppDelegate.swift` — Expo's runtime-bootstrap hook |
33
+ | Android | `settings.gradle` / `app/build.gradle` — resolve and include the Expo Gradle projects |
34
+ | Android | `MainApplication.kt` — Expo's bootstrap hook, plus a native-module name map |
34
35
 
35
36
  Full mechanics live in the `symbiote-expo-native-module` skill. The per-package half of that table
36
37
  — the Gradle dependency and the module map entry — is generated by
@@ -45,18 +46,18 @@ your app automatically.
45
46
  src/core/ the whole API: open/dismiss, the auth session, and the Custom Tabs
46
47
  service functions. native-module.ts resolves ExpoWebBrowser through
47
48
  expo-modules-core's requireNativeModule.
48
- src/react/ @symbiote-native/web-browser/react
49
- src/vue/ @symbiote-native/web-browser/vue
50
49
  src/angular/ @symbiote-native/web-browser/angular
51
50
  ```
52
51
 
53
- All three adapter entries are plain re-exports of `core/`. Every export is a stateless free
54
- function; the one piece of live state — the Android auth-session polyfill's redirect subscription —
55
- belongs to a single in-flight promise inside the core and never surfaces as something a caller
56
- subscribes to or tears down. So there is nothing for a hook, composable, or service to wrap, the
57
- same reason [`@symbiote-native/secure-store`](../secure-store) re-exports rather than wraps. Import
58
- from `@symbiote-native/web-browser` directly if you don't care which adapter you're on; the
59
- per-adapter subpaths exist so every wrapper package has the same import surface.
52
+ `./react`, `./vue`, `./svelte`, and `./solid` are `exports`-map aliases straight onto
53
+ `src/core/` — no physical per-framework file. Every export is a stateless free function; the one
54
+ piece of live state — the Android auth-session polyfill's redirect subscription — belongs to a
55
+ single in-flight promise inside the core and never surfaces as something a caller subscribes to or
56
+ tears down. So there is nothing for a hook, composable, or service to wrap, the same reason
57
+ [`@symbiote-native/secure-store`](../secure-store) does the same. `./angular` stays a physical
58
+ file/subpath since Angular ships through a separate `ngc`/AOT build (`build-ngc/`). Import from
59
+ `@symbiote-native/web-browser` directly if you don't care which adapter you're on; the per-adapter
60
+ subpaths exist so every wrapper package has the same import surface.
60
61
 
61
62
  ## Use it
62
63
 
@@ -66,6 +67,25 @@ import * as WebBrowser from '@symbiote-native/web-browser';
66
67
  await WebBrowser.openBrowserAsync('https://example.com');
67
68
  ```
68
69
 
70
+ Every framework subpath re-exports the identical free functions — pick whichever import matches
71
+ the app's own adapter, or the bare package if you don't care:
72
+
73
+ ```ts
74
+ import { openBrowserAsync } from '@symbiote-native/web-browser/react';
75
+ import { openBrowserAsync } from '@symbiote-native/web-browser/vue';
76
+ import { openBrowserAsync } from '@symbiote-native/web-browser/svelte';
77
+ import { openBrowserAsync } from '@symbiote-native/web-browser/solid';
78
+ import { openBrowserAsync } from '@symbiote-native/web-browser/angular';
79
+ ```
80
+
81
+ These mirror the real canary demo screens —
82
+ `examples/expo-react/screens/WebBrowserScreen.tsx`,
83
+ `examples/expo-vue-sfc/screens/WebBrowserScreen.vue`,
84
+ `examples/expo-vue-tsx/screens/WebBrowserScreen.tsx`,
85
+ `examples/expo-svelte/screens/WebBrowserScreen.svelte`,
86
+ `examples/expo-solid/screens/WebBrowserScreen.tsx`,
87
+ `examples/expo-angular/src/screens/WebBrowserScreen.ts`.
88
+
69
89
  The in-app browser keeps the user inside the app, unlike `Linking.openURL`, which hands them off to
70
90
  the system browser. iOS resolves once the browser closes (`{ type: 'cancel' }`, or
71
91
  `{ type: 'dismiss' }` if you closed it yourself with `dismissBrowser()`); Android resolves with
@@ -101,18 +121,18 @@ await WebBrowser.coolDownAsync(servicePackage);
101
121
 
102
122
  ## API
103
123
 
104
- | Export | Signature | Notes |
105
- |---|---|---|
106
- | `openBrowserAsync` | `(url, options?) => Promise<IWebBrowserResult>` | Opens the in-app browser. |
107
- | `dismissBrowser` | `() => Promise<IWebBrowserDismissResult>` | iOS only — throws elsewhere, since a Custom Tab cannot be closed programmatically. |
108
- | `openAuthSessionAsync` | `(url, redirectUrl?, options?) => Promise<IWebBrowserAuthSessionResult>` | Resolves `{ type: 'success', url }` on the redirect. |
109
- | `dismissAuthSession` | `() => void` | iOS only, for the same reason as `dismissBrowser`. |
110
- | `warmUpAsync` | `(browserPackage?) => Promise<IWebBrowserWarmUpResult>` | Android. Resolves `{}` elsewhere. |
111
- | `mayInitWithUrlAsync` | `(url, browserPackage?) => Promise<IWebBrowserMayInitWithUrlResult>` | Android. Resolves `{}` elsewhere. |
112
- | `coolDownAsync` | `(browserPackage?) => Promise<IWebBrowserCoolDownResult>` | Android. Resolves `{}` elsewhere. |
113
- | `getCustomTabsSupportingBrowsersAsync` | `() => Promise<IWebBrowserCustomTabsResults>` | Android. Throws on iOS — see the note below. |
114
- | `WebBrowserResultType` | `enum` | `CANCEL`, `DISMISS`, `OPENED`, `LOCKED`. |
115
- | `WebBrowserPresentationStyle` | `enum` | iOS modal presentation styles for `options.presentationStyle`. |
124
+ | Export | Signature | Notes |
125
+ | -------------------------------------- | ------------------------------------------------------------------------ | ---------------------------------------------------------------------------------- |
126
+ | `openBrowserAsync` | `(url, options?) => Promise<IWebBrowserResult>` | Opens the in-app browser. |
127
+ | `dismissBrowser` | `() => Promise<IWebBrowserDismissResult>` | iOS only — throws elsewhere, since a Custom Tab cannot be closed programmatically. |
128
+ | `openAuthSessionAsync` | `(url, redirectUrl?, options?) => Promise<IWebBrowserAuthSessionResult>` | Resolves `{ type: 'success', url }` on the redirect. |
129
+ | `dismissAuthSession` | `() => void` | iOS only, for the same reason as `dismissBrowser`. |
130
+ | `warmUpAsync` | `(browserPackage?) => Promise<IWebBrowserWarmUpResult>` | Android. Resolves `{}` elsewhere. |
131
+ | `mayInitWithUrlAsync` | `(url, browserPackage?) => Promise<IWebBrowserMayInitWithUrlResult>` | Android. Resolves `{}` elsewhere. |
132
+ | `coolDownAsync` | `(browserPackage?) => Promise<IWebBrowserCoolDownResult>` | Android. Resolves `{}` elsewhere. |
133
+ | `getCustomTabsSupportingBrowsersAsync` | `() => Promise<IWebBrowserCustomTabsResults>` | Android. Throws on iOS — see the note below. |
134
+ | `WebBrowserResultType` | `enum` | `CANCEL`, `DISMISS`, `OPENED`, `LOCKED`. |
135
+ | `WebBrowserPresentationStyle` | `enum` | iOS modal presentation styles for `options.presentationStyle`. |
116
136
 
117
137
  `IWebBrowserOpenOptions`: `toolbarColor`, `enableBarCollapsing`; Android's `browserPackage`,
118
138
  `secondaryToolbarColor`, `showTitle`, `enableDefaultShareMenuItem`, `showInRecents`, `createTask`,
@@ -1 +1 @@
1
- {"version":3,"file":"native-module.js","sourceRoot":"","sources":["../../src/core/native-module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAYxD,MAAM,4BAA4B,GAAG,gBAAgB,CAAC;AA4BtD,MAAM,CAAC,MAAM,cAAc,GAAG,mBAAmB,CAC/C,4BAA4B,CAC7B,CAAC"}
1
+ {"version":3,"file":"native-module.js","sourceRoot":"","sources":["../../src/core/native-module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAYxD,MAAM,4BAA4B,GAAG,gBAAgB,CAAC;AA+BtD,MAAM,CAAC,MAAM,cAAc,GAAG,mBAAmB,CAC/C,4BAA4B,CAC7B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"web-browser.js","sourceRoot":"","sources":["../../src/core/web-browser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"web-browser.js","sourceRoot":"","sources":["../../src/core/web-browser.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,18 @@
1
1
  {
2
2
  "name": "@symbiote-native/web-browser",
3
- "version": "0.2.0",
4
- "description": "expo-web-browser wrapped for SymbioteNative — one framework-agnostic core, built once and reachable from the React, Vue, and Angular adapters. In-app browser (SFSafariViewController / Android Custom Tabs) and the OAuth auth-session flow.",
3
+ "version": "1.0.0",
4
+ "description": "expo-web-browser wrapped for SymbioteNative — one framework-agnostic core, built once and reachable from the React, Vue, Svelte, Solid, and Angular adapters. In-app browser (SFSafariViewController / Android Custom Tabs) and the OAuth auth-session flow.",
5
+ "keywords": [
6
+ "react-native",
7
+ "symbiote-native",
8
+ "react",
9
+ "vue",
10
+ "svelte",
11
+ "solid",
12
+ "angular",
13
+ "in-app-browser",
14
+ "oauth"
15
+ ],
5
16
  "license": "MIT",
6
17
  "repository": {
7
18
  "type": "git",
@@ -23,16 +34,20 @@
23
34
  "default": "./build/core/index.js"
24
35
  },
25
36
  "./vue": {
26
- "types": "./build/vue/index.d.ts",
27
- "default": "./build/vue/index.js"
37
+ "types": "./build/core/index.d.ts",
38
+ "default": "./build/core/index.js"
28
39
  },
29
40
  "./react": {
30
- "types": "./build/react/index.d.ts",
31
- "default": "./build/react/index.js"
41
+ "types": "./build/core/index.d.ts",
42
+ "default": "./build/core/index.js"
32
43
  },
33
44
  "./svelte": {
34
- "types": "./build/svelte/index.d.ts",
35
- "default": "./build/svelte/index.js"
45
+ "types": "./build/core/index.d.ts",
46
+ "default": "./build/core/index.js"
47
+ },
48
+ "./solid": {
49
+ "types": "./build/core/index.d.ts",
50
+ "default": "./build/core/index.js"
36
51
  },
37
52
  "./angular": {
38
53
  "types": "./build-ngc/angular/index.d.ts",
@@ -57,17 +72,19 @@
57
72
  "expo-modules-core": "57.0.5"
58
73
  },
59
74
  "peerDependencies": {
60
- "@symbiote-native/angular": ">=0.6.2",
61
- "@symbiote-native/engine": ">=0.1.7",
62
- "@symbiote-native/react": ">=0.2.8",
63
- "@symbiote-native/svelte": ">=0.1.0",
64
- "@symbiote-native/vue": ">=0.3.8",
65
75
  "@angular/core": ">=20",
66
76
  "@vue/runtime-core": "^3.5.13",
67
77
  "react": ">=19.0.0",
68
78
  "react-native": ">=0.86",
79
+ "solid-js": ">=1.9.0",
69
80
  "svelte": ">=5.56.0",
70
- "vue": ">=3.5.0"
81
+ "vue": ">=3.5.0",
82
+ "@symbiote-native/angular": "^1.0.0",
83
+ "@symbiote-native/engine": "^0.4.0",
84
+ "@symbiote-native/react": "^1.0.0",
85
+ "@symbiote-native/svelte": "^1.0.0",
86
+ "@symbiote-native/solid": "^1.0.0",
87
+ "@symbiote-native/vue": "^1.0.0"
71
88
  },
72
89
  "peerDependenciesMeta": {
73
90
  "@symbiote-native/angular": {
@@ -76,6 +93,9 @@
76
93
  "@symbiote-native/react": {
77
94
  "optional": true
78
95
  },
96
+ "@symbiote-native/solid": {
97
+ "optional": true
98
+ },
79
99
  "@symbiote-native/svelte": {
80
100
  "optional": true
81
101
  },
@@ -91,6 +111,9 @@
91
111
  "react": {
92
112
  "optional": true
93
113
  },
114
+ "solid-js": {
115
+ "optional": true
116
+ },
94
117
  "svelte": {
95
118
  "optional": true
96
119
  },
@@ -106,14 +129,16 @@
106
129
  "@types/react": "^19.2.0",
107
130
  "@vue/runtime-core": "^3.5.13",
108
131
  "react": "19.2.3",
132
+ "solid-js": "^1.9.14",
109
133
  "svelte": "^5.56.0",
110
134
  "typescript": "~6.0.0",
111
- "@symbiote-native/engine": "0.2.0",
112
- "@symbiote-native/angular": "0.7.0",
113
- "@symbiote-native/svelte": "0.2.0",
114
- "@symbiote-native/test-utils": "0.1.6",
115
- "@symbiote-native/react": "0.3.0",
116
- "@symbiote-native/vue": "0.4.0"
135
+ "@symbiote-native/angular": "1.0.0",
136
+ "@symbiote-native/engine": "0.4.0",
137
+ "@symbiote-native/react": "1.0.0",
138
+ "@symbiote-native/solid": "1.0.0",
139
+ "@symbiote-native/svelte": "1.0.0",
140
+ "@symbiote-native/test-utils": "0.3.0",
141
+ "@symbiote-native/vue": "1.0.0"
117
142
  },
118
143
  "scripts": {
119
144
  "typecheck": "tsc --build",
@@ -21,7 +21,10 @@ const EXPO_WEB_BROWSER_MODULE_NAME = 'ExpoWebBrowser';
21
21
  // getCustomTabsSupportingBrowsersAsync. There is no way to dismiss a Custom Tab and no
22
22
  // native auth session; the user has to press the tab's own close button.
23
23
  export type INativeWebBrowserModule = {
24
- openBrowserAsync?(url: string, options: IProcessedOpenOptions): Promise<IWebBrowserResult>;
24
+ openBrowserAsync?(
25
+ url: string,
26
+ options: IProcessedOpenOptions,
27
+ ): Promise<IWebBrowserResult>;
25
28
  dismissBrowser?(): Promise<IWebBrowserDismissResult>;
26
29
  openAuthSessionAsync?(
27
30
  url: string,
package/src/core/types.ts CHANGED
@@ -202,7 +202,8 @@ export type IServiceActionResult = {
202
202
  servicePackage?: string;
203
203
  };
204
204
 
205
- export type IWebBrowserAuthSessionResult = IWebBrowserRedirectResult | IWebBrowserResult;
205
+ export type IWebBrowserAuthSessionResult =
206
+ IWebBrowserRedirectResult | IWebBrowserResult;
206
207
  export type IWebBrowserMayInitWithUrlResult = IServiceActionResult;
207
208
  export type IWebBrowserWarmUpResult = IServiceActionResult;
208
209
  export type IWebBrowserCoolDownResult = IServiceActionResult;
@@ -45,7 +45,10 @@ export async function getCustomTabsSupportingBrowsersAsync(): Promise<IWebBrowse
45
45
  // suffix, so this guard — kept in upstream's order deliberately — fires there before the
46
46
  // non-Android early return below can be reached.
47
47
  if (!expoWebBrowser.getCustomTabsSupportingBrowsersAsync) {
48
- throw new UnavailabilityError(NATIVE_MODULE_NAME, 'getCustomTabsSupportingBrowsersAsync');
48
+ throw new UnavailabilityError(
49
+ NATIVE_MODULE_NAME,
50
+ 'getCustomTabsSupportingBrowsersAsync',
51
+ );
49
52
  }
50
53
  if (Platform.OS !== 'android') {
51
54
  return EMPTY_CUSTOM_TABS_PACKAGES;
@@ -60,7 +63,9 @@ export async function getCustomTabsSupportingBrowsersAsync(): Promise<IWebBrowse
60
63
  * @param browserPackage Browser to warm up. Defaults to the preferred one.
61
64
  * @platform android
62
65
  */
63
- export async function warmUpAsync(browserPackage?: string): Promise<IWebBrowserWarmUpResult> {
66
+ export async function warmUpAsync(
67
+ browserPackage?: string,
68
+ ): Promise<IWebBrowserWarmUpResult> {
64
69
  if (!expoWebBrowser.warmUpAsync) {
65
70
  throw new UnavailabilityError(NATIVE_MODULE_NAME, 'warmUpAsync');
66
71
  }
@@ -100,7 +105,9 @@ export async function mayInitWithUrlAsync(
100
105
  * @returns The cooled service, or an empty object when there was no connection to dismiss.
101
106
  * @platform android
102
107
  */
103
- export async function coolDownAsync(browserPackage?: string): Promise<IWebBrowserCoolDownResult> {
108
+ export async function coolDownAsync(
109
+ browserPackage?: string,
110
+ ): Promise<IWebBrowserCoolDownResult> {
104
111
  if (!expoWebBrowser.coolDownAsync) {
105
112
  throw new UnavailabilityError(NATIVE_MODULE_NAME, 'coolDownAsync');
106
113
  }
@@ -174,7 +181,11 @@ export async function openAuthSessionAsync(
174
181
  if (!expoWebBrowser.openAuthSessionAsync) {
175
182
  throw new UnavailabilityError(NATIVE_MODULE_NAME, 'openAuthSessionAsync');
176
183
  }
177
- return expoWebBrowser.openAuthSessionAsync(url, redirectUrl, processOptions(options));
184
+ return expoWebBrowser.openAuthSessionAsync(
185
+ url,
186
+ redirectUrl,
187
+ processOptions(options),
188
+ );
178
189
  }
179
190
 
180
191
  /**
@@ -198,7 +209,9 @@ export function dismissAuthSession(): void {
198
209
  void expoWebBrowser.dismissBrowser();
199
210
  }
200
211
 
201
- function processOptions(options: IAuthSessionOpenOptions): IProcessedOpenOptions {
212
+ function processOptions(
213
+ options: IAuthSessionOpenOptions,
214
+ ): IProcessedOpenOptions {
202
215
  return {
203
216
  ...options,
204
217
  controlsColor: processColor(options.controlsColor),
@@ -242,7 +255,10 @@ async function openBrowserAndWaitAndroidAsync(
242
255
  const appStateChangedToActive = new Promise<void>(resolve => {
243
256
  onWebBrowserCloseAndroid = resolve;
244
257
  });
245
- const stateChangeSubscription = AppState.addEventListener('change', onAppStateChangeAndroid);
258
+ const stateChangeSubscription = AppState.addEventListener(
259
+ 'change',
260
+ onAppStateChangeAndroid,
261
+ );
246
262
 
247
263
  let launched: IWebBrowserResult;
248
264
  try {
@@ -275,7 +291,9 @@ async function openAuthSessionPolyfillAsync(
275
291
  );
276
292
  }
277
293
  if (onWebBrowserCloseAndroid) {
278
- throw new Error('WebBrowser is already open, only one can be open at a time');
294
+ throw new Error(
295
+ 'WebBrowser is already open, only one can be open at a time',
296
+ );
279
297
  }
280
298
 
281
299
  try {
@@ -303,14 +321,19 @@ function stopWaitingForRedirect(): void {
303
321
  redirectSubscription = null;
304
322
  }
305
323
 
306
- function waitForRedirectAsync(returnUrl?: string | null): Promise<IWebBrowserRedirectResult> {
324
+ function waitForRedirectAsync(
325
+ returnUrl?: string | null,
326
+ ): Promise<IWebBrowserRedirectResult> {
307
327
  // Deliberately never resolves when `returnUrl` is nullish: the browser promise it is raced
308
328
  // against is then the only thing that can settle the session.
309
329
  return new Promise(resolve => {
310
- redirectSubscription = Linking.addEventListener('url', (event: IRedirectEvent) => {
311
- if (returnUrl && event.url.startsWith(returnUrl)) {
312
- resolve({ url: event.url, type: 'success' });
313
- }
314
- });
330
+ redirectSubscription = Linking.addEventListener(
331
+ 'url',
332
+ (event: IRedirectEvent) => {
333
+ if (returnUrl && event.url.startsWith(returnUrl)) {
334
+ resolve({ url: event.url, type: 'success' });
335
+ }
336
+ },
337
+ );
315
338
  });
316
339
  }
@@ -1 +0,0 @@
1
- export * from '../core';
@@ -1,7 +0,0 @@
1
- // @symbiote-native/web-browser/react: the React entry over the framework-agnostic core.
2
- // Every export is a stateless free function. The one piece of live state — the Android
3
- // auth-session polyfill's redirect subscription — belongs to a single in-flight promise inside the
4
- // core and never surfaces as something a caller subscribes to or tears down, so there is nothing
5
- // for a hook to wrap. Hence a plain re-export, the same shape packages/secure-store's React entry
6
- // has for the same reason.
7
- export * from '../core/index.js';
@@ -1 +0,0 @@
1
- export * from '../core';
@@ -1,8 +0,0 @@
1
- // @symbiote-native/web-browser/svelte: the Svelte entry over the framework-agnostic core.
2
- // Every export is a stateless free function. The one piece of live state — the Android
3
- // auth-session polyfill's redirect subscription — belongs to a single in-flight promise inside
4
- // the core and never surfaces as something a caller subscribes to or tears down, so there is
5
- // nothing for a rune to wrap. Hence a plain re-export. Svelte's lifecycle bucket is `runes/`
6
- // (adapters/svelte/src/runes — never React's `hooks` or Vue's `composables`), and this package
7
- // has none to fill.
8
- export * from '../core/index.js';
@@ -1 +0,0 @@
1
- export * from '../core';
@@ -1,4 +0,0 @@
1
- // @symbiote-native/web-browser/vue: the Vue entry over the framework-agnostic core.
2
- // Nothing here holds per-instance state or hands back a subscription, so there is no lifecycle for
3
- // a composable to own — see the React entry for the full reasoning.
4
- export * from '../core/index.js';
@@ -1,7 +0,0 @@
1
- // @symbiote-native/web-browser/react: the React entry over the framework-agnostic core.
2
- // Every export is a stateless free function. The one piece of live state — the Android
3
- // auth-session polyfill's redirect subscription — belongs to a single in-flight promise inside the
4
- // core and never surfaces as something a caller subscribes to or tears down, so there is nothing
5
- // for a hook to wrap. Hence a plain re-export, the same shape packages/secure-store's React entry
6
- // has for the same reason.
7
- export * from '../core';
@@ -1,8 +0,0 @@
1
- // @symbiote-native/web-browser/svelte: the Svelte entry over the framework-agnostic core.
2
- // Every export is a stateless free function. The one piece of live state — the Android
3
- // auth-session polyfill's redirect subscription — belongs to a single in-flight promise inside
4
- // the core and never surfaces as something a caller subscribes to or tears down, so there is
5
- // nothing for a rune to wrap. Hence a plain re-export. Svelte's lifecycle bucket is `runes/`
6
- // (adapters/svelte/src/runes — never React's `hooks` or Vue's `composables`), and this package
7
- // has none to fill.
8
- export * from '../core';
package/src/vue/index.ts DELETED
@@ -1,4 +0,0 @@
1
- // @symbiote-native/web-browser/vue: the Vue entry over the framework-agnostic core.
2
- // Nothing here holds per-instance state or hands back a subscription, so there is no lifecycle for
3
- // a composable to own — see the React entry for the full reasoning.
4
- export * from '../core';