@blac/react 0.0.18 → 0.0.19

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.
@@ -1,11 +1,11 @@
1
- import { BlocBase, ValueType, BlocConstructor, BlocInstanceId, CubitPropsType } from 'blac';
1
+ import { BlocBase, BlocConstructor, ValueType, CubitPropsType } from 'blac/src';
2
2
 
3
- interface ExternalStore<B extends BlocBase<any>> {
3
+ interface ExternalStore<B extends BlocBase<S>, S> {
4
4
  subscribe: (onStoreChange: () => void) => () => void;
5
- getSnapshot: () => ValueType<B>;
6
- getServerSnapshot?: () => ValueType<B>;
5
+ getSnapshot: () => S;
6
+ getServerSnapshot?: () => S;
7
7
  }
8
- declare const externalBlocStore: <B extends BlocBase<any>>(bloc: B, dependencySelector: (state: ValueType<B>) => unknown) => ExternalStore<B>;
8
+ declare const externalBlocStore: <B extends BlocBase<S, {}>, S>(bloc: B, dependencySelector: (state: S) => unknown) => ExternalStore<B, S>;
9
9
 
10
10
  type BlocHookData<B extends BlocBase<S>, S> = [
11
11
  value: ValueType<B>,
@@ -18,10 +18,10 @@ interface BlocHookOptions<B extends BlocBase<S>, S> {
18
18
  }
19
19
  type BlocHookDependencySelector<B extends BlocBase<S>, S> = (state: ValueType<B>) => unknown;
20
20
  declare class UseBlocClass {
21
- static useBloc<B extends BlocBase<S>, S>(bloc: BlocConstructor<B>): BlocHookData<B, S>;
22
- static useBloc<B extends BlocBase<S>, S>(bloc: BlocConstructor<B>, options: BlocHookOptions<B, S>): BlocHookData<B, S>;
23
- static useBloc<B extends BlocBase<S>, S>(bloc: BlocConstructor<B>, depsSelector: BlocHookDependencySelector<B, S>): BlocHookData<B, S>;
24
- static useBloc<B extends BlocBase<S>, S>(bloc: BlocConstructor<B>, instanceId: BlocInstanceId): BlocHookData<B, S>;
21
+ static useBloc<B extends BlocConstructor<BlocBase<S>>, S>(bloc: B): BlocHookData<InstanceType<B>, S>;
22
+ static useBloc<B extends BlocConstructor<BlocBase<S>>, S>(bloc: B, options: BlocHookOptions<InstanceType<B>, S>): BlocHookData<InstanceType<B>, S>;
23
+ static useBloc<B extends BlocConstructor<BlocBase<S>>, S>(bloc: B, depsSelector: BlocHookDependencySelector<InstanceType<B>, S>): BlocHookData<InstanceType<B>, S>;
24
+ static useBloc<B extends BlocConstructor<BlocBase<S>>, S>(bloc: B, instanceId: string): BlocHookData<InstanceType<B>, S>;
25
25
  }
26
26
  declare const useBloc: typeof UseBlocClass.useBloc;
27
27
 
@@ -1,5 +1,4 @@
1
1
  import { useMemo, useSyncExternalStore, useEffect } from 'react';
2
- import { Blac } from 'blac';
3
2
 
4
3
  var externalBlocStore = function (bloc, dependencySelector) {
5
4
  var lastDependencyCheck = dependencySelector(bloc.state);
@@ -17,18 +16,418 @@ var externalBlocStore = function (bloc, dependencySelector) {
17
16
  };
18
17
  },
19
18
  getSnapshot: function () { return bloc.state; },
20
- getServerSnapshot: function () { return bloc.state; }
19
+ getServerSnapshot: function () { return bloc.state; },
21
20
  };
22
21
  };
23
22
 
24
- var useResolvedBloc = function (bloc, options) {
25
- if (options === void 0) { options = {}; }
26
- return useMemo(function () { return Blac.getInstance().getBloc(bloc, {
27
- id: options.id,
28
- props: options.props
29
- }); }, [options.id]);
23
+ /******************************************************************************
24
+ Copyright (c) Microsoft Corporation.
25
+
26
+ Permission to use, copy, modify, and/or distribute this software for any
27
+ purpose with or without fee is hereby granted.
28
+
29
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
30
+ REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
31
+ AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
32
+ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
33
+ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
34
+ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
35
+ PERFORMANCE OF THIS SOFTWARE.
36
+ ***************************************************************************** */
37
+ /* global Reflect, Promise, SuppressedError, Symbol */
38
+
39
+ var extendStatics = function(d, b) {
40
+ extendStatics = Object.setPrototypeOf ||
41
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
42
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
43
+ return extendStatics(d, b);
44
+ };
45
+
46
+ function __extends(d, b) {
47
+ if (typeof b !== "function" && b !== null)
48
+ throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
49
+ extendStatics(d, b);
50
+ function __() { this.constructor = d; }
51
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
52
+ }
53
+
54
+ var __assign = function() {
55
+ __assign = Object.assign || function __assign(t) {
56
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
57
+ s = arguments[i];
58
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
59
+ }
60
+ return t;
61
+ };
62
+ return __assign.apply(this, arguments);
63
+ };
64
+
65
+ function __awaiter(thisArg, _arguments, P, generator) {
66
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
67
+ return new (P || (P = Promise))(function (resolve, reject) {
68
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
69
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
70
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
71
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
72
+ });
73
+ }
74
+
75
+ function __generator(thisArg, body) {
76
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
77
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
78
+ function verb(n) { return function (v) { return step([n, v]); }; }
79
+ function step(op) {
80
+ if (f) throw new TypeError("Generator is already executing.");
81
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
82
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
83
+ if (y = 0, t) op = [op[0] & 2, t.value];
84
+ switch (op[0]) {
85
+ case 0: case 1: t = op; break;
86
+ case 4: _.label++; return { value: op[1], done: false };
87
+ case 5: _.label++; y = op[1]; op = [0]; continue;
88
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
89
+ default:
90
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
91
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
92
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
93
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
94
+ if (t[2]) _.ops.pop();
95
+ _.trys.pop(); continue;
96
+ }
97
+ op = body.call(thisArg, _);
98
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
99
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
100
+ }
101
+ }
102
+
103
+ typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
104
+ var e = new Error(message);
105
+ return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
30
106
  };
31
107
 
108
+ var BlacEvent;
109
+ (function (BlacEvent) {
110
+ BlacEvent["BLOC_DISPOSED"] = "BLOC_DISPOSED";
111
+ BlacEvent["LISTENER_REMOVED"] = "LISTENER_REMOVED";
112
+ BlacEvent["LISTENER_ADDED"] = "LISTENER_ADDED";
113
+ BlacEvent["STATE_CHANGED"] = "STATE_CHANGED";
114
+ BlacEvent["BLOC_CREATED"] = "BLOC_CREATED";
115
+ })(BlacEvent || (BlacEvent = {}));
116
+ var Blac = /** @class */ (function () {
117
+ function Blac() {
118
+ var _this = this;
119
+ this.blocInstanceMap = new Map();
120
+ this.isolatedBlocMap = new Map();
121
+ this.pluginList = [];
122
+ this.customPropsMap = new Map();
123
+ this.postChangesToDocument = false;
124
+ this.addPlugin = function (plugin) {
125
+ // check if already added
126
+ var index = _this.pluginList.findIndex(function (p) { return p.name === plugin.name; });
127
+ if (index !== -1)
128
+ return;
129
+ _this.pluginList.push(plugin);
130
+ };
131
+ this.reportToPlugins = function (event, bloc, params) {
132
+ _this.pluginList.forEach(function (plugin) {
133
+ plugin.onEvent(event, bloc, params);
134
+ });
135
+ };
136
+ this.report = function (event, bloc, params) {
137
+ var base = bloc.constructor;
138
+ switch (event) {
139
+ case BlacEvent.BLOC_DISPOSED:
140
+ _this.disposeBloc(bloc);
141
+ break;
142
+ case BlacEvent.LISTENER_REMOVED:
143
+ if (bloc.observer.size === 0 && !base.keepAlive)
144
+ _this.disposeBloc(bloc);
145
+ break;
146
+ }
147
+ _this.reportToPlugins(event, bloc, params);
148
+ };
149
+ this.disposeBloc = function (bloc) {
150
+ var base = bloc.constructor;
151
+ if (!base.isolated) {
152
+ _this.unregisterBlocInstance(bloc);
153
+ }
154
+ else {
155
+ _this.unregisterIsolatedBlocInstance(bloc);
156
+ }
157
+ };
158
+ this.getAllBlocs = function (blocClass, options) {
159
+ if (options === void 0) { options = {}; }
160
+ return __awaiter(_this, void 0, void 0, function () {
161
+ var base, searchIsolated, blocs, blocs;
162
+ var _a;
163
+ return __generator(this, function (_b) {
164
+ base = blocClass;
165
+ searchIsolated = (_a = options.searchIsolated, _a === void 0 ? base.isolated : _a);
166
+ if (searchIsolated) {
167
+ blocs = this.isolatedBlocMap.get(blocClass);
168
+ if (blocs)
169
+ return [2 /*return*/, blocs];
170
+ }
171
+ else {
172
+ blocs = Array.from(this.blocInstanceMap.values());
173
+ return [2 /*return*/, blocs.filter(function (b) { return b instanceof blocClass; })];
174
+ }
175
+ return [2 /*return*/, []];
176
+ });
177
+ });
178
+ };
179
+ this.configure = function (config) {
180
+ if (config.exposeBlacInstance) ;
181
+ };
182
+ if (Blac.instance) {
183
+ return Blac.instance;
184
+ }
185
+ Blac.instance = this;
186
+ console.log('Blac Init');
187
+ }
188
+ Blac.getInstance = function () {
189
+ return Blac.instance;
190
+ };
191
+ Blac.prototype.createBlocInstanceMapKey = function (blocClassName, id) {
192
+ return "".concat(blocClassName, ":").concat(id);
193
+ };
194
+ Blac.prototype.unregisterBlocInstance = function (bloc) {
195
+ var key = this.createBlocInstanceMapKey(bloc.name, bloc.id);
196
+ this.blocInstanceMap.delete(key);
197
+ };
198
+ Blac.prototype.registerBlocInstance = function (bloc) {
199
+ var key = this.createBlocInstanceMapKey(bloc.name, bloc.id);
200
+ this.blocInstanceMap.set(key, bloc);
201
+ };
202
+ Blac.prototype.findRegisteredBlocInstance = function (blocClass, id) {
203
+ var base = blocClass;
204
+ if (base.isolated)
205
+ return undefined;
206
+ var key = this.createBlocInstanceMapKey(blocClass.name, id);
207
+ return this.blocInstanceMap.get(key);
208
+ };
209
+ Blac.prototype.registerIsolatedBlocInstance = function (bloc) {
210
+ var blocClass = bloc.constructor;
211
+ var blocs = this.isolatedBlocMap.get(blocClass);
212
+ if (blocs) {
213
+ blocs.push(bloc);
214
+ }
215
+ else {
216
+ this.isolatedBlocMap.set(blocClass, [bloc]);
217
+ }
218
+ };
219
+ Blac.prototype.unregisterIsolatedBlocInstance = function (bloc) {
220
+ var blocClass = bloc.constructor;
221
+ var blocs = this.isolatedBlocMap.get(blocClass);
222
+ if (blocs) {
223
+ var index = blocs.findIndex(function (b) { return b.id === bloc.id; });
224
+ blocs.splice(index, 1);
225
+ }
226
+ };
227
+ Blac.prototype.setCustomProps = function (blocClass, props) {
228
+ if (!props)
229
+ return;
230
+ this.customPropsMap.set(blocClass, props);
231
+ };
232
+ Blac.prototype.getCustomProps = function (blocClass) {
233
+ var props = this.customPropsMap.get(blocClass);
234
+ this.customPropsMap.delete(blocClass);
235
+ return props;
236
+ };
237
+ Blac.prototype.createNewBlocInstance = function (blocClass, id, props) {
238
+ var base = blocClass;
239
+ var hasCreateMethod = Object.prototype.hasOwnProperty.call(blocClass, 'create');
240
+ this.setCustomProps(base, props);
241
+ var newBloc = hasCreateMethod ? base.create() : new blocClass();
242
+ newBloc.updateId(id);
243
+ if (base.isolated) {
244
+ this.registerIsolatedBlocInstance(newBloc);
245
+ return newBloc;
246
+ }
247
+ this.registerBlocInstance(newBloc);
248
+ return newBloc;
249
+ };
250
+ Blac.prototype.getBloc = function (blocClass, options) {
251
+ if (options === void 0) { options = {}; }
252
+ var id = options.id || blocClass.name;
253
+ var registered = this.findRegisteredBlocInstance(blocClass, id);
254
+ var reconnect = options.reconnect;
255
+ if (registered) {
256
+ if (reconnect) {
257
+ registered.dispose();
258
+ }
259
+ else {
260
+ return registered;
261
+ }
262
+ }
263
+ return this.createNewBlocInstance(blocClass, id, options.props);
264
+ };
265
+ Blac.instance = new Blac();
266
+ Blac.getAllBlocs = Blac.instance.getAllBlocs;
267
+ Blac.addPlugin = Blac.instance.addPlugin;
268
+ Blac.configure = Blac.instance.configure;
269
+ return Blac;
270
+ }());
271
+
272
+ var BlacObservable = /** @class */ (function () {
273
+ function BlacObservable() {
274
+ this._observers = new Set();
275
+ }
276
+ Object.defineProperty(BlacObservable.prototype, "size", {
277
+ get: function () {
278
+ return this._observers.size;
279
+ },
280
+ enumerable: false,
281
+ configurable: true
282
+ });
283
+ BlacObservable.prototype.subscribe = function (observer) {
284
+ var _this = this;
285
+ this._observers.add(observer);
286
+ return function () { return _this.unsubscribe(observer); };
287
+ };
288
+ BlacObservable.prototype.unsubscribe = function (observer) {
289
+ this._observers.delete(observer);
290
+ };
291
+ BlacObservable.prototype.notify = function (newState, oldState) {
292
+ this._observers.forEach(function (observer) { return observer(newState, oldState); });
293
+ };
294
+ BlacObservable.prototype.dispose = function () {
295
+ this._observers.clear();
296
+ };
297
+ return BlacObservable;
298
+ }());
299
+
300
+ var BlocBase = /** @class */ (function () {
301
+ // onConnect(): void;
302
+ // onDisconnect(): void;
303
+ function BlocBase(initialState) {
304
+ var _this = this;
305
+ this.isolated = false;
306
+ this.isBlacLive = true;
307
+ this.blac = Blac.getInstance();
308
+ this.props = {};
309
+ this.createdAt = Date.now();
310
+ this.updateId = function (id) {
311
+ var originalId = _this.id;
312
+ if (!id || id === originalId)
313
+ return;
314
+ _this.id = id;
315
+ };
316
+ this.addEventListenerStateChange = function (callback) {
317
+ _this.blac.report(BlacEvent.LISTENER_ADDED, _this);
318
+ _this.observer.subscribe(callback);
319
+ return function () { return _this.handleUnsubscribe(callback); };
320
+ };
321
+ this.handleUnsubscribe = function (callback) {
322
+ _this.observer.unsubscribe(callback);
323
+ _this.blac.report(BlacEvent.LISTENER_REMOVED, _this);
324
+ };
325
+ this.observer = new BlacObservable();
326
+ this._state = initialState;
327
+ this.blac.report(BlacEvent.BLOC_CREATED, this);
328
+ this.id = this.constructor.name;
329
+ this.isolated = this.constructor.isolated;
330
+ // this.onConnect?.();
331
+ }
332
+ Object.defineProperty(BlocBase.prototype, "state", {
333
+ get: function () {
334
+ return this._state;
335
+ },
336
+ enumerable: false,
337
+ configurable: true
338
+ });
339
+ Object.defineProperty(BlocBase.prototype, "name", {
340
+ get: function () {
341
+ return this.constructor.name;
342
+ },
343
+ enumerable: false,
344
+ configurable: true
345
+ });
346
+ BlocBase.prototype.dispose = function () {
347
+ this.blac.report(BlacEvent.BLOC_DISPOSED, this);
348
+ this.isBlacLive = false;
349
+ this.observer.dispose();
350
+ // this.onDisconnect?.();
351
+ };
352
+ BlocBase.isolated = false;
353
+ BlocBase.keepAlive = false;
354
+ BlocBase.isBlacClass = true;
355
+ return BlocBase;
356
+ }());
357
+
358
+ /** @class */ ((function (_super) {
359
+ __extends(Cubit, _super);
360
+ function Cubit(initialState) {
361
+ var _this = _super.call(this, initialState) || this;
362
+ _this.props = {};
363
+ var newProps = Blac.getInstance().getCustomProps(_this.constructor);
364
+ _this.props = __assign(__assign({}, _this.props), newProps);
365
+ return _this;
366
+ }
367
+ /**
368
+ * Update the state then will notify all observers
369
+ * @param state: new state
370
+ **/
371
+ Cubit.prototype.emit = function (state) {
372
+ if (state === this.state) {
373
+ return;
374
+ }
375
+ var oldState = this.state;
376
+ var newState = state;
377
+ this._state = state;
378
+ this.observer.notify(newState, oldState);
379
+ this.blac.report(BlacEvent.STATE_CHANGED, this, {
380
+ newState: newState,
381
+ oldState: oldState,
382
+ });
383
+ };
384
+ /**
385
+ * Merges current state object with the parameter "state" and emits the new state
386
+ * Warning: only works when the state is an object.
387
+ * @param state: Partial state that should change
388
+ **/
389
+ Cubit.prototype.patch = function (statePatch, ignoreChangeCheck) {
390
+ if (ignoreChangeCheck === void 0) { ignoreChangeCheck = false; }
391
+ var changes = false;
392
+ if (!ignoreChangeCheck) {
393
+ for (var key in statePatch) {
394
+ var current = this.state[key];
395
+ if (statePatch[key] !== current) {
396
+ changes = true;
397
+ break;
398
+ }
399
+ }
400
+ }
401
+ if (changes) {
402
+ this.emit(__assign(__assign({}, this.state), statePatch));
403
+ }
404
+ };
405
+ return Cubit;
406
+ })(BlocBase));
407
+
408
+ /** @class */ ((function (_super) {
409
+ __extends(Bloc, _super);
410
+ function Bloc() {
411
+ var _this = _super !== null && _super.apply(this, arguments) || this;
412
+ /**
413
+ * Emit a new action, the reducer should digest the action and update the state accordingly
414
+ * @param action: action t obe sent to the reducer
415
+ */
416
+ _this.emit = function (action) {
417
+ var oldState = _this.state;
418
+ var newState = _this.reducer(action, _this.state);
419
+ _this._state = newState;
420
+ _this.observer.notify(newState, oldState);
421
+ _this.blac.report(BlacEvent.STATE_CHANGED, _this, {
422
+ newState: newState,
423
+ oldState: oldState,
424
+ });
425
+ };
426
+ return _this;
427
+ }
428
+ return Bloc;
429
+ })(BlocBase));
430
+
32
431
  var UseBlocClass = /** @class */ (function () {
33
432
  function UseBlocClass() {
34
433
  }
@@ -39,22 +438,36 @@ var UseBlocClass = /** @class */ (function () {
39
438
  var blocId;
40
439
  var props = {};
41
440
  // parse options
42
- if (typeof options === "function") {
441
+ // if options is a function, its a dependencySelector
442
+ if (typeof options === 'function') {
43
443
  dependencySelector = options;
44
444
  }
45
- if (typeof options === "string") {
445
+ // if options is a string its an ID
446
+ if (typeof options === 'string') {
46
447
  blocId = options;
47
448
  }
48
- if (typeof options === "object") {
449
+ if (typeof options === 'object') {
49
450
  dependencySelector = (_a = options.dependencySelector) !== null && _a !== void 0 ? _a : dependencySelector;
50
451
  blocId = options.id;
51
452
  props = (_b = options.props) !== null && _b !== void 0 ? _b : props;
52
453
  }
53
- var resolvedBloc = useResolvedBloc(bloc, { id: blocId, props: props });
454
+ // const now = Date.now();
455
+ // const createdAt = useRef(now);
456
+ // const dateChanged = now !== createdAt;
457
+ // resolve the bloc, get the existing instance of the bloc or create a new one
458
+ // const resolvedBloc = useMemo(
459
+ // () =>
460
+ var resolvedBloc = Blac.getInstance().getBloc(bloc, {
461
+ id: blocId,
462
+ props: props,
463
+ reconnect: false,
464
+ });
465
+ // [renderId.current],
466
+ // );
54
467
  if (!resolvedBloc) {
55
468
  throw new Error("useBloc: could not resolve: ".concat(bloc.name || bloc));
56
469
  }
57
- var _c = useMemo(function () { return externalBlocStore(resolvedBloc, dependencySelector); }, [resolvedBloc]), subscribe = _c.subscribe, getSnapshot = _c.getSnapshot, getServerSnapshot = _c.getServerSnapshot;
470
+ var _c = useMemo(function () { return externalBlocStore(resolvedBloc, dependencySelector); }, [resolvedBloc.createdAt]), subscribe = _c.subscribe, getSnapshot = _c.getSnapshot, getServerSnapshot = _c.getServerSnapshot;
58
471
  var state = useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);
59
472
  useEffect(function () {
60
473
  resolvedBloc.props = props;
@@ -1 +1 @@
1
- {"version":3,"file":"blac-react.esm.js","sources":["../src/externalBlocStore.ts","../src/useResolvedBloc.ts","../src/useBloc.tsx"],"sourcesContent":["import { BlocBase, ValueType } from \"blac\";\n\nexport interface ExternalStore<B extends BlocBase<any>> {\n subscribe: (onStoreChange: () => void) => () => void;\n getSnapshot: () => ValueType<B>;\n getServerSnapshot?: () => ValueType<B>;\n}\n\nconst externalBlocStore = <B extends BlocBase<any>>(\n bloc: B,\n dependencySelector: (state: ValueType<B>) => unknown\n): ExternalStore<B> => {\n let lastDependencyCheck = dependencySelector(bloc.state);\n return {\n subscribe: (listener: () => void) => {\n const unSub = bloc.addEventListenerStateChange(data => {\n const newDependencyCheck = dependencySelector(data);\n if (newDependencyCheck !== lastDependencyCheck) {\n lastDependencyCheck = newDependencyCheck;\n listener();\n }\n });\n return () => {\n unSub();\n };\n },\n getSnapshot: (): ValueType<B> => bloc.state,\n getServerSnapshot: (): ValueType<B> => bloc.state\n };\n};\n\nexport default externalBlocStore;\n","import { Blac, BlocBase, BlocConstructor, BlocInstanceId, BlocProps } from \"blac\";\nimport { useMemo } from \"react\";\n\nconst useResolvedBloc = <B extends BlocBase<S>, S>(\n bloc: BlocConstructor<B>,\n options: { id?: BlocInstanceId; props?: BlocProps } = {}\n): B => useMemo(() => Blac.getInstance().getBloc(bloc, {\n id: options.id,\n props: options.props\n}), [options.id]);\n\nexport default useResolvedBloc;\n","import { BlocBase, BlocConstructor, BlocInstanceId, BlocProps, CubitPropsType, ValueType } from \"blac\";\nimport { useEffect, useMemo, useSyncExternalStore } from \"react\";\nimport externalBlocStore, { ExternalStore } from \"./externalBlocStore\";\nimport useResolvedBloc from \"./useResolvedBloc\";\n\nexport type BlocHookData<B extends BlocBase<S>, S> = [\n value: ValueType<B>,\n instance: B,\n];\n\n\nexport interface BlocHookOptions<B extends BlocBase<S>, S> {\n id?: string;\n dependencySelector?: (state: ValueType<B>) => unknown;\n props?: CubitPropsType<B>;\n}\n\nexport type BlocHookDependencySelector<B extends BlocBase<S>, S> = (state: ValueType<B>) => unknown;\n\nclass UseBlocClass {\n static useBloc<B extends BlocBase<S>, S>(\n bloc: BlocConstructor<B>\n ): BlocHookData<B, S>;\n static useBloc<B extends BlocBase<S>, S>(\n bloc: BlocConstructor<B>,\n options: BlocHookOptions<B, S>\n ): BlocHookData<B, S>;\n static useBloc<B extends BlocBase<S>, S>(\n bloc: BlocConstructor<B>,\n depsSelector: BlocHookDependencySelector<B, S>\n ): BlocHookData<B, S>;\n static useBloc<B extends BlocBase<S>, S>(\n bloc: BlocConstructor<B>,\n instanceId: BlocInstanceId\n ): BlocHookData<B, S>;\n static useBloc<B extends BlocBase<S>, S>(\n bloc: BlocConstructor<B>,\n options?: BlocHookOptions<B, S> | BlocHookDependencySelector<B, S> | BlocInstanceId\n ): BlocHookData<B, S> {\n // default options\n let dependencySelector: BlocHookDependencySelector<B, S> = (state: ValueType<B>) => state;\n let blocId: BlocInstanceId | undefined;\n let props: BlocProps = {};\n\n // parse options\n if (typeof options === \"function\") {\n dependencySelector = options;\n }\n\n if (typeof options === \"string\") {\n blocId = options;\n }\n\n if (typeof options === \"object\") {\n dependencySelector = options.dependencySelector ?? dependencySelector;\n blocId = options.id;\n props = options.props ?? props;\n }\n\n\n const resolvedBloc = useResolvedBloc<B, S>(bloc, { id: blocId, props });\n\n if (!resolvedBloc) {\n throw new Error(`useBloc: could not resolve: ${bloc.name || bloc}`);\n }\n\n const { subscribe, getSnapshot, getServerSnapshot } = useMemo<ExternalStore<B>>(\n () => externalBlocStore(resolvedBloc, dependencySelector),\n [resolvedBloc]\n );\n\n const state = useSyncExternalStore<ValueType<B>>(subscribe, getSnapshot, getServerSnapshot);\n\n useEffect(() => {\n resolvedBloc.props = props;\n }, [props]);\n\n return [state, resolvedBloc];\n }\n}\n\nconst useBloc = UseBlocClass.useBloc;\n\nexport default useBloc;\n"],"names":[],"mappings":";;;AAQA,IAAM,iBAAiB,GAAG,UACxB,IAAO,EACP,kBAAoD,EAAA;IAEpD,IAAI,mBAAmB,GAAG,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACzD,OAAO;QACL,SAAS,EAAE,UAAC,QAAoB,EAAA;AAC9B,YAAA,IAAM,KAAK,GAAG,IAAI,CAAC,2BAA2B,CAAC,UAAA,IAAI,EAAA;AACjD,gBAAA,IAAM,kBAAkB,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;gBACpD,IAAI,kBAAkB,KAAK,mBAAmB,EAAE;oBAC9C,mBAAmB,GAAG,kBAAkB,CAAC;AACzC,oBAAA,QAAQ,EAAE,CAAC;AACZ,iBAAA;AACH,aAAC,CAAC,CAAC;YACH,OAAO,YAAA;AACL,gBAAA,KAAK,EAAE,CAAC;AACV,aAAC,CAAC;SACH;AACD,QAAA,WAAW,EAAE,YAAoB,EAAA,OAAA,IAAI,CAAC,KAAK,GAAA;AAC3C,QAAA,iBAAiB,EAAE,YAAoB,EAAA,OAAA,IAAI,CAAC,KAAK,GAAA;KAClD,CAAC;AACJ;;AC1BA,IAAM,eAAe,GAAG,UACtB,IAAwB,EACxB,OAAwD,EAAA;AAAxD,IAAA,IAAA,OAAA,KAAA,KAAA,CAAA,EAAA,EAAA,OAAwD,GAAA,EAAA,CAAA,EAAA;AAClD,IAAA,OAAA,OAAO,CAAC,YAAM,EAAA,OAAA,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE;QACrD,EAAE,EAAE,OAAO,CAAC,EAAE;QACd,KAAK,EAAE,OAAO,CAAC,KAAK;KACrB,CAAC,CAAA,EAAA,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAA;AAHT,CAGS;;ACUjB,IAAA,YAAA,kBAAA,YAAA;AAAA,IAAA,SAAA,YAAA,GAAA;KA4DC;AA5CQ,IAAA,YAAA,CAAA,OAAO,GAAd,UACE,IAAwB,EACxB,OAAmF,EAAA;;;QAGnF,IAAI,kBAAkB,GAAqC,UAAC,KAAmB,IAAK,OAAA,KAAK,CAAL,EAAK,CAAC;AAC1F,QAAA,IAAI,MAAkC,CAAC;QACvC,IAAI,KAAK,GAAc,EAAE,CAAC;;AAG1B,QAAA,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE;YACjC,kBAAkB,GAAG,OAAO,CAAC;AAC9B,SAAA;AAED,QAAA,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;YAC/B,MAAM,GAAG,OAAO,CAAC;AAClB,SAAA;AAED,QAAA,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;AAC/B,YAAA,kBAAkB,GAAG,CAAA,EAAA,GAAA,OAAO,CAAC,kBAAkB,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,kBAAkB,CAAC;AACtE,YAAA,MAAM,GAAG,OAAO,CAAC,EAAE,CAAC;AACpB,YAAA,KAAK,GAAG,CAAA,EAAA,GAAA,OAAO,CAAC,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,KAAK,CAAC;AAChC,SAAA;AAGD,QAAA,IAAM,YAAY,GAAG,eAAe,CAAO,IAAI,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAA,KAAA,EAAE,CAAC,CAAC;QAExE,IAAI,CAAC,YAAY,EAAE;YACjB,MAAM,IAAI,KAAK,CAAC,8BAA+B,CAAA,MAAA,CAAA,IAAI,CAAC,IAAI,IAAI,IAAI,CAAE,CAAC,CAAC;AACrE,SAAA;QAEK,IAAA,EAAA,GAAgD,OAAO,CAC3D,YAAM,EAAA,OAAA,iBAAiB,CAAC,YAAY,EAAE,kBAAkB,CAAC,CAAnD,EAAmD,EACzD,CAAC,YAAY,CAAC,CACf,EAHO,SAAS,GAAA,EAAA,CAAA,SAAA,EAAE,WAAW,GAAA,EAAA,CAAA,WAAA,EAAE,iBAAiB,GAAA,EAAA,CAAA,iBAGhD,CAAC;QAEF,IAAM,KAAK,GAAG,oBAAoB,CAAe,SAAS,EAAE,WAAW,EAAE,iBAAiB,CAAC,CAAC;AAE5F,QAAA,SAAS,CAAC,YAAA;AACR,YAAA,YAAY,CAAC,KAAK,GAAG,KAAK,CAAC;AAC7B,SAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;AAEZ,QAAA,OAAO,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;KAC9B,CAAA;IACH,OAAC,YAAA,CAAA;AAAD,CAAC,EAAA,CAAA,CAAA;AAED,IAAM,OAAO,GAAG,YAAY,CAAC;;;;"}
1
+ {"version":3,"file":"blac-react.esm.js","sources":["../src/externalBlocStore.ts","../../blac/src/Blac.ts","../../blac/src/BlacObserver.ts","../../blac/src/BlocBase.ts","../../blac/src/Cubit.ts","../../blac/src/Bloc.ts","../src/useBloc.tsx"],"sourcesContent":["import { BlocBase } from 'blac/src';\n\nexport interface ExternalStore<B extends BlocBase<S>, S> {\n subscribe: (onStoreChange: () => void) => () => void;\n getSnapshot: () => S;\n getServerSnapshot?: () => S;\n}\n\nconst externalBlocStore = <B extends BlocBase<S>, S>(\n bloc: B,\n dependencySelector: (state: S) => unknown,\n): ExternalStore<B, S> => {\n let lastDependencyCheck = dependencySelector(bloc.state);\n\n return {\n subscribe: (listener: () => void) => {\n const unSub = bloc.addEventListenerStateChange((data) => {\n const newDependencyCheck = dependencySelector(data);\n if (newDependencyCheck !== lastDependencyCheck) {\n lastDependencyCheck = newDependencyCheck;\n listener();\n }\n });\n return () => {\n unSub();\n };\n },\n getSnapshot: (): S => bloc.state,\n getServerSnapshot: (): S => bloc.state,\n };\n};\n\nexport default externalBlocStore;\n","import { BlocBase, BlocInstanceId } from './BlocBase';\nimport { BlocBaseAbstract, BlocConstructor } from './types';\nimport { BlocProps } from './Cubit';\nimport { BlacPlugin } from './BlacPlugin';\n\nexport interface BlacConfig {\n exposeBlacInstance?: boolean;\n}\n\nexport enum BlacEvent {\n BLOC_DISPOSED = 'BLOC_DISPOSED',\n LISTENER_REMOVED = 'LISTENER_REMOVED',\n LISTENER_ADDED = 'LISTENER_ADDED',\n STATE_CHANGED = 'STATE_CHANGED',\n BLOC_CREATED = 'BLOC_CREATED',\n}\n\nexport interface EventParams {\n [BlacEvent.BLOC_DISPOSED]: undefined;\n [BlacEvent.LISTENER_REMOVED]: undefined;\n [BlacEvent.LISTENER_ADDED]: undefined;\n [BlacEvent.BLOC_CREATED]: undefined;\n [BlacEvent.STATE_CHANGED]: {\n newState: any;\n oldState: any;\n };\n}\n\nexport class Blac {\n static instance: Blac = new Blac();\n static getAllBlocs = Blac.instance.getAllBlocs;\n static addPlugin = Blac.instance.addPlugin;\n static configure = Blac.instance.configure;\n blocInstanceMap: Map<string, BlocBase<any>> = new Map();\n isolatedBlocMap: Map<Function, BlocBase<any>[]> = new Map();\n pluginList: BlacPlugin[] = [];\n customPropsMap: Map<Function, BlocProps> = new Map();\n postChangesToDocument = false;\n\n constructor() {\n if (Blac.instance) {\n return Blac.instance;\n }\n\n Blac.instance = this;\n console.log('Blac Init');\n }\n\n static getInstance(): Blac {\n return Blac.instance;\n }\n\n addPlugin = (plugin: BlacPlugin): void => {\n // check if already added\n const index = this.pluginList.findIndex((p) => p.name === plugin.name);\n if (index !== -1) return;\n this.pluginList.push(plugin);\n };\n\n reportToPlugins = <B extends BlacEvent>(\n event: B,\n bloc: BlocBase<any>,\n params?: EventParams[B],\n ) => {\n this.pluginList.forEach((plugin) => {\n plugin.onEvent(event, bloc, params);\n });\n };\n\n report = <B extends BlacEvent>(\n event: B,\n bloc: BlocBase<any>,\n params?: EventParams[B],\n ) => {\n const base = bloc.constructor as unknown as BlocBaseAbstract;\n\n switch (event) {\n case BlacEvent.BLOC_DISPOSED:\n this.disposeBloc(bloc);\n break;\n case BlacEvent.LISTENER_REMOVED:\n if (bloc.observer.size === 0 && !base.keepAlive) this.disposeBloc(bloc);\n break;\n }\n\n this.reportToPlugins(event, bloc, params);\n };\n\n disposeBloc = (bloc: BlocBase<any>): void => {\n const base = bloc.constructor as unknown as BlocBaseAbstract;\n if (!base.isolated) {\n this.unregisterBlocInstance(bloc);\n } else {\n this.unregisterIsolatedBlocInstance(bloc);\n }\n };\n\n createBlocInstanceMapKey(blocClassName: string, id: BlocInstanceId): string {\n return `${blocClassName}:${id}`;\n }\n\n unregisterBlocInstance(bloc: BlocBase<any>): void {\n const key = this.createBlocInstanceMapKey(bloc.name, bloc.id);\n this.blocInstanceMap.delete(key);\n }\n\n registerBlocInstance(bloc: BlocBase<any>): void {\n const key = this.createBlocInstanceMapKey(bloc.name, bloc.id);\n this.blocInstanceMap.set(key, bloc);\n }\n\n findRegisteredBlocInstance<B extends BlocBase<any>>(\n blocClass: BlocConstructor<B>,\n id: BlocInstanceId,\n ): InstanceType<BlocConstructor<B>> | undefined {\n const base = blocClass as unknown as BlocBaseAbstract;\n if (base.isolated) return undefined;\n\n const key = this.createBlocInstanceMapKey(blocClass.name, id);\n return this.blocInstanceMap.get(key) as InstanceType<BlocConstructor<B>>;\n }\n\n registerIsolatedBlocInstance(bloc: BlocBase<any>): void {\n const blocClass = bloc.constructor;\n const blocs = this.isolatedBlocMap.get(blocClass);\n if (blocs) {\n blocs.push(bloc);\n } else {\n this.isolatedBlocMap.set(blocClass, [bloc]);\n }\n }\n\n unregisterIsolatedBlocInstance(bloc: BlocBase<any>): void {\n const blocClass = bloc.constructor;\n const blocs = this.isolatedBlocMap.get(blocClass);\n if (blocs) {\n const index = blocs.findIndex((b) => b.id === bloc.id);\n blocs.splice(index, 1);\n }\n }\n\n setCustomProps(\n blocClass: BlocBaseAbstract,\n props: BlocProps | undefined,\n ): void {\n if (!props) return;\n this.customPropsMap.set(blocClass, props);\n }\n\n getCustomProps(blocClass: BlocBaseAbstract): BlocProps | undefined {\n const props = this.customPropsMap.get(blocClass);\n this.customPropsMap.delete(blocClass);\n return props;\n }\n\n createNewBlocInstance<B extends BlocBase<any>>(\n blocClass: BlocConstructor<B>,\n id: BlocInstanceId,\n props: BlocProps | undefined,\n ): InstanceType<BlocConstructor<B>> {\n const base = blocClass as unknown as BlocBaseAbstract;\n const hasCreateMethod = Object.prototype.hasOwnProperty.call(\n blocClass,\n 'create',\n );\n\n this.setCustomProps(base, props);\n const newBloc = hasCreateMethod ? base.create() : new blocClass();\n newBloc.updateId(id);\n\n if (base.isolated) {\n this.registerIsolatedBlocInstance(newBloc);\n return newBloc as InstanceType<BlocConstructor<B>>;\n }\n\n this.registerBlocInstance(newBloc);\n return newBloc as InstanceType<BlocConstructor<B>>;\n }\n\n getBloc<B extends BlocBase<S>, S>(\n blocClass: BlocConstructor<B>,\n options: {\n id?: BlocInstanceId;\n props?: BlocProps;\n reconnect?: boolean;\n } = {},\n ): InstanceType<BlocConstructor<B>> {\n const id = options.id || blocClass.name;\n const registered = this.findRegisteredBlocInstance(blocClass, id);\n const { reconnect } = options;\n if (registered) {\n if (reconnect) {\n registered.dispose();\n } else {\n return registered;\n }\n }\n return this.createNewBlocInstance(blocClass, id, options.props);\n }\n\n getAllBlocs = async <B extends BlocBase<any>>(\n blocClass: BlocConstructor<B>,\n options: {\n searchIsolated?: boolean;\n } = {},\n ): Promise<B[]> => {\n const base = blocClass as unknown as BlocBaseAbstract;\n\n const { searchIsolated = base.isolated } = options;\n\n if (searchIsolated) {\n const blocs = this.isolatedBlocMap.get(blocClass);\n if (blocs) return blocs as B[];\n } else {\n const blocs = Array.from(this.blocInstanceMap.values());\n return blocs.filter((b) => b instanceof blocClass) as B[];\n }\n return [];\n };\n\n configure = (config: BlacConfig) => {\n if (config.exposeBlacInstance) {\n // window.__blac = this;\n }\n };\n}\n\ndeclare global {\n interface Window {\n // __blac?: Blac;\n }\n}\n","export type BlacObserver<S> = (\n newState: S,\n oldState: S\n) => void | Promise<void>;\n\nexport class BlacObservable<S> {\n private _observers = new Set<BlacObserver<S>>();\n\n get size(): number {\n return this._observers.size;\n }\n\n subscribe(observer: BlacObserver<S>): () => void {\n this._observers.add(observer);\n return () => this.unsubscribe(observer);\n }\n\n unsubscribe(observer: BlacObserver<S>) {\n this._observers.delete(observer);\n }\n\n notify(newState: S, oldState: S) {\n this._observers.forEach((observer) => observer(newState, oldState));\n }\n\n dispose() {\n this._observers.clear();\n }\n}\n","import { Blac, BlacEvent } from './Blac';\nimport { BlacObservable } from './BlacObserver';\nimport { BlocProps } from './Cubit';\n\nexport type BlocInstanceId = string | number | undefined;\n\nexport abstract class BlocBase<S, P extends BlocProps = {}> {\n static isolated = false;\n static keepAlive = false;\n static create: <S extends any>() => BlocBase<S>;\n static isBlacClass = true;\n public isolated = false;\n public isBlacLive = true;\n public observer: BlacObservable<any>;\n public blac = Blac.getInstance();\n public id: BlocInstanceId;\n public props: P = {} as P;\n public readonly createdAt = Date.now();\n\n // onConnect(): void;\n // onDisconnect(): void;\n\n constructor(initialState: S) {\n this.observer = new BlacObservable();\n this._state = initialState;\n this.blac.report(BlacEvent.BLOC_CREATED, this);\n this.id = this.constructor.name;\n this.isolated = (this.constructor as any).isolated;\n // this.onConnect?.();\n }\n\n public _state: S;\n\n get state(): S {\n return this._state;\n }\n\n get name() {\n return this.constructor.name;\n }\n\n updateId = (id?: BlocInstanceId) => {\n const originalId = this.id;\n if (!id || id === originalId) return;\n this.id = id;\n };\n\n addEventListenerStateChange = (\n callback: (newState: S, oldState: S) => void,\n ): (() => void) => {\n this.blac.report(BlacEvent.LISTENER_ADDED, this);\n this.observer.subscribe(callback);\n return () => this.handleUnsubscribe(callback);\n };\n\n dispose() {\n this.blac.report(BlacEvent.BLOC_DISPOSED, this);\n this.isBlacLive = false;\n this.observer.dispose();\n // this.onDisconnect?.();\n }\n\n private handleUnsubscribe = (\n callback: (newState: S, oldState: S) => void,\n ): void => {\n this.observer.unsubscribe(callback);\n this.blac.report(BlacEvent.LISTENER_REMOVED, this);\n };\n}\n","import { BlocBase } from './BlocBase';\nimport { Blac, BlacEvent } from './Blac';\n\nexport type BlocProps = Record<string | number, any>;\n\nexport abstract class Cubit<S, P extends BlocProps = {}> extends BlocBase<S> {\n static create: () => Cubit<any, any>;\n props: P = {} as P;\n\n constructor(initialState: S) {\n super(initialState);\n const newProps = Blac.getInstance().getCustomProps(this.constructor as any);\n this.props = { ...this.props, ...newProps };\n }\n\n /**\n * Update the state then will notify all observers\n * @param state: new state\n **/\n emit(state: S): void {\n if (state === this.state) {\n return;\n }\n\n const oldState = this.state;\n const newState = state;\n this._state = state;\n this.observer.notify(newState, oldState);\n\n this.blac.report(BlacEvent.STATE_CHANGED, this, {\n newState,\n oldState,\n });\n }\n\n /**\n * Merges current state object with the parameter \"state\" and emits the new state\n * Warning: only works when the state is an object.\n * @param state: Partial state that should change\n **/\n patch(\n statePatch: S extends object ? Partial<S> : S,\n ignoreChangeCheck = false,\n ): void {\n let changes = false;\n if (!ignoreChangeCheck) {\n for (const key in statePatch) {\n const current = (this.state as any)[key];\n if (statePatch[key] !== current) {\n changes = true;\n break;\n }\n }\n }\n\n if (changes) {\n this.emit({ ...this.state, ...statePatch });\n }\n }\n}\n","import { BlocBase } from './BlocBase';\nimport { BlacEvent } from './Blac';\n\nexport abstract class Bloc<S, A> extends BlocBase<S> {\n static create: () => BlocBase<any>;\n\n /**\n * The reducer is called whenever a new action is emited,\n * @param action: the action from \"emit\"\n * @param state: the current state\n * @returns: the new state\n */\n abstract reducer(action: A, state: S): S;\n\n /**\n * Emit a new action, the reducer should digest the action and update the state accordingly\n * @param action: action t obe sent to the reducer\n */\n emit = (action: A): void => {\n const oldState = this.state;\n const newState = this.reducer(action, this.state);\n this._state = newState;\n this.observer.notify(newState, oldState);\n\n this.blac.report(BlacEvent.STATE_CHANGED, this, {\n newState,\n oldState,\n });\n };\n}\n","import {\n Blac,\n BlocBase,\n BlocConstructor,\n BlocInstanceId,\n BlocProps,\n CubitPropsType,\n ValueType,\n} from 'blac/src';\nimport { useEffect, useMemo, useRef, useSyncExternalStore } from 'react';\nimport externalBlocStore from './externalBlocStore';\n\nexport type BlocHookData<B extends BlocBase<S>, S> = [\n value: ValueType<B>,\n instance: B,\n];\n\n// type BlocHookData<B extends BlocBase<S>, S> = [S, InstanceType<B>]; // B is the bloc class, S is the state of the bloc\n// type UseBlocClassResult<B, S> = BlocHookData<B, S>;\n\nexport interface BlocHookOptions<B extends BlocBase<S>, S> {\n id?: string;\n dependencySelector?: (state: ValueType<B>) => unknown;\n props?: CubitPropsType<B>;\n}\n\nexport type BlocHookDependencySelector<B extends BlocBase<S>, S> = (\n state: ValueType<B>,\n) => unknown;\n\nexport class UseBlocClass {\n // constructor, no options\n static useBloc<B extends BlocConstructor<BlocBase<S>>, S>(\n bloc: B,\n ): BlocHookData<InstanceType<B>, S>;\n static useBloc<B extends BlocConstructor<BlocBase<S>>, S>(\n bloc: B,\n options: BlocHookOptions<InstanceType<B>, S>,\n ): BlocHookData<InstanceType<B>, S>;\n static useBloc<B extends BlocConstructor<BlocBase<S>>, S>(\n bloc: B,\n depsSelector: BlocHookDependencySelector<InstanceType<B>, S>,\n ): BlocHookData<InstanceType<B>, S>;\n static useBloc<B extends BlocConstructor<BlocBase<S>>, S>(\n bloc: B,\n instanceId: string,\n ): BlocHookData<InstanceType<B>, S>;\n static useBloc<B extends BlocConstructor<BlocBase<S>>, S>(\n bloc: B,\n options?:\n | BlocHookOptions<InstanceType<B>, S>\n | BlocHookDependencySelector<InstanceType<B>, S>\n | BlocInstanceId,\n ): BlocHookData<InstanceType<B>, S> {\n // default options\n let dependencySelector: BlocHookDependencySelector<InstanceType<B>, S> = (\n state: ValueType<InstanceType<B>>,\n ) => state;\n let blocId: BlocInstanceId | undefined;\n let props: BlocProps = {};\n\n // parse options\n\n // if options is a function, its a dependencySelector\n if (typeof options === 'function') {\n dependencySelector = options;\n }\n\n // if options is a string its an ID\n if (typeof options === 'string') {\n blocId = options;\n }\n\n if (typeof options === 'object') {\n dependencySelector = options.dependencySelector ?? dependencySelector;\n blocId = options.id;\n props = options.props ?? props;\n }\n\n // const now = Date.now();\n // const createdAt = useRef(now);\n // const dateChanged = now !== createdAt;\n\n // resolve the bloc, get the existing instance of the bloc or create a new one\n // const resolvedBloc = useMemo(\n // () =>\n const resolvedBloc = Blac.getInstance().getBloc(bloc, {\n id: blocId,\n props,\n reconnect: false,\n }) as InstanceType<B>;\n // [renderId.current],\n // );\n\n if (!resolvedBloc) {\n throw new Error(`useBloc: could not resolve: ${bloc.name || bloc}`);\n }\n\n const { subscribe, getSnapshot, getServerSnapshot } = useMemo(\n () => externalBlocStore(resolvedBloc, dependencySelector),\n [resolvedBloc.createdAt],\n );\n\n const state = useSyncExternalStore<ValueType<InstanceType<B>>>(\n subscribe,\n getSnapshot,\n getServerSnapshot,\n );\n\n useEffect(() => {\n resolvedBloc.props = props;\n }, [props]);\n\n return [state, resolvedBloc];\n }\n}\n\nconst useBloc = UseBlocClass.useBloc;\n\nexport default useBloc;\n"],"names":[],"mappings":";;AAQA,IAAM,iBAAiB,GAAG,UACxB,IAAO,EACP,kBAAyC,EAAA;IAEzC,IAAI,mBAAmB,GAAG,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAEzD,OAAO;QACL,SAAS,EAAE,UAAC,QAAoB,EAAA;AAC9B,YAAA,IAAM,KAAK,GAAG,IAAI,CAAC,2BAA2B,CAAC,UAAC,IAAI,EAAA;AAClD,gBAAA,IAAM,kBAAkB,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;gBACpD,IAAI,kBAAkB,KAAK,mBAAmB,EAAE;oBAC9C,mBAAmB,GAAG,kBAAkB,CAAC;AACzC,oBAAA,QAAQ,EAAE,CAAC;AACZ,iBAAA;AACH,aAAC,CAAC,CAAC;YACH,OAAO,YAAA;AACL,gBAAA,KAAK,EAAE,CAAC;AACV,aAAC,CAAC;SACH;AACD,QAAA,WAAW,EAAE,YAAS,EAAA,OAAA,IAAI,CAAC,KAAK,GAAA;AAChC,QAAA,iBAAiB,EAAE,YAAS,EAAA,OAAA,IAAI,CAAC,KAAK,GAAA;KACvC,CAAC;AACJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACrBA,IAAY,SAMX,CAAA;AAND,CAAA,UAAY,SAAS,EAAA;AACnB,IAAA,SAAA,CAAA,eAAA,CAAA,GAAA,eAA+B,CAAA;AAC/B,IAAA,SAAA,CAAA,kBAAA,CAAA,GAAA,kBAAqC,CAAA;AACrC,IAAA,SAAA,CAAA,gBAAA,CAAA,GAAA,gBAAiC,CAAA;AACjC,IAAA,SAAA,CAAA,eAAA,CAAA,GAAA,eAA+B,CAAA;AAC/B,IAAA,SAAA,CAAA,cAAA,CAAA,GAAA,cAA6B,CAAA;AAC/B,CAAC,EANW,SAAS,KAAT,SAAS,GAMpB,EAAA,CAAA,CAAA,CAAA;AAaD,IAAA,IAAA,kBAAA,YAAA;AAWE,IAAA,SAAA,IAAA,GAAA;QAAA,IAOC,KAAA,GAAA,IAAA,CAAA;AAbD,QAAA,IAAA,CAAA,eAAe,GAA+B,IAAI,GAAG,EAAE,CAAC;AACxD,QAAA,IAAA,CAAA,eAAe,GAAmC,IAAI,GAAG,EAAE,CAAC;QAC5D,IAAU,CAAA,UAAA,GAAiB,EAAE,CAAC;AAC9B,QAAA,IAAA,CAAA,cAAc,GAA6B,IAAI,GAAG,EAAE,CAAC;QACrD,IAAqB,CAAA,qBAAA,GAAG,KAAK,CAAC;QAe9B,IAAS,CAAA,SAAA,GAAG,UAAC,MAAkB,EAAA;;YAE7B,IAAM,KAAK,GAAG,KAAI,CAAC,UAAU,CAAC,SAAS,CAAC,UAAC,CAAC,EAAA,EAAK,OAAA,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,CAAA,EAAA,CAAC,CAAC;YACvE,IAAI,KAAK,KAAK,CAAC,CAAC;gBAAE,OAAO;AACzB,YAAA,KAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC/B,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,eAAe,GAAG,UAChB,KAAQ,EACR,IAAmB,EACnB,MAAuB,EAAA;AAEvB,YAAA,KAAI,CAAC,UAAU,CAAC,OAAO,CAAC,UAAC,MAAM,EAAA;gBAC7B,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;AACtC,aAAC,CAAC,CAAC;AACL,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,MAAM,GAAG,UACP,KAAQ,EACR,IAAmB,EACnB,MAAuB,EAAA;AAEvB,YAAA,IAAM,IAAI,GAAG,IAAI,CAAC,WAA0C,CAAC;AAE7D,YAAA,QAAQ,KAAK;gBACX,KAAK,SAAS,CAAC,aAAa;AAC1B,oBAAA,KAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;oBACvB,MAAM;gBACR,KAAK,SAAS,CAAC,gBAAgB;oBAC7B,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS;AAAE,wBAAA,KAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;oBACxE,MAAM;AACT,aAAA;YAED,KAAI,CAAC,eAAe,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;AAC5C,SAAC,CAAC;QAEF,IAAW,CAAA,WAAA,GAAG,UAAC,IAAmB,EAAA;AAChC,YAAA,IAAM,IAAI,GAAG,IAAI,CAAC,WAA0C,CAAC;AAC7D,YAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAClB,gBAAA,KAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC;AACnC,aAAA;AAAM,iBAAA;AACL,gBAAA,KAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,CAAC;AAC3C,aAAA;AACH,SAAC,CAAC;AAyGF,QAAA,IAAA,CAAA,WAAW,GAAG,UACZ,SAA6B,EAC7B,OAEM,EAAA;AAFN,YAAA,IAAA,OAAA,KAAA,KAAA,CAAA,EAAA,EAAA,OAEM,GAAA,EAAA,CAAA,EAAA;;;;;oBAEA,IAAI,GAAG,SAAwC,CAAC;oBAE9C,cAAc,IAAd,KAAmC,OAAO,CAAA,cAAZ,kBAAb,IAAI,CAAC,QAAQ,GAAA,EAAA,CAAA,CAAa;AAEnD,oBAAA,IAAI,cAAc,EAAE;wBACZ,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AAClD,wBAAA,IAAI,KAAK;AAAE,4BAAA,OAAA,CAAA,CAAA,aAAO,KAAY,CAAC,CAAA;AAChC,qBAAA;AAAM,yBAAA;AACC,wBAAA,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC;AACxD,wBAAA,OAAA,CAAA,CAAA,aAAO,KAAK,CAAC,MAAM,CAAC,UAAC,CAAC,EAAA,EAAK,OAAA,CAAC,YAAY,SAAS,CAAtB,EAAsB,CAAQ,CAAC,CAAA;AAC3D,qBAAA;AACD,oBAAA,OAAA,CAAA,CAAA,aAAO,EAAE,CAAC,CAAA;;;SACX,CAAC;QAEF,IAAS,CAAA,SAAA,GAAG,UAAC,MAAkB,EAAA;YAC7B,IAAI,MAAM,CAAC,kBAAkB,EAAE,CAE9B;AACH,SAAC,CAAC;QAxLA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,OAAO,IAAI,CAAC,QAAQ,CAAC;AACtB,SAAA;AAED,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AACrB,QAAA,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;KAC1B;AAEM,IAAA,IAAA,CAAA,WAAW,GAAlB,YAAA;QACE,OAAO,IAAI,CAAC,QAAQ,CAAC;KACtB,CAAA;AA+CD,IAAA,IAAA,CAAA,SAAA,CAAA,wBAAwB,GAAxB,UAAyB,aAAqB,EAAE,EAAkB,EAAA;AAChE,QAAA,OAAO,EAAG,CAAA,MAAA,CAAA,aAAa,EAAI,GAAA,CAAA,CAAA,MAAA,CAAA,EAAE,CAAE,CAAC;KACjC,CAAA;IAED,IAAsB,CAAA,SAAA,CAAA,sBAAA,GAAtB,UAAuB,IAAmB,EAAA;AACxC,QAAA,IAAM,GAAG,GAAG,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;AAC9D,QAAA,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;KAClC,CAAA;IAED,IAAoB,CAAA,SAAA,CAAA,oBAAA,GAApB,UAAqB,IAAmB,EAAA;AACtC,QAAA,IAAM,GAAG,GAAG,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;QAC9D,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;KACrC,CAAA;AAED,IAAA,IAAA,CAAA,SAAA,CAAA,0BAA0B,GAA1B,UACE,SAA6B,EAC7B,EAAkB,EAAA;QAElB,IAAM,IAAI,GAAG,SAAwC,CAAC;QACtD,IAAI,IAAI,CAAC,QAAQ;AAAE,YAAA,OAAO,SAAS,CAAC;AAEpC,QAAA,IAAM,GAAG,GAAG,IAAI,CAAC,wBAAwB,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC9D,OAAO,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAqC,CAAC;KAC1E,CAAA;IAED,IAA4B,CAAA,SAAA,CAAA,4BAAA,GAA5B,UAA6B,IAAmB,EAAA;AAC9C,QAAA,IAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC;QACnC,IAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AAClD,QAAA,IAAI,KAAK,EAAE;AACT,YAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAClB,SAAA;AAAM,aAAA;YACL,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;AAC7C,SAAA;KACF,CAAA;IAED,IAA8B,CAAA,SAAA,CAAA,8BAAA,GAA9B,UAA+B,IAAmB,EAAA;AAChD,QAAA,IAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC;QACnC,IAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AAClD,QAAA,IAAI,KAAK,EAAE;YACT,IAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,UAAC,CAAC,EAAK,EAAA,OAAA,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAhB,EAAgB,CAAC,CAAC;AACvD,YAAA,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACxB,SAAA;KACF,CAAA;AAED,IAAA,IAAA,CAAA,SAAA,CAAA,cAAc,GAAd,UACE,SAA2B,EAC3B,KAA4B,EAAA;AAE5B,QAAA,IAAI,CAAC,KAAK;YAAE,OAAO;QACnB,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;KAC3C,CAAA;IAED,IAAc,CAAA,SAAA,CAAA,cAAA,GAAd,UAAe,SAA2B,EAAA;QACxC,IAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AACjD,QAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;AACtC,QAAA,OAAO,KAAK,CAAC;KACd,CAAA;AAED,IAAA,IAAA,CAAA,SAAA,CAAA,qBAAqB,GAArB,UACE,SAA6B,EAC7B,EAAkB,EAClB,KAA4B,EAAA;QAE5B,IAAM,IAAI,GAAG,SAAwC,CAAC;AACtD,QAAA,IAAM,eAAe,GAAG,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAC1D,SAAS,EACT,QAAQ,CACT,CAAC;AAEF,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACjC,QAAA,IAAM,OAAO,GAAG,eAAe,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,SAAS,EAAE,CAAC;AAClE,QAAA,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAErB,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,IAAI,CAAC,4BAA4B,CAAC,OAAO,CAAC,CAAC;AAC3C,YAAA,OAAO,OAA2C,CAAC;AACpD,SAAA;AAED,QAAA,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;AACnC,QAAA,OAAO,OAA2C,CAAC;KACpD,CAAA;AAED,IAAA,IAAA,CAAA,SAAA,CAAA,OAAO,GAAP,UACE,SAA6B,EAC7B,OAIM,EAAA;AAJN,QAAA,IAAA,OAAA,KAAA,KAAA,CAAA,EAAA,EAAA,OAIM,GAAA,EAAA,CAAA,EAAA;QAEN,IAAM,EAAE,GAAG,OAAO,CAAC,EAAE,IAAI,SAAS,CAAC,IAAI,CAAC;QACxC,IAAM,UAAU,GAAG,IAAI,CAAC,0BAA0B,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;AAC1D,QAAA,IAAA,SAAS,GAAK,OAAO,CAAA,SAAZ,CAAa;AAC9B,QAAA,IAAI,UAAU,EAAE;AACd,YAAA,IAAI,SAAS,EAAE;gBACb,UAAU,CAAC,OAAO,EAAE,CAAC;AACtB,aAAA;AAAM,iBAAA;AACL,gBAAA,OAAO,UAAU,CAAC;AACnB,aAAA;AACF,SAAA;AACD,QAAA,OAAO,IAAI,CAAC,qBAAqB,CAAC,SAAS,EAAE,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;KACjE,CAAA;AAzKM,IAAA,IAAA,CAAA,QAAQ,GAAS,IAAI,IAAI,EAAE,CAAC;AAC5B,IAAA,IAAA,CAAA,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;AACxC,IAAA,IAAA,CAAA,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;AACpC,IAAA,IAAA,CAAA,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;IAiM7C,OAAC,IAAA,CAAA;AAAA,CArMD,EAqMC,CAAA;;AC5ND,IAAA,cAAA,kBAAA,YAAA;AAAA,IAAA,SAAA,cAAA,GAAA;AACU,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,GAAG,EAAmB,CAAC;KAsBjD;AApBC,IAAA,MAAA,CAAA,cAAA,CAAI,cAAI,CAAA,SAAA,EAAA,MAAA,EAAA;AAAR,QAAA,GAAA,EAAA,YAAA;AACE,YAAA,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;SAC7B;;;AAAA,KAAA,CAAA,CAAA;IAED,cAAS,CAAA,SAAA,CAAA,SAAA,GAAT,UAAU,QAAyB,EAAA;QAAnC,IAGC,KAAA,GAAA,IAAA,CAAA;AAFC,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC9B,OAAO,YAAA,EAAM,OAAA,KAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAA1B,EAA0B,CAAC;KACzC,CAAA;IAED,cAAW,CAAA,SAAA,CAAA,WAAA,GAAX,UAAY,QAAyB,EAAA;AACnC,QAAA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;KAClC,CAAA;AAED,IAAA,cAAA,CAAA,SAAA,CAAA,MAAM,GAAN,UAAO,QAAW,EAAE,QAAW,EAAA;AAC7B,QAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,UAAC,QAAQ,EAAK,EAAA,OAAA,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAA5B,EAA4B,CAAC,CAAC;KACrE,CAAA;AAED,IAAA,cAAA,CAAA,SAAA,CAAA,OAAO,GAAP,YAAA;AACE,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;KACzB,CAAA;IACH,OAAC,cAAA,CAAA;AAAD,CAAC,EAAA,CAAA;;ACtBD,IAAA,QAAA,kBAAA,YAAA;;;AAgBE,IAAA,SAAA,QAAA,CAAY,YAAe,EAAA;QAA3B,IAOC,KAAA,GAAA,IAAA,CAAA;QAlBM,IAAQ,CAAA,QAAA,GAAG,KAAK,CAAC;QACjB,IAAU,CAAA,UAAA,GAAG,IAAI,CAAC;AAElB,QAAA,IAAA,CAAA,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QAE1B,IAAK,CAAA,KAAA,GAAM,EAAO,CAAC;AACV,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAwBvC,IAAQ,CAAA,QAAA,GAAG,UAAC,EAAmB,EAAA;AAC7B,YAAA,IAAM,UAAU,GAAG,KAAI,CAAC,EAAE,CAAC;AAC3B,YAAA,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,UAAU;gBAAE,OAAO;AACrC,YAAA,KAAI,CAAC,EAAE,GAAG,EAAE,CAAC;AACf,SAAC,CAAC;QAEF,IAA2B,CAAA,2BAAA,GAAG,UAC5B,QAA4C,EAAA;YAE5C,KAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,EAAE,KAAI,CAAC,CAAC;AACjD,YAAA,KAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;YAClC,OAAO,YAAA,EAAM,OAAA,KAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAhC,EAAgC,CAAC;AAChD,SAAC,CAAC;QASM,IAAiB,CAAA,iBAAA,GAAG,UAC1B,QAA4C,EAAA;AAE5C,YAAA,KAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;YACpC,KAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,gBAAgB,EAAE,KAAI,CAAC,CAAC;AACrD,SAAC,CAAC;AA5CA,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,cAAc,EAAE,CAAC;AACrC,QAAA,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC;QAC3B,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;QAC/C,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;QAChC,IAAI,CAAC,QAAQ,GAAI,IAAI,CAAC,WAAmB,CAAC,QAAQ,CAAC;;KAEpD;AAID,IAAA,MAAA,CAAA,cAAA,CAAI,QAAK,CAAA,SAAA,EAAA,OAAA,EAAA;AAAT,QAAA,GAAA,EAAA,YAAA;YACE,OAAO,IAAI,CAAC,MAAM,CAAC;SACpB;;;AAAA,KAAA,CAAA,CAAA;AAED,IAAA,MAAA,CAAA,cAAA,CAAI,QAAI,CAAA,SAAA,EAAA,MAAA,EAAA;AAAR,QAAA,GAAA,EAAA,YAAA;AACE,YAAA,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;SAC9B;;;AAAA,KAAA,CAAA,CAAA;AAgBD,IAAA,QAAA,CAAA,SAAA,CAAA,OAAO,GAAP,YAAA;QACE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;AAChD,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;AACxB,QAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;;KAEzB,CAAA;IArDM,QAAQ,CAAA,QAAA,GAAG,KAAH,CAAS;IACjB,QAAS,CAAA,SAAA,GAAG,KAAH,CAAS;IAElB,QAAW,CAAA,WAAA,GAAG,IAAH,CAAQ;IA0D5B,OAAC,QAAA,CAAA;AAAA,CA9DD,EA8DC,CAAA;;AC/DD,gBAAA,UAAA,MAAA,EAAA;IAAiE,SAAW,CAAA,KAAA,EAAA,MAAA,CAAA,CAAA;AAI1E,IAAA,SAAA,KAAA,CAAY,YAAe,EAAA;QAA3B,IACE,KAAA,GAAA,MAAA,CAAA,IAAA,CAAA,IAAA,EAAM,YAAY,CAAC,IAGpB,IAAA,CAAA;QAND,KAAK,CAAA,KAAA,GAAM,EAAO,CAAC;AAIjB,QAAA,IAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,cAAc,CAAC,KAAI,CAAC,WAAkB,CAAC,CAAC;QAC5E,KAAI,CAAC,KAAK,GAAQ,QAAA,CAAA,QAAA,CAAA,EAAA,EAAA,KAAI,CAAC,KAAK,CAAA,EAAK,QAAQ,CAAE,CAAC;;KAC7C;AAED;;;AAGI;IACJ,KAAI,CAAA,SAAA,CAAA,IAAA,GAAJ,UAAK,KAAQ,EAAA;AACX,QAAA,IAAI,KAAK,KAAK,IAAI,CAAC,KAAK,EAAE;YACxB,OAAO;AACR,SAAA;AAED,QAAA,IAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC;QAC5B,IAAM,QAAQ,GAAG,KAAK,CAAC;AACvB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAEzC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,aAAa,EAAE,IAAI,EAAE;AAC9C,YAAA,QAAQ,EAAA,QAAA;AACR,YAAA,QAAQ,EAAA,QAAA;AACT,SAAA,CAAC,CAAC;KACJ,CAAA;AAED;;;;AAII;AACJ,IAAA,KAAA,CAAA,SAAA,CAAA,KAAK,GAAL,UACE,UAA6C,EAC7C,iBAAyB,EAAA;AAAzB,QAAA,IAAA,iBAAA,KAAA,KAAA,CAAA,EAAA,EAAA,iBAAyB,GAAA,KAAA,CAAA,EAAA;QAEzB,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,iBAAiB,EAAE;AACtB,YAAA,KAAK,IAAM,GAAG,IAAI,UAAU,EAAE;gBAC5B,IAAM,OAAO,GAAI,IAAI,CAAC,KAAa,CAAC,GAAG,CAAC,CAAC;AACzC,gBAAA,IAAI,UAAU,CAAC,GAAG,CAAC,KAAK,OAAO,EAAE;oBAC/B,OAAO,GAAG,IAAI,CAAC;oBACf,MAAM;AACP,iBAAA;AACF,aAAA;AACF,SAAA;AAED,QAAA,IAAI,OAAO,EAAE;YACX,IAAI,CAAC,IAAI,CAAM,QAAA,CAAA,QAAA,CAAA,EAAA,EAAA,IAAI,CAAC,KAAK,CAAA,EAAK,UAAU,CAAA,CAAG,CAAC;AAC7C,SAAA;KACF,CAAA;IACH,OAAC,KAAA,CAAA;AAAD,EAtDA,CAAiE,QAAQ,CAsDxE;;ACxDD,gBAAA,UAAA,MAAA,EAAA;IAAyC,SAAW,CAAA,IAAA,EAAA,MAAA,CAAA,CAAA;AAApD,IAAA,SAAA,IAAA,GAAA;QAAA,IA0BC,KAAA,GAAA,MAAA,KAAA,IAAA,IAAA,MAAA,CAAA,KAAA,CAAA,IAAA,EAAA,SAAA,CAAA,IAAA,IAAA,CAAA;AAfC;;;AAGG;QACH,KAAI,CAAA,IAAA,GAAG,UAAC,MAAS,EAAA;AACf,YAAA,IAAM,QAAQ,GAAG,KAAI,CAAC,KAAK,CAAC;AAC5B,YAAA,IAAM,QAAQ,GAAG,KAAI,CAAC,OAAO,CAAC,MAAM,EAAE,KAAI,CAAC,KAAK,CAAC,CAAC;AAClD,YAAA,KAAI,CAAC,MAAM,GAAG,QAAQ,CAAC;YACvB,KAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAEzC,KAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,aAAa,EAAE,KAAI,EAAE;AAC9C,gBAAA,QAAQ,EAAA,QAAA;AACR,gBAAA,QAAQ,EAAA,QAAA;AACT,aAAA,CAAC,CAAC;AACL,SAAC,CAAC;;KACH;IAAD,OAAC,IAAA,CAAA;AAAD,EA1BA,CAAyC,QAAQ,CA0BhD;;ACCD,IAAA,YAAA,kBAAA,YAAA;AAAA,IAAA,SAAA,YAAA,GAAA;KAqFC;AApEQ,IAAA,YAAA,CAAA,OAAO,GAAd,UACE,IAAO,EACP,OAGkB,EAAA;;;QAGlB,IAAI,kBAAkB,GAAmD,UACvE,KAAiC,IAC9B,OAAA,KAAK,CAAL,EAAK,CAAC;AACX,QAAA,IAAI,MAAkC,CAAC;QACvC,IAAI,KAAK,GAAc,EAAE,CAAC;;;AAK1B,QAAA,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE;YACjC,kBAAkB,GAAG,OAAO,CAAC;AAC9B,SAAA;;AAGD,QAAA,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;YAC/B,MAAM,GAAG,OAAO,CAAC;AAClB,SAAA;AAED,QAAA,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;AAC/B,YAAA,kBAAkB,GAAG,CAAA,EAAA,GAAA,OAAO,CAAC,kBAAkB,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,kBAAkB,CAAC;AACtE,YAAA,MAAM,GAAG,OAAO,CAAC,EAAE,CAAC;AACpB,YAAA,KAAK,GAAG,CAAA,EAAA,GAAA,OAAO,CAAC,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,KAAK,CAAC;AAChC,SAAA;;;;;;;QASD,IAAM,YAAY,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE;AACpD,YAAA,EAAE,EAAE,MAAM;AACV,YAAA,KAAK,EAAA,KAAA;AACL,YAAA,SAAS,EAAE,KAAK;AACjB,SAAA,CAAoB,CAAC;;;QAItB,IAAI,CAAC,YAAY,EAAE;YACjB,MAAM,IAAI,KAAK,CAAC,8BAA+B,CAAA,MAAA,CAAA,IAAI,CAAC,IAAI,IAAI,IAAI,CAAE,CAAC,CAAC;AACrE,SAAA;AAEK,QAAA,IAAA,EAAgD,GAAA,OAAO,CAC3D,YAAA,EAAM,OAAA,iBAAiB,CAAC,YAAY,EAAE,kBAAkB,CAAC,CAAA,EAAA,EACzD,CAAC,YAAY,CAAC,SAAS,CAAC,CACzB,EAHO,SAAS,GAAA,EAAA,CAAA,SAAA,EAAE,WAAW,GAAA,EAAA,CAAA,WAAA,EAAE,iBAAiB,uBAGhD,CAAC;QAEF,IAAM,KAAK,GAAG,oBAAoB,CAChC,SAAS,EACT,WAAW,EACX,iBAAiB,CAClB,CAAC;AAEF,QAAA,SAAS,CAAC,YAAA;AACR,YAAA,YAAY,CAAC,KAAK,GAAG,KAAK,CAAC;AAC7B,SAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;AAEZ,QAAA,OAAO,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;KAC9B,CAAA;IACH,OAAC,YAAA,CAAA;AAAD,CAAC,EAAA,CAAA,CAAA;AAED,IAAM,OAAO,GAAG,YAAY,CAAC;;;;"}
@@ -1,7 +1,6 @@
1
1
  'use strict';
2
2
 
3
3
  var react = require('react');
4
- var blac = require('blac');
5
4
 
6
5
  var externalBlocStore = function (bloc, dependencySelector) {
7
6
  var lastDependencyCheck = dependencySelector(bloc.state);
@@ -19,18 +18,418 @@ var externalBlocStore = function (bloc, dependencySelector) {
19
18
  };
20
19
  },
21
20
  getSnapshot: function () { return bloc.state; },
22
- getServerSnapshot: function () { return bloc.state; }
21
+ getServerSnapshot: function () { return bloc.state; },
23
22
  };
24
23
  };
25
24
 
26
- var useResolvedBloc = function (bloc, options) {
27
- if (options === void 0) { options = {}; }
28
- return react.useMemo(function () { return blac.Blac.getInstance().getBloc(bloc, {
29
- id: options.id,
30
- props: options.props
31
- }); }, [options.id]);
25
+ /******************************************************************************
26
+ Copyright (c) Microsoft Corporation.
27
+
28
+ Permission to use, copy, modify, and/or distribute this software for any
29
+ purpose with or without fee is hereby granted.
30
+
31
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
32
+ REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
33
+ AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
34
+ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
35
+ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
36
+ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
37
+ PERFORMANCE OF THIS SOFTWARE.
38
+ ***************************************************************************** */
39
+ /* global Reflect, Promise, SuppressedError, Symbol */
40
+
41
+ var extendStatics = function(d, b) {
42
+ extendStatics = Object.setPrototypeOf ||
43
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
44
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
45
+ return extendStatics(d, b);
46
+ };
47
+
48
+ function __extends(d, b) {
49
+ if (typeof b !== "function" && b !== null)
50
+ throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
51
+ extendStatics(d, b);
52
+ function __() { this.constructor = d; }
53
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
54
+ }
55
+
56
+ var __assign = function() {
57
+ __assign = Object.assign || function __assign(t) {
58
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
59
+ s = arguments[i];
60
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
61
+ }
62
+ return t;
63
+ };
64
+ return __assign.apply(this, arguments);
65
+ };
66
+
67
+ function __awaiter(thisArg, _arguments, P, generator) {
68
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
69
+ return new (P || (P = Promise))(function (resolve, reject) {
70
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
71
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
72
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
73
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
74
+ });
75
+ }
76
+
77
+ function __generator(thisArg, body) {
78
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
79
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
80
+ function verb(n) { return function (v) { return step([n, v]); }; }
81
+ function step(op) {
82
+ if (f) throw new TypeError("Generator is already executing.");
83
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
84
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
85
+ if (y = 0, t) op = [op[0] & 2, t.value];
86
+ switch (op[0]) {
87
+ case 0: case 1: t = op; break;
88
+ case 4: _.label++; return { value: op[1], done: false };
89
+ case 5: _.label++; y = op[1]; op = [0]; continue;
90
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
91
+ default:
92
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
93
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
94
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
95
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
96
+ if (t[2]) _.ops.pop();
97
+ _.trys.pop(); continue;
98
+ }
99
+ op = body.call(thisArg, _);
100
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
101
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
102
+ }
103
+ }
104
+
105
+ typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
106
+ var e = new Error(message);
107
+ return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
32
108
  };
33
109
 
110
+ var BlacEvent;
111
+ (function (BlacEvent) {
112
+ BlacEvent["BLOC_DISPOSED"] = "BLOC_DISPOSED";
113
+ BlacEvent["LISTENER_REMOVED"] = "LISTENER_REMOVED";
114
+ BlacEvent["LISTENER_ADDED"] = "LISTENER_ADDED";
115
+ BlacEvent["STATE_CHANGED"] = "STATE_CHANGED";
116
+ BlacEvent["BLOC_CREATED"] = "BLOC_CREATED";
117
+ })(BlacEvent || (BlacEvent = {}));
118
+ var Blac = /** @class */ (function () {
119
+ function Blac() {
120
+ var _this = this;
121
+ this.blocInstanceMap = new Map();
122
+ this.isolatedBlocMap = new Map();
123
+ this.pluginList = [];
124
+ this.customPropsMap = new Map();
125
+ this.postChangesToDocument = false;
126
+ this.addPlugin = function (plugin) {
127
+ // check if already added
128
+ var index = _this.pluginList.findIndex(function (p) { return p.name === plugin.name; });
129
+ if (index !== -1)
130
+ return;
131
+ _this.pluginList.push(plugin);
132
+ };
133
+ this.reportToPlugins = function (event, bloc, params) {
134
+ _this.pluginList.forEach(function (plugin) {
135
+ plugin.onEvent(event, bloc, params);
136
+ });
137
+ };
138
+ this.report = function (event, bloc, params) {
139
+ var base = bloc.constructor;
140
+ switch (event) {
141
+ case BlacEvent.BLOC_DISPOSED:
142
+ _this.disposeBloc(bloc);
143
+ break;
144
+ case BlacEvent.LISTENER_REMOVED:
145
+ if (bloc.observer.size === 0 && !base.keepAlive)
146
+ _this.disposeBloc(bloc);
147
+ break;
148
+ }
149
+ _this.reportToPlugins(event, bloc, params);
150
+ };
151
+ this.disposeBloc = function (bloc) {
152
+ var base = bloc.constructor;
153
+ if (!base.isolated) {
154
+ _this.unregisterBlocInstance(bloc);
155
+ }
156
+ else {
157
+ _this.unregisterIsolatedBlocInstance(bloc);
158
+ }
159
+ };
160
+ this.getAllBlocs = function (blocClass, options) {
161
+ if (options === void 0) { options = {}; }
162
+ return __awaiter(_this, void 0, void 0, function () {
163
+ var base, searchIsolated, blocs, blocs;
164
+ var _a;
165
+ return __generator(this, function (_b) {
166
+ base = blocClass;
167
+ searchIsolated = (_a = options.searchIsolated, _a === void 0 ? base.isolated : _a);
168
+ if (searchIsolated) {
169
+ blocs = this.isolatedBlocMap.get(blocClass);
170
+ if (blocs)
171
+ return [2 /*return*/, blocs];
172
+ }
173
+ else {
174
+ blocs = Array.from(this.blocInstanceMap.values());
175
+ return [2 /*return*/, blocs.filter(function (b) { return b instanceof blocClass; })];
176
+ }
177
+ return [2 /*return*/, []];
178
+ });
179
+ });
180
+ };
181
+ this.configure = function (config) {
182
+ if (config.exposeBlacInstance) ;
183
+ };
184
+ if (Blac.instance) {
185
+ return Blac.instance;
186
+ }
187
+ Blac.instance = this;
188
+ console.log('Blac Init');
189
+ }
190
+ Blac.getInstance = function () {
191
+ return Blac.instance;
192
+ };
193
+ Blac.prototype.createBlocInstanceMapKey = function (blocClassName, id) {
194
+ return "".concat(blocClassName, ":").concat(id);
195
+ };
196
+ Blac.prototype.unregisterBlocInstance = function (bloc) {
197
+ var key = this.createBlocInstanceMapKey(bloc.name, bloc.id);
198
+ this.blocInstanceMap.delete(key);
199
+ };
200
+ Blac.prototype.registerBlocInstance = function (bloc) {
201
+ var key = this.createBlocInstanceMapKey(bloc.name, bloc.id);
202
+ this.blocInstanceMap.set(key, bloc);
203
+ };
204
+ Blac.prototype.findRegisteredBlocInstance = function (blocClass, id) {
205
+ var base = blocClass;
206
+ if (base.isolated)
207
+ return undefined;
208
+ var key = this.createBlocInstanceMapKey(blocClass.name, id);
209
+ return this.blocInstanceMap.get(key);
210
+ };
211
+ Blac.prototype.registerIsolatedBlocInstance = function (bloc) {
212
+ var blocClass = bloc.constructor;
213
+ var blocs = this.isolatedBlocMap.get(blocClass);
214
+ if (blocs) {
215
+ blocs.push(bloc);
216
+ }
217
+ else {
218
+ this.isolatedBlocMap.set(blocClass, [bloc]);
219
+ }
220
+ };
221
+ Blac.prototype.unregisterIsolatedBlocInstance = function (bloc) {
222
+ var blocClass = bloc.constructor;
223
+ var blocs = this.isolatedBlocMap.get(blocClass);
224
+ if (blocs) {
225
+ var index = blocs.findIndex(function (b) { return b.id === bloc.id; });
226
+ blocs.splice(index, 1);
227
+ }
228
+ };
229
+ Blac.prototype.setCustomProps = function (blocClass, props) {
230
+ if (!props)
231
+ return;
232
+ this.customPropsMap.set(blocClass, props);
233
+ };
234
+ Blac.prototype.getCustomProps = function (blocClass) {
235
+ var props = this.customPropsMap.get(blocClass);
236
+ this.customPropsMap.delete(blocClass);
237
+ return props;
238
+ };
239
+ Blac.prototype.createNewBlocInstance = function (blocClass, id, props) {
240
+ var base = blocClass;
241
+ var hasCreateMethod = Object.prototype.hasOwnProperty.call(blocClass, 'create');
242
+ this.setCustomProps(base, props);
243
+ var newBloc = hasCreateMethod ? base.create() : new blocClass();
244
+ newBloc.updateId(id);
245
+ if (base.isolated) {
246
+ this.registerIsolatedBlocInstance(newBloc);
247
+ return newBloc;
248
+ }
249
+ this.registerBlocInstance(newBloc);
250
+ return newBloc;
251
+ };
252
+ Blac.prototype.getBloc = function (blocClass, options) {
253
+ if (options === void 0) { options = {}; }
254
+ var id = options.id || blocClass.name;
255
+ var registered = this.findRegisteredBlocInstance(blocClass, id);
256
+ var reconnect = options.reconnect;
257
+ if (registered) {
258
+ if (reconnect) {
259
+ registered.dispose();
260
+ }
261
+ else {
262
+ return registered;
263
+ }
264
+ }
265
+ return this.createNewBlocInstance(blocClass, id, options.props);
266
+ };
267
+ Blac.instance = new Blac();
268
+ Blac.getAllBlocs = Blac.instance.getAllBlocs;
269
+ Blac.addPlugin = Blac.instance.addPlugin;
270
+ Blac.configure = Blac.instance.configure;
271
+ return Blac;
272
+ }());
273
+
274
+ var BlacObservable = /** @class */ (function () {
275
+ function BlacObservable() {
276
+ this._observers = new Set();
277
+ }
278
+ Object.defineProperty(BlacObservable.prototype, "size", {
279
+ get: function () {
280
+ return this._observers.size;
281
+ },
282
+ enumerable: false,
283
+ configurable: true
284
+ });
285
+ BlacObservable.prototype.subscribe = function (observer) {
286
+ var _this = this;
287
+ this._observers.add(observer);
288
+ return function () { return _this.unsubscribe(observer); };
289
+ };
290
+ BlacObservable.prototype.unsubscribe = function (observer) {
291
+ this._observers.delete(observer);
292
+ };
293
+ BlacObservable.prototype.notify = function (newState, oldState) {
294
+ this._observers.forEach(function (observer) { return observer(newState, oldState); });
295
+ };
296
+ BlacObservable.prototype.dispose = function () {
297
+ this._observers.clear();
298
+ };
299
+ return BlacObservable;
300
+ }());
301
+
302
+ var BlocBase = /** @class */ (function () {
303
+ // onConnect(): void;
304
+ // onDisconnect(): void;
305
+ function BlocBase(initialState) {
306
+ var _this = this;
307
+ this.isolated = false;
308
+ this.isBlacLive = true;
309
+ this.blac = Blac.getInstance();
310
+ this.props = {};
311
+ this.createdAt = Date.now();
312
+ this.updateId = function (id) {
313
+ var originalId = _this.id;
314
+ if (!id || id === originalId)
315
+ return;
316
+ _this.id = id;
317
+ };
318
+ this.addEventListenerStateChange = function (callback) {
319
+ _this.blac.report(BlacEvent.LISTENER_ADDED, _this);
320
+ _this.observer.subscribe(callback);
321
+ return function () { return _this.handleUnsubscribe(callback); };
322
+ };
323
+ this.handleUnsubscribe = function (callback) {
324
+ _this.observer.unsubscribe(callback);
325
+ _this.blac.report(BlacEvent.LISTENER_REMOVED, _this);
326
+ };
327
+ this.observer = new BlacObservable();
328
+ this._state = initialState;
329
+ this.blac.report(BlacEvent.BLOC_CREATED, this);
330
+ this.id = this.constructor.name;
331
+ this.isolated = this.constructor.isolated;
332
+ // this.onConnect?.();
333
+ }
334
+ Object.defineProperty(BlocBase.prototype, "state", {
335
+ get: function () {
336
+ return this._state;
337
+ },
338
+ enumerable: false,
339
+ configurable: true
340
+ });
341
+ Object.defineProperty(BlocBase.prototype, "name", {
342
+ get: function () {
343
+ return this.constructor.name;
344
+ },
345
+ enumerable: false,
346
+ configurable: true
347
+ });
348
+ BlocBase.prototype.dispose = function () {
349
+ this.blac.report(BlacEvent.BLOC_DISPOSED, this);
350
+ this.isBlacLive = false;
351
+ this.observer.dispose();
352
+ // this.onDisconnect?.();
353
+ };
354
+ BlocBase.isolated = false;
355
+ BlocBase.keepAlive = false;
356
+ BlocBase.isBlacClass = true;
357
+ return BlocBase;
358
+ }());
359
+
360
+ /** @class */ ((function (_super) {
361
+ __extends(Cubit, _super);
362
+ function Cubit(initialState) {
363
+ var _this = _super.call(this, initialState) || this;
364
+ _this.props = {};
365
+ var newProps = Blac.getInstance().getCustomProps(_this.constructor);
366
+ _this.props = __assign(__assign({}, _this.props), newProps);
367
+ return _this;
368
+ }
369
+ /**
370
+ * Update the state then will notify all observers
371
+ * @param state: new state
372
+ **/
373
+ Cubit.prototype.emit = function (state) {
374
+ if (state === this.state) {
375
+ return;
376
+ }
377
+ var oldState = this.state;
378
+ var newState = state;
379
+ this._state = state;
380
+ this.observer.notify(newState, oldState);
381
+ this.blac.report(BlacEvent.STATE_CHANGED, this, {
382
+ newState: newState,
383
+ oldState: oldState,
384
+ });
385
+ };
386
+ /**
387
+ * Merges current state object with the parameter "state" and emits the new state
388
+ * Warning: only works when the state is an object.
389
+ * @param state: Partial state that should change
390
+ **/
391
+ Cubit.prototype.patch = function (statePatch, ignoreChangeCheck) {
392
+ if (ignoreChangeCheck === void 0) { ignoreChangeCheck = false; }
393
+ var changes = false;
394
+ if (!ignoreChangeCheck) {
395
+ for (var key in statePatch) {
396
+ var current = this.state[key];
397
+ if (statePatch[key] !== current) {
398
+ changes = true;
399
+ break;
400
+ }
401
+ }
402
+ }
403
+ if (changes) {
404
+ this.emit(__assign(__assign({}, this.state), statePatch));
405
+ }
406
+ };
407
+ return Cubit;
408
+ })(BlocBase));
409
+
410
+ /** @class */ ((function (_super) {
411
+ __extends(Bloc, _super);
412
+ function Bloc() {
413
+ var _this = _super !== null && _super.apply(this, arguments) || this;
414
+ /**
415
+ * Emit a new action, the reducer should digest the action and update the state accordingly
416
+ * @param action: action t obe sent to the reducer
417
+ */
418
+ _this.emit = function (action) {
419
+ var oldState = _this.state;
420
+ var newState = _this.reducer(action, _this.state);
421
+ _this._state = newState;
422
+ _this.observer.notify(newState, oldState);
423
+ _this.blac.report(BlacEvent.STATE_CHANGED, _this, {
424
+ newState: newState,
425
+ oldState: oldState,
426
+ });
427
+ };
428
+ return _this;
429
+ }
430
+ return Bloc;
431
+ })(BlocBase));
432
+
34
433
  var UseBlocClass = /** @class */ (function () {
35
434
  function UseBlocClass() {
36
435
  }
@@ -41,22 +440,36 @@ var UseBlocClass = /** @class */ (function () {
41
440
  var blocId;
42
441
  var props = {};
43
442
  // parse options
44
- if (typeof options === "function") {
443
+ // if options is a function, its a dependencySelector
444
+ if (typeof options === 'function') {
45
445
  dependencySelector = options;
46
446
  }
47
- if (typeof options === "string") {
447
+ // if options is a string its an ID
448
+ if (typeof options === 'string') {
48
449
  blocId = options;
49
450
  }
50
- if (typeof options === "object") {
451
+ if (typeof options === 'object') {
51
452
  dependencySelector = (_a = options.dependencySelector) !== null && _a !== void 0 ? _a : dependencySelector;
52
453
  blocId = options.id;
53
454
  props = (_b = options.props) !== null && _b !== void 0 ? _b : props;
54
455
  }
55
- var resolvedBloc = useResolvedBloc(bloc, { id: blocId, props: props });
456
+ // const now = Date.now();
457
+ // const createdAt = useRef(now);
458
+ // const dateChanged = now !== createdAt;
459
+ // resolve the bloc, get the existing instance of the bloc or create a new one
460
+ // const resolvedBloc = useMemo(
461
+ // () =>
462
+ var resolvedBloc = Blac.getInstance().getBloc(bloc, {
463
+ id: blocId,
464
+ props: props,
465
+ reconnect: false,
466
+ });
467
+ // [renderId.current],
468
+ // );
56
469
  if (!resolvedBloc) {
57
470
  throw new Error("useBloc: could not resolve: ".concat(bloc.name || bloc));
58
471
  }
59
- var _c = react.useMemo(function () { return externalBlocStore(resolvedBloc, dependencySelector); }, [resolvedBloc]), subscribe = _c.subscribe, getSnapshot = _c.getSnapshot, getServerSnapshot = _c.getServerSnapshot;
472
+ var _c = react.useMemo(function () { return externalBlocStore(resolvedBloc, dependencySelector); }, [resolvedBloc.createdAt]), subscribe = _c.subscribe, getSnapshot = _c.getSnapshot, getServerSnapshot = _c.getServerSnapshot;
60
473
  var state = react.useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);
61
474
  react.useEffect(function () {
62
475
  resolvedBloc.props = props;
@@ -1 +1 @@
1
- {"version":3,"file":"blac-react.js","sources":["../src/externalBlocStore.ts","../src/useResolvedBloc.ts","../src/useBloc.tsx"],"sourcesContent":["import { BlocBase, ValueType } from \"blac\";\n\nexport interface ExternalStore<B extends BlocBase<any>> {\n subscribe: (onStoreChange: () => void) => () => void;\n getSnapshot: () => ValueType<B>;\n getServerSnapshot?: () => ValueType<B>;\n}\n\nconst externalBlocStore = <B extends BlocBase<any>>(\n bloc: B,\n dependencySelector: (state: ValueType<B>) => unknown\n): ExternalStore<B> => {\n let lastDependencyCheck = dependencySelector(bloc.state);\n return {\n subscribe: (listener: () => void) => {\n const unSub = bloc.addEventListenerStateChange(data => {\n const newDependencyCheck = dependencySelector(data);\n if (newDependencyCheck !== lastDependencyCheck) {\n lastDependencyCheck = newDependencyCheck;\n listener();\n }\n });\n return () => {\n unSub();\n };\n },\n getSnapshot: (): ValueType<B> => bloc.state,\n getServerSnapshot: (): ValueType<B> => bloc.state\n };\n};\n\nexport default externalBlocStore;\n","import { Blac, BlocBase, BlocConstructor, BlocInstanceId, BlocProps } from \"blac\";\nimport { useMemo } from \"react\";\n\nconst useResolvedBloc = <B extends BlocBase<S>, S>(\n bloc: BlocConstructor<B>,\n options: { id?: BlocInstanceId; props?: BlocProps } = {}\n): B => useMemo(() => Blac.getInstance().getBloc(bloc, {\n id: options.id,\n props: options.props\n}), [options.id]);\n\nexport default useResolvedBloc;\n","import { BlocBase, BlocConstructor, BlocInstanceId, BlocProps, CubitPropsType, ValueType } from \"blac\";\nimport { useEffect, useMemo, useSyncExternalStore } from \"react\";\nimport externalBlocStore, { ExternalStore } from \"./externalBlocStore\";\nimport useResolvedBloc from \"./useResolvedBloc\";\n\nexport type BlocHookData<B extends BlocBase<S>, S> = [\n value: ValueType<B>,\n instance: B,\n];\n\n\nexport interface BlocHookOptions<B extends BlocBase<S>, S> {\n id?: string;\n dependencySelector?: (state: ValueType<B>) => unknown;\n props?: CubitPropsType<B>;\n}\n\nexport type BlocHookDependencySelector<B extends BlocBase<S>, S> = (state: ValueType<B>) => unknown;\n\nclass UseBlocClass {\n static useBloc<B extends BlocBase<S>, S>(\n bloc: BlocConstructor<B>\n ): BlocHookData<B, S>;\n static useBloc<B extends BlocBase<S>, S>(\n bloc: BlocConstructor<B>,\n options: BlocHookOptions<B, S>\n ): BlocHookData<B, S>;\n static useBloc<B extends BlocBase<S>, S>(\n bloc: BlocConstructor<B>,\n depsSelector: BlocHookDependencySelector<B, S>\n ): BlocHookData<B, S>;\n static useBloc<B extends BlocBase<S>, S>(\n bloc: BlocConstructor<B>,\n instanceId: BlocInstanceId\n ): BlocHookData<B, S>;\n static useBloc<B extends BlocBase<S>, S>(\n bloc: BlocConstructor<B>,\n options?: BlocHookOptions<B, S> | BlocHookDependencySelector<B, S> | BlocInstanceId\n ): BlocHookData<B, S> {\n // default options\n let dependencySelector: BlocHookDependencySelector<B, S> = (state: ValueType<B>) => state;\n let blocId: BlocInstanceId | undefined;\n let props: BlocProps = {};\n\n // parse options\n if (typeof options === \"function\") {\n dependencySelector = options;\n }\n\n if (typeof options === \"string\") {\n blocId = options;\n }\n\n if (typeof options === \"object\") {\n dependencySelector = options.dependencySelector ?? dependencySelector;\n blocId = options.id;\n props = options.props ?? props;\n }\n\n\n const resolvedBloc = useResolvedBloc<B, S>(bloc, { id: blocId, props });\n\n if (!resolvedBloc) {\n throw new Error(`useBloc: could not resolve: ${bloc.name || bloc}`);\n }\n\n const { subscribe, getSnapshot, getServerSnapshot } = useMemo<ExternalStore<B>>(\n () => externalBlocStore(resolvedBloc, dependencySelector),\n [resolvedBloc]\n );\n\n const state = useSyncExternalStore<ValueType<B>>(subscribe, getSnapshot, getServerSnapshot);\n\n useEffect(() => {\n resolvedBloc.props = props;\n }, [props]);\n\n return [state, resolvedBloc];\n }\n}\n\nconst useBloc = UseBlocClass.useBloc;\n\nexport default useBloc;\n"],"names":["useMemo","Blac","useSyncExternalStore","useEffect"],"mappings":"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"}
1
+ {"version":3,"file":"blac-react.js","sources":["../src/externalBlocStore.ts","../../blac/src/Blac.ts","../../blac/src/BlacObserver.ts","../../blac/src/BlocBase.ts","../../blac/src/Cubit.ts","../../blac/src/Bloc.ts","../src/useBloc.tsx"],"sourcesContent":["import { BlocBase } from 'blac/src';\n\nexport interface ExternalStore<B extends BlocBase<S>, S> {\n subscribe: (onStoreChange: () => void) => () => void;\n getSnapshot: () => S;\n getServerSnapshot?: () => S;\n}\n\nconst externalBlocStore = <B extends BlocBase<S>, S>(\n bloc: B,\n dependencySelector: (state: S) => unknown,\n): ExternalStore<B, S> => {\n let lastDependencyCheck = dependencySelector(bloc.state);\n\n return {\n subscribe: (listener: () => void) => {\n const unSub = bloc.addEventListenerStateChange((data) => {\n const newDependencyCheck = dependencySelector(data);\n if (newDependencyCheck !== lastDependencyCheck) {\n lastDependencyCheck = newDependencyCheck;\n listener();\n }\n });\n return () => {\n unSub();\n };\n },\n getSnapshot: (): S => bloc.state,\n getServerSnapshot: (): S => bloc.state,\n };\n};\n\nexport default externalBlocStore;\n","import { BlocBase, BlocInstanceId } from './BlocBase';\nimport { BlocBaseAbstract, BlocConstructor } from './types';\nimport { BlocProps } from './Cubit';\nimport { BlacPlugin } from './BlacPlugin';\n\nexport interface BlacConfig {\n exposeBlacInstance?: boolean;\n}\n\nexport enum BlacEvent {\n BLOC_DISPOSED = 'BLOC_DISPOSED',\n LISTENER_REMOVED = 'LISTENER_REMOVED',\n LISTENER_ADDED = 'LISTENER_ADDED',\n STATE_CHANGED = 'STATE_CHANGED',\n BLOC_CREATED = 'BLOC_CREATED',\n}\n\nexport interface EventParams {\n [BlacEvent.BLOC_DISPOSED]: undefined;\n [BlacEvent.LISTENER_REMOVED]: undefined;\n [BlacEvent.LISTENER_ADDED]: undefined;\n [BlacEvent.BLOC_CREATED]: undefined;\n [BlacEvent.STATE_CHANGED]: {\n newState: any;\n oldState: any;\n };\n}\n\nexport class Blac {\n static instance: Blac = new Blac();\n static getAllBlocs = Blac.instance.getAllBlocs;\n static addPlugin = Blac.instance.addPlugin;\n static configure = Blac.instance.configure;\n blocInstanceMap: Map<string, BlocBase<any>> = new Map();\n isolatedBlocMap: Map<Function, BlocBase<any>[]> = new Map();\n pluginList: BlacPlugin[] = [];\n customPropsMap: Map<Function, BlocProps> = new Map();\n postChangesToDocument = false;\n\n constructor() {\n if (Blac.instance) {\n return Blac.instance;\n }\n\n Blac.instance = this;\n console.log('Blac Init');\n }\n\n static getInstance(): Blac {\n return Blac.instance;\n }\n\n addPlugin = (plugin: BlacPlugin): void => {\n // check if already added\n const index = this.pluginList.findIndex((p) => p.name === plugin.name);\n if (index !== -1) return;\n this.pluginList.push(plugin);\n };\n\n reportToPlugins = <B extends BlacEvent>(\n event: B,\n bloc: BlocBase<any>,\n params?: EventParams[B],\n ) => {\n this.pluginList.forEach((plugin) => {\n plugin.onEvent(event, bloc, params);\n });\n };\n\n report = <B extends BlacEvent>(\n event: B,\n bloc: BlocBase<any>,\n params?: EventParams[B],\n ) => {\n const base = bloc.constructor as unknown as BlocBaseAbstract;\n\n switch (event) {\n case BlacEvent.BLOC_DISPOSED:\n this.disposeBloc(bloc);\n break;\n case BlacEvent.LISTENER_REMOVED:\n if (bloc.observer.size === 0 && !base.keepAlive) this.disposeBloc(bloc);\n break;\n }\n\n this.reportToPlugins(event, bloc, params);\n };\n\n disposeBloc = (bloc: BlocBase<any>): void => {\n const base = bloc.constructor as unknown as BlocBaseAbstract;\n if (!base.isolated) {\n this.unregisterBlocInstance(bloc);\n } else {\n this.unregisterIsolatedBlocInstance(bloc);\n }\n };\n\n createBlocInstanceMapKey(blocClassName: string, id: BlocInstanceId): string {\n return `${blocClassName}:${id}`;\n }\n\n unregisterBlocInstance(bloc: BlocBase<any>): void {\n const key = this.createBlocInstanceMapKey(bloc.name, bloc.id);\n this.blocInstanceMap.delete(key);\n }\n\n registerBlocInstance(bloc: BlocBase<any>): void {\n const key = this.createBlocInstanceMapKey(bloc.name, bloc.id);\n this.blocInstanceMap.set(key, bloc);\n }\n\n findRegisteredBlocInstance<B extends BlocBase<any>>(\n blocClass: BlocConstructor<B>,\n id: BlocInstanceId,\n ): InstanceType<BlocConstructor<B>> | undefined {\n const base = blocClass as unknown as BlocBaseAbstract;\n if (base.isolated) return undefined;\n\n const key = this.createBlocInstanceMapKey(blocClass.name, id);\n return this.blocInstanceMap.get(key) as InstanceType<BlocConstructor<B>>;\n }\n\n registerIsolatedBlocInstance(bloc: BlocBase<any>): void {\n const blocClass = bloc.constructor;\n const blocs = this.isolatedBlocMap.get(blocClass);\n if (blocs) {\n blocs.push(bloc);\n } else {\n this.isolatedBlocMap.set(blocClass, [bloc]);\n }\n }\n\n unregisterIsolatedBlocInstance(bloc: BlocBase<any>): void {\n const blocClass = bloc.constructor;\n const blocs = this.isolatedBlocMap.get(blocClass);\n if (blocs) {\n const index = blocs.findIndex((b) => b.id === bloc.id);\n blocs.splice(index, 1);\n }\n }\n\n setCustomProps(\n blocClass: BlocBaseAbstract,\n props: BlocProps | undefined,\n ): void {\n if (!props) return;\n this.customPropsMap.set(blocClass, props);\n }\n\n getCustomProps(blocClass: BlocBaseAbstract): BlocProps | undefined {\n const props = this.customPropsMap.get(blocClass);\n this.customPropsMap.delete(blocClass);\n return props;\n }\n\n createNewBlocInstance<B extends BlocBase<any>>(\n blocClass: BlocConstructor<B>,\n id: BlocInstanceId,\n props: BlocProps | undefined,\n ): InstanceType<BlocConstructor<B>> {\n const base = blocClass as unknown as BlocBaseAbstract;\n const hasCreateMethod = Object.prototype.hasOwnProperty.call(\n blocClass,\n 'create',\n );\n\n this.setCustomProps(base, props);\n const newBloc = hasCreateMethod ? base.create() : new blocClass();\n newBloc.updateId(id);\n\n if (base.isolated) {\n this.registerIsolatedBlocInstance(newBloc);\n return newBloc as InstanceType<BlocConstructor<B>>;\n }\n\n this.registerBlocInstance(newBloc);\n return newBloc as InstanceType<BlocConstructor<B>>;\n }\n\n getBloc<B extends BlocBase<S>, S>(\n blocClass: BlocConstructor<B>,\n options: {\n id?: BlocInstanceId;\n props?: BlocProps;\n reconnect?: boolean;\n } = {},\n ): InstanceType<BlocConstructor<B>> {\n const id = options.id || blocClass.name;\n const registered = this.findRegisteredBlocInstance(blocClass, id);\n const { reconnect } = options;\n if (registered) {\n if (reconnect) {\n registered.dispose();\n } else {\n return registered;\n }\n }\n return this.createNewBlocInstance(blocClass, id, options.props);\n }\n\n getAllBlocs = async <B extends BlocBase<any>>(\n blocClass: BlocConstructor<B>,\n options: {\n searchIsolated?: boolean;\n } = {},\n ): Promise<B[]> => {\n const base = blocClass as unknown as BlocBaseAbstract;\n\n const { searchIsolated = base.isolated } = options;\n\n if (searchIsolated) {\n const blocs = this.isolatedBlocMap.get(blocClass);\n if (blocs) return blocs as B[];\n } else {\n const blocs = Array.from(this.blocInstanceMap.values());\n return blocs.filter((b) => b instanceof blocClass) as B[];\n }\n return [];\n };\n\n configure = (config: BlacConfig) => {\n if (config.exposeBlacInstance) {\n // window.__blac = this;\n }\n };\n}\n\ndeclare global {\n interface Window {\n // __blac?: Blac;\n }\n}\n","export type BlacObserver<S> = (\n newState: S,\n oldState: S\n) => void | Promise<void>;\n\nexport class BlacObservable<S> {\n private _observers = new Set<BlacObserver<S>>();\n\n get size(): number {\n return this._observers.size;\n }\n\n subscribe(observer: BlacObserver<S>): () => void {\n this._observers.add(observer);\n return () => this.unsubscribe(observer);\n }\n\n unsubscribe(observer: BlacObserver<S>) {\n this._observers.delete(observer);\n }\n\n notify(newState: S, oldState: S) {\n this._observers.forEach((observer) => observer(newState, oldState));\n }\n\n dispose() {\n this._observers.clear();\n }\n}\n","import { Blac, BlacEvent } from './Blac';\nimport { BlacObservable } from './BlacObserver';\nimport { BlocProps } from './Cubit';\n\nexport type BlocInstanceId = string | number | undefined;\n\nexport abstract class BlocBase<S, P extends BlocProps = {}> {\n static isolated = false;\n static keepAlive = false;\n static create: <S extends any>() => BlocBase<S>;\n static isBlacClass = true;\n public isolated = false;\n public isBlacLive = true;\n public observer: BlacObservable<any>;\n public blac = Blac.getInstance();\n public id: BlocInstanceId;\n public props: P = {} as P;\n public readonly createdAt = Date.now();\n\n // onConnect(): void;\n // onDisconnect(): void;\n\n constructor(initialState: S) {\n this.observer = new BlacObservable();\n this._state = initialState;\n this.blac.report(BlacEvent.BLOC_CREATED, this);\n this.id = this.constructor.name;\n this.isolated = (this.constructor as any).isolated;\n // this.onConnect?.();\n }\n\n public _state: S;\n\n get state(): S {\n return this._state;\n }\n\n get name() {\n return this.constructor.name;\n }\n\n updateId = (id?: BlocInstanceId) => {\n const originalId = this.id;\n if (!id || id === originalId) return;\n this.id = id;\n };\n\n addEventListenerStateChange = (\n callback: (newState: S, oldState: S) => void,\n ): (() => void) => {\n this.blac.report(BlacEvent.LISTENER_ADDED, this);\n this.observer.subscribe(callback);\n return () => this.handleUnsubscribe(callback);\n };\n\n dispose() {\n this.blac.report(BlacEvent.BLOC_DISPOSED, this);\n this.isBlacLive = false;\n this.observer.dispose();\n // this.onDisconnect?.();\n }\n\n private handleUnsubscribe = (\n callback: (newState: S, oldState: S) => void,\n ): void => {\n this.observer.unsubscribe(callback);\n this.blac.report(BlacEvent.LISTENER_REMOVED, this);\n };\n}\n","import { BlocBase } from './BlocBase';\nimport { Blac, BlacEvent } from './Blac';\n\nexport type BlocProps = Record<string | number, any>;\n\nexport abstract class Cubit<S, P extends BlocProps = {}> extends BlocBase<S> {\n static create: () => Cubit<any, any>;\n props: P = {} as P;\n\n constructor(initialState: S) {\n super(initialState);\n const newProps = Blac.getInstance().getCustomProps(this.constructor as any);\n this.props = { ...this.props, ...newProps };\n }\n\n /**\n * Update the state then will notify all observers\n * @param state: new state\n **/\n emit(state: S): void {\n if (state === this.state) {\n return;\n }\n\n const oldState = this.state;\n const newState = state;\n this._state = state;\n this.observer.notify(newState, oldState);\n\n this.blac.report(BlacEvent.STATE_CHANGED, this, {\n newState,\n oldState,\n });\n }\n\n /**\n * Merges current state object with the parameter \"state\" and emits the new state\n * Warning: only works when the state is an object.\n * @param state: Partial state that should change\n **/\n patch(\n statePatch: S extends object ? Partial<S> : S,\n ignoreChangeCheck = false,\n ): void {\n let changes = false;\n if (!ignoreChangeCheck) {\n for (const key in statePatch) {\n const current = (this.state as any)[key];\n if (statePatch[key] !== current) {\n changes = true;\n break;\n }\n }\n }\n\n if (changes) {\n this.emit({ ...this.state, ...statePatch });\n }\n }\n}\n","import { BlocBase } from './BlocBase';\nimport { BlacEvent } from './Blac';\n\nexport abstract class Bloc<S, A> extends BlocBase<S> {\n static create: () => BlocBase<any>;\n\n /**\n * The reducer is called whenever a new action is emited,\n * @param action: the action from \"emit\"\n * @param state: the current state\n * @returns: the new state\n */\n abstract reducer(action: A, state: S): S;\n\n /**\n * Emit a new action, the reducer should digest the action and update the state accordingly\n * @param action: action t obe sent to the reducer\n */\n emit = (action: A): void => {\n const oldState = this.state;\n const newState = this.reducer(action, this.state);\n this._state = newState;\n this.observer.notify(newState, oldState);\n\n this.blac.report(BlacEvent.STATE_CHANGED, this, {\n newState,\n oldState,\n });\n };\n}\n","import {\n Blac,\n BlocBase,\n BlocConstructor,\n BlocInstanceId,\n BlocProps,\n CubitPropsType,\n ValueType,\n} from 'blac/src';\nimport { useEffect, useMemo, useRef, useSyncExternalStore } from 'react';\nimport externalBlocStore from './externalBlocStore';\n\nexport type BlocHookData<B extends BlocBase<S>, S> = [\n value: ValueType<B>,\n instance: B,\n];\n\n// type BlocHookData<B extends BlocBase<S>, S> = [S, InstanceType<B>]; // B is the bloc class, S is the state of the bloc\n// type UseBlocClassResult<B, S> = BlocHookData<B, S>;\n\nexport interface BlocHookOptions<B extends BlocBase<S>, S> {\n id?: string;\n dependencySelector?: (state: ValueType<B>) => unknown;\n props?: CubitPropsType<B>;\n}\n\nexport type BlocHookDependencySelector<B extends BlocBase<S>, S> = (\n state: ValueType<B>,\n) => unknown;\n\nexport class UseBlocClass {\n // constructor, no options\n static useBloc<B extends BlocConstructor<BlocBase<S>>, S>(\n bloc: B,\n ): BlocHookData<InstanceType<B>, S>;\n static useBloc<B extends BlocConstructor<BlocBase<S>>, S>(\n bloc: B,\n options: BlocHookOptions<InstanceType<B>, S>,\n ): BlocHookData<InstanceType<B>, S>;\n static useBloc<B extends BlocConstructor<BlocBase<S>>, S>(\n bloc: B,\n depsSelector: BlocHookDependencySelector<InstanceType<B>, S>,\n ): BlocHookData<InstanceType<B>, S>;\n static useBloc<B extends BlocConstructor<BlocBase<S>>, S>(\n bloc: B,\n instanceId: string,\n ): BlocHookData<InstanceType<B>, S>;\n static useBloc<B extends BlocConstructor<BlocBase<S>>, S>(\n bloc: B,\n options?:\n | BlocHookOptions<InstanceType<B>, S>\n | BlocHookDependencySelector<InstanceType<B>, S>\n | BlocInstanceId,\n ): BlocHookData<InstanceType<B>, S> {\n // default options\n let dependencySelector: BlocHookDependencySelector<InstanceType<B>, S> = (\n state: ValueType<InstanceType<B>>,\n ) => state;\n let blocId: BlocInstanceId | undefined;\n let props: BlocProps = {};\n\n // parse options\n\n // if options is a function, its a dependencySelector\n if (typeof options === 'function') {\n dependencySelector = options;\n }\n\n // if options is a string its an ID\n if (typeof options === 'string') {\n blocId = options;\n }\n\n if (typeof options === 'object') {\n dependencySelector = options.dependencySelector ?? dependencySelector;\n blocId = options.id;\n props = options.props ?? props;\n }\n\n // const now = Date.now();\n // const createdAt = useRef(now);\n // const dateChanged = now !== createdAt;\n\n // resolve the bloc, get the existing instance of the bloc or create a new one\n // const resolvedBloc = useMemo(\n // () =>\n const resolvedBloc = Blac.getInstance().getBloc(bloc, {\n id: blocId,\n props,\n reconnect: false,\n }) as InstanceType<B>;\n // [renderId.current],\n // );\n\n if (!resolvedBloc) {\n throw new Error(`useBloc: could not resolve: ${bloc.name || bloc}`);\n }\n\n const { subscribe, getSnapshot, getServerSnapshot } = useMemo(\n () => externalBlocStore(resolvedBloc, dependencySelector),\n [resolvedBloc.createdAt],\n );\n\n const state = useSyncExternalStore<ValueType<InstanceType<B>>>(\n subscribe,\n getSnapshot,\n getServerSnapshot,\n );\n\n useEffect(() => {\n resolvedBloc.props = props;\n }, [props]);\n\n return [state, resolvedBloc];\n }\n}\n\nconst useBloc = UseBlocClass.useBloc;\n\nexport default useBloc;\n"],"names":["useMemo","useSyncExternalStore","useEffect"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@blac/react",
3
- "version": "0.0.18",
3
+ "version": "0.0.19",
4
4
  "license": "MIT",
5
5
  "main": "dist/blac-react.js",
6
6
  "module": "dist/blac-react.esm.js",
@@ -1,3 +0,0 @@
1
- import { defineConfig } from 'vitest/config';
2
- export default defineConfig({});
3
- //# sourceMappingURL=vitest.config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"vitest.config.js","sourceRoot":"","sources":["../vitest.config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAE5C,eAAe,YAAY,CAAC,EAE3B,CAAC,CAAA"}