sygnal 5.3.1 → 5.3.3

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.
@@ -40,6 +40,9 @@ var _config = {
40
40
  lang: {
41
41
  env: { server: true, client: true },
42
42
  },
43
+ drivers: {
44
+ env: { client: true },
45
+ },
43
46
  ssr: {
44
47
  env: { config: true },
45
48
  effect({ configDefinedAt, configValue }) {
@@ -38,6 +38,9 @@ var _config = {
38
38
  lang: {
39
39
  env: { server: true, client: true },
40
40
  },
41
+ drivers: {
42
+ env: { client: true },
43
+ },
41
44
  ssr: {
42
45
  env: { config: true },
43
46
  effect({ configDefinedAt, configValue }) {
@@ -265,7 +265,7 @@ function onRenderClient(pageContext) {
265
265
  };
266
266
  const Component = createLayoutWrapper(wrappers, layouts, Page);
267
267
  try {
268
- currentApp = sygnal.run(Component, {}, { mountPoint: '#page-view' });
268
+ currentApp = sygnal.run(Component, config.drivers || {}, { mountPoint: '#page-view' });
269
269
  }
270
270
  catch (err) {
271
271
  console.error('[sygnal/vike] Client render error:', err);
@@ -301,7 +301,7 @@ function onRenderClient(pageContext) {
301
301
  urlPathname: () => currentUrlPathname,
302
302
  };
303
303
  try {
304
- currentApp = sygnal.run(Page, {}, { mountPoint: '#page-view' });
304
+ currentApp = sygnal.run(Page, config.drivers || {}, { mountPoint: '#page-view' });
305
305
  }
306
306
  catch (err) {
307
307
  console.error('[sygnal/vike] Client render error:', err);
@@ -263,7 +263,7 @@ function onRenderClient(pageContext) {
263
263
  };
264
264
  const Component = createLayoutWrapper(wrappers, layouts, Page);
265
265
  try {
266
- currentApp = run(Component, {}, { mountPoint: '#page-view' });
266
+ currentApp = run(Component, config.drivers || {}, { mountPoint: '#page-view' });
267
267
  }
268
268
  catch (err) {
269
269
  console.error('[sygnal/vike] Client render error:', err);
@@ -299,7 +299,7 @@ function onRenderClient(pageContext) {
299
299
  urlPathname: () => currentUrlPathname,
300
300
  };
301
301
  try {
302
- currentApp = run(Page, {}, { mountPoint: '#page-view' });
302
+ currentApp = run(Page, config.drivers || {}, { mountPoint: '#page-view' });
303
303
  }
304
304
  catch (err) {
305
305
  console.error('[sygnal/vike] Client render error:', err);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sygnal",
3
- "version": "5.3.1",
3
+ "version": "5.3.3",
4
4
  "description": "An intuitive framework for building fast and small components or applications based on Cycle.js",
5
5
  "main": "./dist/index.cjs.js",
6
6
  "types": "./dist/index.d.ts",
package/src/extra/pwa.ts CHANGED
@@ -1,6 +1,10 @@
1
- import xs, {Stream} from 'xstream';
1
+ import _xs from './xstreamCompat';
2
+ import type {Stream, Listener} from 'xstream';
3
+ import type xsType from 'xstream';
2
4
  import {adapt} from '../cycle/run/adapt';
3
5
 
6
+ const xs = _xs as typeof xsType;
7
+
4
8
  // ── Types ────────────────────────────────────────────────────
5
9
 
6
10
  export interface ServiceWorkerSource {
@@ -109,34 +113,32 @@ export function makeServiceWorkerDriver(
109
113
  }
110
114
 
111
115
  // ── onlineStatus$ ────────────────────────────────────────────
116
+ // Lazy — the real stream is created on first subscribe so importing
117
+ // sygnal in SSR doesn't eagerly reference window/navigator.
112
118
 
113
- function _createOnlineStatus(): Stream<boolean> {
114
- if (typeof window === 'undefined') {
115
- return xs.of(true);
116
- }
119
+ let _onlineCleanup: (() => void) | undefined;
117
120
 
118
- let cleanup: (() => void) | undefined;
119
-
120
- return xs.create<boolean>({
121
- start(listener) {
122
- listener.next(navigator.onLine);
123
- const on = () => listener.next(true);
124
- const off = () => listener.next(false);
125
- window.addEventListener('online', on);
126
- window.addEventListener('offline', off);
127
- cleanup = () => {
128
- window.removeEventListener('online', on);
129
- window.removeEventListener('offline', off);
130
- };
131
- },
132
- stop() {
133
- cleanup?.();
134
- cleanup = undefined;
135
- },
136
- });
137
- }
138
-
139
- export const onlineStatus$: Stream<boolean> = _createOnlineStatus();
121
+ export const onlineStatus$: Stream<boolean> = xs.create<boolean>({
122
+ start(listener: Listener<boolean>) {
123
+ if (typeof window === 'undefined') {
124
+ listener.next(true);
125
+ return;
126
+ }
127
+ listener.next(navigator.onLine);
128
+ const on = () => listener.next(true);
129
+ const off = () => listener.next(false);
130
+ window.addEventListener('online', on);
131
+ window.addEventListener('offline', off);
132
+ _onlineCleanup = () => {
133
+ window.removeEventListener('online', on);
134
+ window.removeEventListener('offline', off);
135
+ };
136
+ },
137
+ stop() {
138
+ _onlineCleanup?.();
139
+ _onlineCleanup = undefined;
140
+ },
141
+ });
140
142
 
141
143
  // ── createInstallPrompt ──────────────────────────────────────
142
144
 
@@ -42,6 +42,9 @@ export default {
42
42
  lang: {
43
43
  env: { server: true, client: true },
44
44
  },
45
+ drivers: {
46
+ env: { client: true },
47
+ },
45
48
  ssr: {
46
49
  env: { config: true },
47
50
  effect({ configDefinedAt, configValue }: { configDefinedAt: string; configValue: unknown }) {
@@ -36,6 +36,7 @@ interface PageContext {
36
36
  Wrapper?: any | any[]
37
37
  title?: string
38
38
  ssr?: boolean
39
+ drivers?: Record<string, (sink: any) => any>
39
40
  }
40
41
  }
41
42
 
@@ -310,7 +311,7 @@ export function onRenderClient(pageContext: PageContext) {
310
311
  const Component = createLayoutWrapper(wrappers, layouts, Page)
311
312
 
312
313
  try {
313
- currentApp = run(Component, {}, { mountPoint: '#page-view' }) as any
314
+ currentApp = run(Component, config.drivers || {}, { mountPoint: '#page-view' }) as any
314
315
  } catch (err: any) {
315
316
  console.error('[sygnal/vike] Client render error:', err)
316
317
  const container = document.getElementById('page-view')
@@ -347,7 +348,7 @@ export function onRenderClient(pageContext: PageContext) {
347
348
  }
348
349
 
349
350
  try {
350
- currentApp = run(Page, {}, { mountPoint: '#page-view' }) as any
351
+ currentApp = run(Page, config.drivers || {}, { mountPoint: '#page-view' }) as any
351
352
  } catch (err: any) {
352
353
  console.error('[sygnal/vike] Client render error:', err)
353
354
  const container = document.getElementById('page-view')
package/src/vike/types.ts CHANGED
@@ -22,6 +22,8 @@ declare global {
22
22
  favicon?: string
23
23
  /** <html lang="..."> attribute (default: "en") */
24
24
  lang?: string
25
+ /** Additional Cycle.js drivers to pass to run() (e.g. WebSocket, HTTP). Client-only. */
26
+ drivers?: Record<string, (sink: any) => any>
25
27
  /** Enable/disable SSR for this page (default: true). Set false for SPA mode. */
26
28
  ssr?: boolean
27
29
  }