@arcote.tech/arc-react 0.3.0 → 0.3.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.
Files changed (2) hide show
  1. package/dist/index.js +42 -4
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -301,7 +301,10 @@ import {
301
301
  EventWire,
302
302
  LocalEventPublisher,
303
303
  MasterDataStorage,
304
- Model
304
+ Model,
305
+ QueryWire,
306
+ StreamingEventPublisher,
307
+ StreamingQueryCache
305
308
  } from "@arcote.tech/arc";
306
309
  import { createContext as createContext4, useContext as useContext3, useEffect as useEffect2, useState as useState3 } from "react";
307
310
  import { jsx as jsx5 } from "react/jsx-runtime";
@@ -309,6 +312,7 @@ var modelProviderFactory = (context, options) => {
309
312
  const ModelContext = createContext4(null);
310
313
  const commandWire = options.remoteUrl ? new CommandWire(options.remoteUrl) : undefined;
311
314
  const eventWire = options.remoteUrl ? new EventWire(options.remoteUrl) : undefined;
315
+ const queryWire = options.remoteUrl ? new QueryWire(options.remoteUrl) : undefined;
312
316
  const authAdapter = new AuthAdapter;
313
317
  let initialized = false;
314
318
  let cachedModel = null;
@@ -336,6 +340,8 @@ var modelProviderFactory = (context, options) => {
336
340
  async function initializeModel() {
337
341
  let dataStorage;
338
342
  let eventPublisher;
343
+ let streamingCache;
344
+ const views = context.elements.filter((element) => ("getHandlers" in element) && ("databaseStoreSchema" in element) && ("schema" in element));
339
345
  if (options.dbAdapterFactory) {
340
346
  const databaseAdapter = await options.dbAdapterFactory(context);
341
347
  if (cancelled)
@@ -344,7 +350,6 @@ var modelProviderFactory = (context, options) => {
344
350
  dataStorage = new MasterDataStorage(databaseAdapter);
345
351
  cachedDataStorage = dataStorage;
346
352
  eventPublisher = new LocalEventPublisher(dataStorage);
347
- const views = context.elements.filter((element) => ("getHandlers" in element) && ("databaseStoreSchema" in element) && ("schema" in element));
348
353
  eventPublisher.registerViews(views);
349
354
  if (eventWire && eventPublisher) {
350
355
  const publisher = eventPublisher;
@@ -413,6 +418,35 @@ Event payload:`, event.payload);
413
418
  }
414
419
  }
415
420
  }
421
+ } else if (eventWire && queryWire) {
422
+ streamingCache = new StreamingQueryCache;
423
+ streamingCache.registerViews(views);
424
+ eventPublisher = new StreamingEventPublisher(streamingCache, eventWire);
425
+ eventPublisher.registerViews(views);
426
+ const processedEvents = new Set;
427
+ let eventQueue = Promise.resolve();
428
+ eventWire.onEvent((event) => {
429
+ eventQueue = eventQueue.then(async () => {
430
+ try {
431
+ if (processedEvents.has(event.hostId)) {
432
+ return;
433
+ }
434
+ processedEvents.add(event.hostId);
435
+ await streamingCache.applyEvent({
436
+ id: event.hostId,
437
+ type: event.type,
438
+ payload: event.payload,
439
+ createdAt: new Date(event.createdAt)
440
+ });
441
+ } catch (error) {
442
+ console.error(`[Arc] Failed to process event ${event.hostId} (${event.type}):`, error);
443
+ processedEvents.delete(event.hostId);
444
+ }
445
+ });
446
+ });
447
+ if (authAdapter.isAuthenticated()) {
448
+ eventWire.connect();
449
+ }
416
450
  }
417
451
  if (cancelled)
418
452
  return;
@@ -422,7 +456,9 @@ Event payload:`, event.payload);
422
456
  commandWire,
423
457
  eventPublisher,
424
458
  eventWire,
425
- authAdapter
459
+ authAdapter,
460
+ queryWire,
461
+ streamingCache
426
462
  },
427
463
  environment: "client"
428
464
  });
@@ -459,6 +495,7 @@ Event payload:`, event.payload);
459
495
  function setAuthToken(token) {
460
496
  authAdapter.setToken(token);
461
497
  commandWire?.setAuthToken(token);
498
+ queryWire?.setAuthToken(token);
462
499
  if (eventWire) {
463
500
  eventWire.setAuthToken(token);
464
501
  if (token && eventWire.getState() === "disconnected") {
@@ -476,6 +513,7 @@ Event payload:`, event.payload);
476
513
  initialized = false;
477
514
  authAdapter.setToken(null);
478
515
  commandWire?.setAuthToken(null);
516
+ queryWire?.setAuthToken(null);
479
517
  eventWire?.setAuthToken(null);
480
518
  if (onResetCallback) {
481
519
  onResetCallback();
@@ -557,4 +595,4 @@ export {
557
595
  Form
558
596
  };
559
597
 
560
- //# debugId=7543AFFDBE5BB66264756E2164756E21
598
+ //# debugId=8D2F0AEF850AD66D64756E2164756E21
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@arcote.tech/arc-react",
3
3
  "type": "module",
4
- "version": "0.3.0",
4
+ "version": "0.3.1",
5
5
  "private": false,
6
6
  "author": "Przemysław Krasiński [arcote.tech]",
7
7
  "description": "React client for the Arc framework, providing utilities for querying data and executing commands, enhancing the development of reactive and efficient user interfaces.",