@miurajs/miura-data-flow 0.0.3 → 0.1.2

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.
Files changed (84) hide show
  1. package/README.md +15 -15
  2. package/dist/index.d.ts +2 -0
  3. package/dist/index.d.ts.map +1 -0
  4. package/dist/index.js +2 -0
  5. package/dist/index.js.map +1 -0
  6. package/dist/src/global-state.d.ts +79 -0
  7. package/dist/src/global-state.d.ts.map +1 -0
  8. package/dist/src/global-state.js +111 -0
  9. package/dist/src/global-state.js.map +1 -0
  10. package/dist/src/middleware.d.ts +38 -0
  11. package/dist/src/middleware.d.ts.map +1 -0
  12. package/dist/src/middleware.js +143 -0
  13. package/dist/src/middleware.js.map +1 -0
  14. package/{src/miura-data-flow.ts → dist/src/miura-data-flow.d.ts} +38 -67
  15. package/dist/src/miura-data-flow.d.ts.map +1 -0
  16. package/dist/src/miura-data-flow.js +96 -0
  17. package/dist/src/miura-data-flow.js.map +1 -0
  18. package/dist/src/providers/firebase-provider.d.ts +8 -0
  19. package/dist/src/providers/firebase-provider.d.ts.map +1 -0
  20. package/dist/src/providers/firebase-provider.js +27 -0
  21. package/dist/src/providers/firebase-provider.js.map +1 -0
  22. package/dist/src/providers/graphql-provider.d.ts +9 -0
  23. package/dist/src/providers/graphql-provider.d.ts.map +1 -0
  24. package/dist/src/providers/graphql-provider.js +19 -0
  25. package/dist/src/providers/graphql-provider.js.map +1 -0
  26. package/dist/src/providers/grpc-web-provider.d.ts +8 -0
  27. package/dist/src/providers/grpc-web-provider.d.ts.map +1 -0
  28. package/dist/src/providers/grpc-web-provider.js +24 -0
  29. package/dist/src/providers/grpc-web-provider.js.map +1 -0
  30. package/{src/providers/index.ts → dist/src/providers/index.d.ts} +1 -5
  31. package/dist/src/providers/index.d.ts.map +1 -0
  32. package/dist/src/providers/index.js +11 -0
  33. package/dist/src/providers/index.js.map +1 -0
  34. package/dist/src/providers/indexed-db-provider.d.ts +9 -0
  35. package/dist/src/providers/indexed-db-provider.d.ts.map +1 -0
  36. package/dist/src/providers/indexed-db-provider.js +35 -0
  37. package/dist/src/providers/indexed-db-provider.js.map +1 -0
  38. package/dist/src/providers/local-storage-provider.d.ts +7 -0
  39. package/dist/src/providers/local-storage-provider.d.ts.map +1 -0
  40. package/dist/src/providers/local-storage-provider.js +29 -0
  41. package/dist/src/providers/local-storage-provider.js.map +1 -0
  42. package/dist/src/providers/provider-manager.d.ts +4 -0
  43. package/dist/src/providers/provider-manager.d.ts.map +1 -0
  44. package/dist/src/providers/provider-manager.js +15 -0
  45. package/dist/src/providers/provider-manager.js.map +1 -0
  46. package/dist/src/providers/provider.d.ts +12 -0
  47. package/dist/src/providers/provider.d.ts.map +1 -0
  48. package/dist/src/providers/provider.js +2 -0
  49. package/dist/src/providers/provider.js.map +1 -0
  50. package/dist/src/providers/rest-provider.d.ts +86 -0
  51. package/dist/src/providers/rest-provider.d.ts.map +1 -0
  52. package/dist/src/providers/rest-provider.js +210 -0
  53. package/dist/src/providers/rest-provider.js.map +1 -0
  54. package/dist/src/providers/s3-provider.d.ts +9 -0
  55. package/dist/src/providers/s3-provider.d.ts.map +1 -0
  56. package/dist/src/providers/s3-provider.js +31 -0
  57. package/dist/src/providers/s3-provider.js.map +1 -0
  58. package/dist/src/providers/supabase-provider.d.ts +9 -0
  59. package/dist/src/providers/supabase-provider.d.ts.map +1 -0
  60. package/dist/src/providers/supabase-provider.js +33 -0
  61. package/dist/src/providers/supabase-provider.js.map +1 -0
  62. package/dist/src/providers/websockets-provider.d.ts +9 -0
  63. package/dist/src/providers/websockets-provider.d.ts.map +1 -0
  64. package/dist/src/providers/websockets-provider.js +43 -0
  65. package/dist/src/providers/websockets-provider.js.map +1 -0
  66. package/dist/src/store.d.ts +94 -0
  67. package/dist/src/store.d.ts.map +1 -0
  68. package/dist/src/store.js +169 -0
  69. package/dist/src/store.js.map +1 -0
  70. package/dist/tsconfig.tsbuildinfo +1 -0
  71. package/package.json +34 -7
  72. package/src/providers/graphql-provider.ts +13 -7
  73. package/index.ts +0 -1
  74. package/src/global-state.ts +0 -158
  75. package/src/middleware.ts +0 -162
  76. package/src/providers/indexed-db-provider.ts +0 -48
  77. package/src/providers/local-storage-provider.ts +0 -36
  78. package/src/providers/provider-manager.ts +0 -21
  79. package/src/providers/provider.ts +0 -23
  80. package/src/providers/rest-provider.ts +0 -351
  81. package/src/providers/websockets-provider.ts +0 -54
  82. package/src/store.ts +0 -237
  83. package/stories/data-flow-demo.stories.ts +0 -640
  84. package/tsconfig.json +0 -17
@@ -0,0 +1,86 @@
1
+ import { DataProvider, ProviderFactory } from './provider';
2
+ export declare class RestError extends Error {
3
+ readonly status: number;
4
+ readonly statusText: string;
5
+ readonly body: unknown;
6
+ readonly url: string;
7
+ constructor(status: number, statusText: string, body: unknown, url: string);
8
+ }
9
+ export type RequestInterceptor = (url: string, init: RequestInit) => RequestInit | Promise<RequestInit>;
10
+ export type ResponseInterceptor = (response: Response, url: string) => Response | Promise<Response>;
11
+ export interface PaginationConfig {
12
+ /** Strategy for adding pagination params to the request */
13
+ strategy: 'query' | 'header' | 'cursor';
14
+ /** Query param name for page number (query strategy) */
15
+ pageParam?: string;
16
+ /** Query param name for page size (query strategy) */
17
+ pageSizeParam?: string;
18
+ /** Default page size */
19
+ pageSize?: number;
20
+ /** Extract total count from response (used to determine if more pages exist) */
21
+ totalExtractor?: (response: Response, body: unknown) => number;
22
+ /** Extract next cursor from response body (cursor strategy) */
23
+ cursorExtractor?: (body: unknown) => string | null;
24
+ }
25
+ export interface PageResult<T> {
26
+ data: T[];
27
+ total: number;
28
+ page: number;
29
+ pageSize: number;
30
+ hasMore: boolean;
31
+ nextCursor?: string | null;
32
+ }
33
+ export interface RetryConfig {
34
+ /** Maximum number of retry attempts (default: 3) */
35
+ maxAttempts: number;
36
+ /** Initial delay in ms before first retry (default: 300) */
37
+ initialDelay: number;
38
+ /** Multiplier applied to delay on each subsequent attempt (default: 2) */
39
+ backoffFactor: number;
40
+ /** HTTP status codes that should trigger a retry (default: [429, 500, 502, 503, 504]) */
41
+ retryOn: number[];
42
+ }
43
+ export interface RestProviderOptions {
44
+ /** Base URL — path segments are appended to this */
45
+ baseUrl: string;
46
+ /** Default headers merged into every request */
47
+ headers?: Record<string, string>;
48
+ /** Request timeout in ms (default: 30_000) */
49
+ timeout?: number;
50
+ /** Retry configuration */
51
+ retry?: Partial<RetryConfig>;
52
+ /** Response cache TTL in ms — set to 0 to disable (default: 0) */
53
+ cacheTtl?: number;
54
+ /** Pagination defaults */
55
+ pagination?: PaginationConfig;
56
+ /** Called before every request — use to inject auth headers, sign requests, etc. */
57
+ requestInterceptors?: RequestInterceptor[];
58
+ /** Called after every successful response — use to unwrap envelopes, normalise shapes, etc. */
59
+ responseInterceptors?: ResponseInterceptor[];
60
+ }
61
+ export interface QueryOptions {
62
+ endpoint: string;
63
+ params?: Record<string, string | number | boolean>;
64
+ headers?: Record<string, string>;
65
+ signal?: AbortSignal;
66
+ }
67
+ export interface GetOptions {
68
+ endpoint: string;
69
+ headers?: Record<string, string>;
70
+ signal?: AbortSignal;
71
+ }
72
+ export interface MutateOptions<T> {
73
+ endpoint: string;
74
+ data: T;
75
+ method?: 'POST' | 'PUT' | 'PATCH';
76
+ headers?: Record<string, string>;
77
+ signal?: AbortSignal;
78
+ }
79
+ export interface PaginatedQueryOptions extends QueryOptions {
80
+ page?: number;
81
+ cursor?: string;
82
+ }
83
+ export declare class RestProviderFactory implements ProviderFactory {
84
+ create<T>(options: RestProviderOptions): DataProvider<T>;
85
+ }
86
+ //# sourceMappingURL=rest-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rest-provider.d.ts","sourceRoot":"","sources":["../../../src/providers/rest-provider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,210 @@
1
+ // ── Error type ────────────────────────────────────────────────────────────────
2
+ export class RestError extends Error {
3
+ status;
4
+ statusText;
5
+ body;
6
+ url;
7
+ constructor(status, statusText, body, url) {
8
+ super(`[${status}] ${statusText} — ${url}`);
9
+ this.status = status;
10
+ this.statusText = statusText;
11
+ this.body = body;
12
+ this.url = url;
13
+ this.name = 'RestError';
14
+ }
15
+ }
16
+ // ── Implementation ────────────────────────────────────────────────────────────
17
+ class RestProvider {
18
+ options;
19
+ retryConfig;
20
+ cache = new Map();
21
+ constructor(options) {
22
+ this.options = options;
23
+ this.retryConfig = {
24
+ maxAttempts: 3,
25
+ initialDelay: 300,
26
+ backoffFactor: 2,
27
+ retryOn: [429, 500, 502, 503, 504],
28
+ ...options.retry,
29
+ };
30
+ }
31
+ // ── Public API ─────────────────────────────────────────────────
32
+ async query(options) {
33
+ const url = this.buildUrl(options.endpoint, options.params);
34
+ const cached = this.getCache(url);
35
+ if (cached)
36
+ return cached;
37
+ const response = await this.request(url, { method: 'GET', headers: this.mergeHeaders(options.headers) }, options.signal);
38
+ const data = await response.json();
39
+ this.setCache(url, data);
40
+ return data;
41
+ }
42
+ async get(id, options) {
43
+ const url = this.buildUrl(`${options.endpoint}/${id}`);
44
+ const cached = this.getCache(url);
45
+ if (cached)
46
+ return cached;
47
+ const response = await this.request(url, { method: 'GET', headers: this.mergeHeaders(options.headers) }, options.signal);
48
+ const data = await response.json();
49
+ this.setCache(url, data);
50
+ return data;
51
+ }
52
+ async mutate(options) {
53
+ const url = this.buildUrl(options.endpoint);
54
+ this.invalidateCachePrefix(options.endpoint);
55
+ const response = await this.request(url, {
56
+ method: options.method ?? 'POST',
57
+ headers: this.mergeHeaders(options.headers),
58
+ body: JSON.stringify(options.data),
59
+ }, options.signal);
60
+ return response.json();
61
+ }
62
+ async put(id, data, options) {
63
+ return this.mutate({ endpoint: `${options.endpoint}/${id}`, data, method: 'PUT', headers: options.headers, signal: options.signal });
64
+ }
65
+ async delete(id, options) {
66
+ const url = this.buildUrl(`${options.endpoint}/${id}`);
67
+ this.invalidateCachePrefix(options.endpoint);
68
+ await this.request(url, { method: 'DELETE', headers: this.mergeHeaders(options.headers) }, options.signal);
69
+ }
70
+ async queryPage(options) {
71
+ const pagination = this.options.pagination;
72
+ const params = { ...options.params };
73
+ if (pagination?.strategy === 'query') {
74
+ const pageParam = pagination.pageParam ?? 'page';
75
+ const sizeParam = pagination.pageSizeParam ?? 'pageSize';
76
+ params[pageParam] = options.page ?? 1;
77
+ params[sizeParam] = pagination.pageSize ?? 20;
78
+ }
79
+ else if (pagination?.strategy === 'cursor' && options.cursor) {
80
+ params['cursor'] = options.cursor;
81
+ }
82
+ const url = this.buildUrl(options.endpoint, params);
83
+ const response = await this.request(url, { method: 'GET', headers: this.mergeHeaders(options.headers) }, options.signal);
84
+ const body = await response.json();
85
+ const data = Array.isArray(body) ? body : body.data;
86
+ const total = pagination?.totalExtractor?.(response, body) ?? data.length;
87
+ const pageSize = (pagination?.pageSize ?? 20);
88
+ const page = options.page ?? 1;
89
+ const nextCursor = pagination?.cursorExtractor?.(body) ?? null;
90
+ return {
91
+ data,
92
+ total,
93
+ page,
94
+ pageSize,
95
+ hasMore: nextCursor != null || page * pageSize < total,
96
+ nextCursor,
97
+ };
98
+ }
99
+ // ── Core fetch with interceptors, retry, and timeout ───────────
100
+ async request(url, init, signal) {
101
+ let resolvedInit = await this.applyRequestInterceptors(url, init);
102
+ const timeoutMs = this.options.timeout ?? 30_000;
103
+ const attempt = async (attemptsLeft, delay) => {
104
+ const controller = new AbortController();
105
+ const timeoutId = setTimeout(() => controller.abort(), timeoutMs);
106
+ // Merge caller signal with our timeout signal
107
+ const combinedSignal = signal
108
+ ? this.mergeSignals(signal, controller.signal)
109
+ : controller.signal;
110
+ try {
111
+ const response = await fetch(url, { ...resolvedInit, signal: combinedSignal });
112
+ clearTimeout(timeoutId);
113
+ if (!response.ok && this.retryConfig.retryOn.includes(response.status) && attemptsLeft > 0) {
114
+ await this.sleep(delay);
115
+ return attempt(attemptsLeft - 1, delay * this.retryConfig.backoffFactor);
116
+ }
117
+ if (!response.ok) {
118
+ const body = await response.json().catch(() => null);
119
+ throw new RestError(response.status, response.statusText, body, url);
120
+ }
121
+ return this.applyResponseInterceptors(response, url);
122
+ }
123
+ catch (err) {
124
+ clearTimeout(timeoutId);
125
+ if (err instanceof RestError)
126
+ throw err;
127
+ // Network / abort error — retry if attempts remain
128
+ if (attemptsLeft > 0 && !(signal?.aborted)) {
129
+ await this.sleep(delay);
130
+ return attempt(attemptsLeft - 1, delay * this.retryConfig.backoffFactor);
131
+ }
132
+ throw err;
133
+ }
134
+ };
135
+ return attempt(this.retryConfig.maxAttempts - 1, this.retryConfig.initialDelay);
136
+ }
137
+ async applyRequestInterceptors(url, init) {
138
+ let result = init;
139
+ for (const interceptor of this.options.requestInterceptors ?? []) {
140
+ result = await interceptor(url, result);
141
+ }
142
+ return result;
143
+ }
144
+ async applyResponseInterceptors(response, url) {
145
+ let result = response;
146
+ for (const interceptor of this.options.responseInterceptors ?? []) {
147
+ result = await interceptor(result, url);
148
+ }
149
+ return result;
150
+ }
151
+ // ── Helpers ────────────────────────────────────────────────────
152
+ buildUrl(path, params) {
153
+ const base = this.options.baseUrl.replace(/\/$/, '');
154
+ const normalised = path.startsWith('/') ? path : `/${path}`;
155
+ const url = `${base}${normalised}`;
156
+ if (!params || Object.keys(params).length === 0)
157
+ return url;
158
+ const qs = new URLSearchParams(Object.entries(params).map(([k, v]) => [k, String(v)])).toString();
159
+ return `${url}?${qs}`;
160
+ }
161
+ mergeHeaders(extra) {
162
+ return {
163
+ 'Content-Type': 'application/json',
164
+ ...this.options.headers,
165
+ ...extra,
166
+ };
167
+ }
168
+ mergeSignals(a, b) {
169
+ const controller = new AbortController();
170
+ const abort = () => controller.abort();
171
+ a.addEventListener('abort', abort, { once: true });
172
+ b.addEventListener('abort', abort, { once: true });
173
+ return controller.signal;
174
+ }
175
+ sleep(ms) {
176
+ return new Promise(resolve => setTimeout(resolve, ms));
177
+ }
178
+ // ── Cache helpers ──────────────────────────────────────────────
179
+ getCache(key) {
180
+ if (!this.options.cacheTtl)
181
+ return null;
182
+ const entry = this.cache.get(key);
183
+ if (!entry)
184
+ return null;
185
+ if (Date.now() > entry.expiresAt) {
186
+ this.cache.delete(key);
187
+ return null;
188
+ }
189
+ return entry.data;
190
+ }
191
+ setCache(key, data) {
192
+ if (!this.options.cacheTtl)
193
+ return;
194
+ this.cache.set(key, { data, expiresAt: Date.now() + this.options.cacheTtl });
195
+ }
196
+ invalidateCachePrefix(prefix) {
197
+ const normalised = this.buildUrl(prefix);
198
+ for (const key of this.cache.keys()) {
199
+ if (key.startsWith(normalised))
200
+ this.cache.delete(key);
201
+ }
202
+ }
203
+ }
204
+ // ── Factory ───────────────────────────────────────────────────────────────────
205
+ export class RestProviderFactory {
206
+ create(options) {
207
+ return new RestProvider(options);
208
+ }
209
+ }
210
+ //# sourceMappingURL=rest-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rest-provider.js","sourceRoot":"","sources":["../../../src/providers/rest-provider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { DataProvider, ProviderFactory } from './provider';
2
+ export interface S3ProviderOptions {
3
+ region: string;
4
+ bucket: string;
5
+ }
6
+ export declare class S3ProviderFactory implements ProviderFactory {
7
+ create<T>(options: S3ProviderOptions): DataProvider<T>;
8
+ }
9
+ //# sourceMappingURL=s3-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"s3-provider.d.ts","sourceRoot":"","sources":["../../../src/providers/s3-provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAG3D,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AA8BD,qBAAa,iBAAkB,YAAW,eAAe;IACvD,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,iBAAiB,GAAG,YAAY,CAAC,CAAC,CAAC;CAGvD"}
@@ -0,0 +1,31 @@
1
+ import { S3Client, GetObjectCommand, PutObjectCommand } from '@aws-sdk/client-s3'; // Example
2
+ class S3Provider {
3
+ client;
4
+ bucket;
5
+ constructor(options) {
6
+ this.client = new S3Client({ region: options.region });
7
+ this.bucket = options.bucket;
8
+ }
9
+ async get(key) {
10
+ const command = new GetObjectCommand({
11
+ Bucket: this.bucket,
12
+ Key: key,
13
+ });
14
+ const response = await this.client.send(command);
15
+ return response.Body?.transformToString();
16
+ }
17
+ async put(key, data) {
18
+ const command = new PutObjectCommand({
19
+ Bucket: this.bucket,
20
+ Key: key,
21
+ Body: data,
22
+ });
23
+ return this.client.send(command);
24
+ }
25
+ }
26
+ export class S3ProviderFactory {
27
+ create(options) {
28
+ return new S3Provider(options);
29
+ }
30
+ }
31
+ //# sourceMappingURL=s3-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"s3-provider.js","sourceRoot":"","sources":["../../../src/providers/s3-provider.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC,CAAC,UAAU;AAO7F,MAAM,UAAU;IACN,MAAM,CAAW;IACjB,MAAM,CAAS;IAEvB,YAAY,OAA0B;QACpC,IAAI,CAAC,MAAM,GAAG,IAAI,QAAQ,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QACvD,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAW;QACnB,MAAM,OAAO,GAAG,IAAI,gBAAgB,CAAC;YACnC,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,GAAG,EAAE,GAAG;SACT,CAAC,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACjD,OAAO,QAAQ,CAAC,IAAI,EAAE,iBAAiB,EAAE,CAAC;IAC5C,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAW,EAAE,IAAS;QAC9B,MAAM,OAAO,GAAG,IAAI,gBAAgB,CAAC;YACnC,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,GAAG,EAAE,GAAG;YACR,IAAI,EAAE,IAAW;SAClB,CAAC,CAAC;QACH,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC;CACF;AAED,MAAM,OAAO,iBAAiB;IAC5B,MAAM,CAAI,OAA0B;QAClC,OAAO,IAAI,UAAU,CAAC,OAAO,CAAoB,CAAC;IACpD,CAAC;CACF"}
@@ -0,0 +1,9 @@
1
+ import { DataProvider, ProviderFactory } from './provider';
2
+ export interface SupabaseProviderOptions {
3
+ supabaseUrl: string;
4
+ supabaseKey: string;
5
+ }
6
+ export declare class SupabaseProviderFactory implements ProviderFactory {
7
+ create<T>(options: SupabaseProviderOptions): DataProvider<T>;
8
+ }
9
+ //# sourceMappingURL=supabase-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"supabase-provider.d.ts","sourceRoot":"","sources":["../../../src/providers/supabase-provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAI3D,MAAM,WAAW,uBAAuB;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB;AAiCD,qBAAa,uBAAwB,YAAW,eAAe;IAC7D,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,uBAAuB,GAAG,YAAY,CAAC,CAAC,CAAC;CAG7D"}
@@ -0,0 +1,33 @@
1
+ class SupabaseProvider {
2
+ // private supabase: any;
3
+ constructor(options) {
4
+ // this.supabase = createClient(options.supabaseUrl, options.supabaseKey);
5
+ console.log('SupabaseProvider initialized');
6
+ }
7
+ async query(options) {
8
+ console.log(`[Supabase] Querying table "${options.table}"`);
9
+ // const { data, error } = await this.supabase
10
+ // .from(options.table)
11
+ // .select(options.query || '*');
12
+ // if (error) throw error;
13
+ // return data;
14
+ return Promise.resolve([]);
15
+ }
16
+ async get(id, options) {
17
+ console.log(`[Supabase] Getting id "${id}" from table "${options.table}"`);
18
+ // const { data, error } = await this.supabase
19
+ // .from(options.table)
20
+ // .select('*')
21
+ // .eq('id', id)
22
+ // .single();
23
+ // if (error) throw error;
24
+ // return data;
25
+ return Promise.resolve({});
26
+ }
27
+ }
28
+ export class SupabaseProviderFactory {
29
+ create(options) {
30
+ return new SupabaseProvider(options);
31
+ }
32
+ }
33
+ //# sourceMappingURL=supabase-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"supabase-provider.js","sourceRoot":"","sources":["../../../src/providers/supabase-provider.ts"],"names":[],"mappings":"AASA,MAAM,gBAAgB;IACpB,yBAAyB;IAEzB,YAAY,OAAgC;QAC1C,0EAA0E;QAC1E,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;IAC9C,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,OAA0C;QACpD,OAAO,CAAC,GAAG,CAAC,8BAA8B,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC;QAC5D,8CAA8C;QAC9C,yBAAyB;QACzB,mCAAmC;QACnC,0BAA0B;QAC1B,eAAe;QACf,OAAO,OAAO,CAAC,OAAO,CAAC,EAAS,CAAC,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,EAAU,EAAE,OAA0B;QAC9C,OAAO,CAAC,GAAG,CAAC,0BAA0B,EAAE,iBAAiB,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC;QAC3E,8CAA8C;QAC9C,yBAAyB;QACzB,iBAAiB;QACjB,kBAAkB;QAClB,eAAe;QACf,0BAA0B;QAC1B,eAAe;QACf,OAAO,OAAO,CAAC,OAAO,CAAC,EAAO,CAAC,CAAC;IAClC,CAAC;CACF;AAED,MAAM,OAAO,uBAAuB;IAClC,MAAM,CAAI,OAAgC;QACxC,OAAO,IAAI,gBAAgB,CAAI,OAAO,CAAC,CAAC;IAC1C,CAAC;CACF"}
@@ -0,0 +1,9 @@
1
+ import { DataProvider, ProviderFactory } from './provider';
2
+ export interface WebSocketProviderOptions {
3
+ url: string;
4
+ protocols?: string | string[];
5
+ }
6
+ export declare class WebSocketProviderFactory implements ProviderFactory {
7
+ create<T>(options: WebSocketProviderOptions): DataProvider<T>;
8
+ }
9
+ //# sourceMappingURL=websockets-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websockets-provider.d.ts","sourceRoot":"","sources":["../../../src/providers/websockets-provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE3D,MAAM,WAAW,wBAAwB;IACvC,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;CAC/B;AA4CD,qBAAa,wBAAyB,YAAW,eAAe;IAC9D,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,wBAAwB,GAAG,YAAY,CAAC,CAAC,CAAC;CAG9D"}
@@ -0,0 +1,43 @@
1
+ class WebSocketProvider {
2
+ ws;
3
+ constructor(options) {
4
+ this.ws = new WebSocket(options.url, options.protocols);
5
+ }
6
+ subscribe(options, callback) {
7
+ const handler = (event) => {
8
+ try {
9
+ const message = JSON.parse(event.data);
10
+ // Assuming a message format of { event: 'name', payload: ... }
11
+ if (message.event === options.event) {
12
+ callback(message.payload);
13
+ }
14
+ }
15
+ catch (e) {
16
+ console.error('Error parsing WebSocket message', e);
17
+ }
18
+ };
19
+ this.ws.addEventListener('message', handler);
20
+ // Return an unsubscribe function
21
+ return () => {
22
+ this.ws.removeEventListener('message', handler);
23
+ };
24
+ }
25
+ // A method to send data back to the server
26
+ send(event, payload) {
27
+ if (this.ws.readyState === WebSocket.OPEN) {
28
+ this.ws.send(JSON.stringify({ event, payload }));
29
+ }
30
+ else {
31
+ console.warn('WebSocket is not open. Cannot send message.');
32
+ }
33
+ }
34
+ close() {
35
+ this.ws.close();
36
+ }
37
+ }
38
+ export class WebSocketProviderFactory {
39
+ create(options) {
40
+ return new WebSocketProvider(options);
41
+ }
42
+ }
43
+ //# sourceMappingURL=websockets-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websockets-provider.js","sourceRoot":"","sources":["../../../src/providers/websockets-provider.ts"],"names":[],"mappings":"AAOA,MAAM,iBAAiB;IACb,EAAE,CAAY;IAEtB,YAAY,OAAiC;QAC3C,IAAI,CAAC,EAAE,GAAG,IAAI,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IAC1D,CAAC;IAED,SAAS,CAAC,OAA0B,EAAE,QAA2B;QAC/D,MAAM,OAAO,GAAG,CAAC,KAAmB,EAAE,EAAE;YACtC,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACvC,+DAA+D;gBAC/D,IAAI,OAAO,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK,EAAE,CAAC;oBACpC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBAC5B,CAAC;YACH,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,CAAC,CAAC,CAAC;YACtD,CAAC;QACH,CAAC,CAAC;QAEF,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAE7C,iCAAiC;QACjC,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,EAAE,CAAC,mBAAmB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAClD,CAAC,CAAC;IACJ,CAAC;IAED,2CAA2C;IAC3C,IAAI,CAAC,KAAa,EAAE,OAAY;QAC9B,IAAI,IAAI,CAAC,EAAE,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;YAC1C,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;QACnD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;IAED,KAAK;QACH,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;IAClB,CAAC;CACF;AAED,MAAM,OAAO,wBAAwB;IACnC,MAAM,CAAI,OAAiC;QACzC,OAAO,IAAI,iBAAiB,CAAI,OAAO,CAAC,CAAC;IAC3C,CAAC;CACF"}
@@ -0,0 +1,94 @@
1
+ /**
2
+ * Store state interface
3
+ */
4
+ export interface StoreState {
5
+ [key: string]: unknown;
6
+ }
7
+ /**
8
+ * Store actions interface
9
+ */
10
+ export type StoreAction<T extends StoreState> = (state: T, ...args: any[]) => Partial<T> | Promise<Partial<T>>;
11
+ export interface StoreActions<T extends StoreState> {
12
+ [key: string]: StoreAction<T>;
13
+ }
14
+ /**
15
+ * Store middleware interface
16
+ */
17
+ export interface StoreMiddleware {
18
+ name: string;
19
+ before?: (action: string, args: unknown[], state: StoreState) => void | Promise<void>;
20
+ after?: (action: string, args: unknown[], state: StoreState, result: unknown) => void | Promise<void>;
21
+ error?: (action: string, args: unknown[], error: Error) => void | Promise<void>;
22
+ }
23
+ /**
24
+ * Store subscriber
25
+ */
26
+ export interface StoreSubscriber {
27
+ id: string;
28
+ selector?: (state: StoreState) => unknown;
29
+ callback: (state: StoreState, prevState: StoreState) => void;
30
+ }
31
+ /**
32
+ * Modern Store Implementation
33
+ * Combines the best of Redux, Zustand, and modern patterns
34
+ */
35
+ export declare class Store<T extends StoreState = StoreState> {
36
+ private state;
37
+ private actions;
38
+ private subscribers;
39
+ private middlewares;
40
+ private isUpdating;
41
+ private updateQueue;
42
+ private subscriberIdCounter;
43
+ constructor(initialState: T);
44
+ /**
45
+ * Get current state
46
+ */
47
+ getState(): T;
48
+ /**
49
+ * Get a specific property from state
50
+ */
51
+ get<K extends keyof T>(key: K): T[K];
52
+ /**
53
+ * Set state (immutable update)
54
+ */
55
+ setState(updater: Partial<T> | ((state: T) => Partial<T>)): void;
56
+ /**
57
+ * Define actions (like Redux actions but simpler)
58
+ */
59
+ defineActions(actions: StoreActions<T>): void;
60
+ /**
61
+ * Execute an action
62
+ */
63
+ dispatch(action: string, ...args: unknown[]): Promise<void>;
64
+ /**
65
+ * Subscribe to state changes
66
+ */
67
+ subscribe(callback: (state: T, prevState: T) => void, selector?: (state: T) => unknown): () => void;
68
+ /**
69
+ * Subscribe to specific property changes
70
+ */
71
+ subscribeTo<K extends keyof T>(key: K, callback: (value: T[K], prevValue: T[K]) => void): () => void;
72
+ /**
73
+ * Add middleware
74
+ */
75
+ use(middleware: StoreMiddleware): void;
76
+ /**
77
+ * Update state and notify subscribers
78
+ */
79
+ private updateState;
80
+ /**
81
+ * Notify all subscribers
82
+ */
83
+ private notifySubscribers;
84
+ /**
85
+ * Get debug information
86
+ */
87
+ getDebugInfo(): {
88
+ state: T;
89
+ actions: string[];
90
+ subscribers: number;
91
+ middlewares: string[];
92
+ };
93
+ }
94
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/store.ts"],"names":[],"mappings":"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"}