@rivi-software/radiotools-sdk-svelte 0.2.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/package.json ADDED
@@ -0,0 +1,35 @@
1
+ {
2
+ "name": "@rivi-software/radiotools-sdk-svelte",
3
+ "version": "0.2.0",
4
+ "description": "Svelte stores for @rivi-software/radiotools-sdk (generated from @rivi-software/radiotools-contract)",
5
+ "license": "MIT",
6
+ "type": "module",
7
+ "exports": {
8
+ ".": "./src/index.ts"
9
+ },
10
+ "files": [
11
+ "src"
12
+ ],
13
+ "sideEffects": false,
14
+ "scripts": {
15
+ "check": "tsc --noEmit"
16
+ },
17
+ "dependencies": {
18
+ "@rivi-software/radiotools-sdk": "workspace:*"
19
+ },
20
+ "peerDependencies": {
21
+ "svelte": ">=4"
22
+ },
23
+ "devDependencies": {
24
+ "svelte": "5.39.6",
25
+ "typescript": "5.9.3"
26
+ },
27
+ "publishConfig": {
28
+ "access": "public"
29
+ },
30
+ "repository": {
31
+ "type": "git",
32
+ "url": "https://github.com/RIVI-Software/radiotools-sdk.git",
33
+ "directory": "packages/sdk-svelte"
34
+ }
35
+ }
package/src/index.ts ADDED
@@ -0,0 +1 @@
1
+ export * from "./stores.generated";
@@ -0,0 +1,71 @@
1
+ /** Generated by @rivi-software/radiotools-sdk-generator — do not edit by hand. */
2
+ import { derived, writable, type Readable } from "svelte/store";
3
+ import type { StationClient } from "@rivi-software/radiotools-sdk";
4
+
5
+ export type StationStoreState<T> = {
6
+ data: T | undefined;
7
+ error: Error | undefined;
8
+ loading: boolean;
9
+ };
10
+
11
+ export type StationStore<T> = Readable<StationStoreState<T>> & {
12
+ refresh: () => Promise<void>;
13
+ };
14
+
15
+ function createStationStore<T>(read: () => Promise<T>): StationStore<T> {
16
+ const inner = writable<StationStoreState<T>>({
17
+ data: undefined,
18
+ error: undefined,
19
+ loading: true,
20
+ });
21
+
22
+ const refresh = async () => {
23
+ inner.update((state) => ({ ...state, loading: true }));
24
+ try {
25
+ const data = await read();
26
+ inner.set({ data, error: undefined, loading: false });
27
+ } catch (cause: unknown) {
28
+ inner.set({
29
+ data: undefined,
30
+ error: cause instanceof Error ? cause : new Error(String(cause)),
31
+ loading: false,
32
+ });
33
+ }
34
+ };
35
+
36
+ void refresh();
37
+
38
+ return {
39
+ subscribe: inner.subscribe,
40
+ refresh,
41
+ };
42
+ }
43
+
44
+ export function createRecommendedPollIntervalStore(client: StationClient) {
45
+ return createStationStore(() => client.recommendedPollIntervalMs());
46
+ }
47
+
48
+ export function createGetStationStore(client: StationClient) {
49
+ return createStationStore(() => client.getStation());
50
+ }
51
+
52
+ export function createGetCurrentBroadcastStore(client: StationClient) {
53
+ return createStationStore(() => client.getCurrentBroadcast());
54
+ }
55
+
56
+ export function createGetNowPlayingStore(client: StationClient) {
57
+ return createStationStore(() => client.getNowPlaying());
58
+ }
59
+
60
+ export function createGetWeatherStore(client: StationClient) {
61
+ return createStationStore(() => client.getWeather());
62
+ }
63
+
64
+ export function createGetTrafficStore(client: StationClient) {
65
+ return createStationStore(() => client.getTraffic());
66
+ }
67
+
68
+ /** Convenience derived store: true when any nested field is loading. */
69
+ export function stationStoreLoading<T>(store: StationStore<T>): Readable<boolean> {
70
+ return derived(store, ($state) => $state.loading);
71
+ }