@nexigen/entity-normalizer 0.1.1 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (187) hide show
  1. package/dist/async/async-duck.d.ts +38 -0
  2. package/dist/async/async-duck.js +189 -0
  3. package/dist/async/async-duck.js.map +1 -0
  4. package/dist/async/create-duck.d.ts +2 -0
  5. package/dist/async/create-duck.js +6 -0
  6. package/dist/async/create-duck.js.map +1 -0
  7. package/dist/async/index.d.ts +1 -0
  8. package/dist/async/index.js +2 -0
  9. package/dist/async/index.js.map +1 -0
  10. package/dist/async/marker.d.ts +1 -0
  11. package/dist/async/marker.js +2 -0
  12. package/dist/async/marker.js.map +1 -0
  13. package/dist/async/public.d.ts +34 -0
  14. package/dist/async/public.js +2 -0
  15. package/dist/async/public.js.map +1 -0
  16. package/dist/async/retry.d.ts +3 -0
  17. package/dist/async/retry.js +36 -0
  18. package/dist/async/retry.js.map +1 -0
  19. package/dist/async/types.d.ts +24 -0
  20. package/dist/async/types.js +2 -0
  21. package/dist/async/types.js.map +1 -0
  22. package/dist/constants/time.d.ts +6 -0
  23. package/dist/constants/time.js +7 -0
  24. package/dist/constants/time.js.map +1 -0
  25. package/dist/constants/values.d.ts +1 -0
  26. package/dist/constants/values.js +2 -0
  27. package/dist/constants/values.js.map +1 -0
  28. package/dist/create/cleaner.d.ts +7 -0
  29. package/dist/create/cleaner.js +69 -0
  30. package/dist/create/cleaner.js.map +1 -0
  31. package/dist/create/create-store.d.ts +2 -0
  32. package/dist/create/create-store.js +5 -0
  33. package/dist/create/create-store.js.map +1 -0
  34. package/dist/create/extractor.d.ts +8 -0
  35. package/dist/create/extractor.js +64 -0
  36. package/dist/create/extractor.js.map +1 -0
  37. package/dist/create/index.d.ts +1 -0
  38. package/dist/create/index.js +2 -0
  39. package/dist/create/index.js.map +1 -0
  40. package/dist/create/manager.d.ts +9 -0
  41. package/dist/create/manager.js +39 -0
  42. package/dist/create/manager.js.map +1 -0
  43. package/dist/create/proxy.d.ts +11 -0
  44. package/dist/create/proxy.js +57 -0
  45. package/dist/create/proxy.js.map +1 -0
  46. package/dist/create/scanner.d.ts +19 -0
  47. package/dist/create/scanner.js +109 -0
  48. package/dist/create/scanner.js.map +1 -0
  49. package/dist/create/utils.d.ts +3 -0
  50. package/dist/create/utils.js +33 -0
  51. package/dist/create/utils.js.map +1 -0
  52. package/dist/create-store-hooks.d.ts +19 -0
  53. package/dist/create-store-hooks.js +23 -0
  54. package/dist/create-store-hooks.js.map +1 -0
  55. package/dist/di/index.d.ts +2 -0
  56. package/dist/di/index.js +3 -0
  57. package/dist/di/index.js.map +1 -0
  58. package/dist/di/register-root-store.d.ts +11 -0
  59. package/dist/di/register-root-store.js +23 -0
  60. package/dist/di/register-root-store.js.map +1 -0
  61. package/dist/entities/cleaner/bucket.d.ts +8 -0
  62. package/dist/entities/cleaner/bucket.js +31 -0
  63. package/dist/entities/cleaner/bucket.js.map +1 -0
  64. package/dist/entities/cleaner/index.d.ts +1 -0
  65. package/dist/entities/cleaner/index.js +2 -0
  66. package/dist/entities/cleaner/index.js.map +1 -0
  67. package/dist/entities/cleaner/store.d.ts +12 -0
  68. package/dist/entities/cleaner/store.js +73 -0
  69. package/dist/entities/cleaner/store.js.map +1 -0
  70. package/dist/entities/cleaner/walker.d.ts +6 -0
  71. package/dist/entities/cleaner/walker.js +34 -0
  72. package/dist/entities/cleaner/walker.js.map +1 -0
  73. package/dist/entities/collection/create-entity-collection.d.ts +9 -0
  74. package/dist/entities/collection/create-entity-collection.js +17 -0
  75. package/dist/entities/collection/create-entity-collection.js.map +1 -0
  76. package/dist/entities/collection/entity-collection.d.ts +49 -0
  77. package/dist/entities/collection/entity-collection.js +186 -0
  78. package/dist/entities/collection/entity-collection.js.map +1 -0
  79. package/dist/entities/collection/index.d.ts +3 -0
  80. package/dist/entities/collection/index.js +2 -0
  81. package/dist/entities/collection/index.js.map +1 -0
  82. package/dist/entities/collection/marker.d.ts +2 -0
  83. package/dist/entities/collection/marker.js +3 -0
  84. package/dist/entities/collection/marker.js.map +1 -0
  85. package/dist/entities/collection/multi-entity-collection.d.ts +24 -0
  86. package/dist/entities/collection/multi-entity-collection.js +95 -0
  87. package/dist/entities/collection/multi-entity-collection.js.map +1 -0
  88. package/dist/entities/collection/public.d.ts +50 -0
  89. package/dist/entities/collection/public.js +2 -0
  90. package/dist/entities/collection/public.js.map +1 -0
  91. package/dist/entities/collection/types.d.ts +39 -0
  92. package/dist/entities/collection/types.js +2 -0
  93. package/dist/entities/collection/types.js.map +1 -0
  94. package/dist/entities/constants.d.ts +4 -0
  95. package/dist/entities/constants.js +5 -0
  96. package/dist/entities/constants.js.map +1 -0
  97. package/dist/entities/create-entity-schema.d.ts +2 -0
  98. package/dist/entities/create-entity-schema.js +5 -0
  99. package/dist/entities/create-entity-schema.js.map +1 -0
  100. package/dist/entities/index.d.ts +4 -0
  101. package/dist/entities/index.js +5 -0
  102. package/dist/entities/index.js.map +1 -0
  103. package/dist/entities/normalize.d.ts +11 -0
  104. package/dist/entities/normalize.js +79 -0
  105. package/dist/entities/normalize.js.map +1 -0
  106. package/dist/entities/processor.d.ts +14 -0
  107. package/dist/entities/processor.js +156 -0
  108. package/dist/entities/processor.js.map +1 -0
  109. package/dist/entities/public.d.ts +102 -0
  110. package/dist/entities/public.js +7 -0
  111. package/dist/entities/public.js.map +1 -0
  112. package/dist/entities/record/create-entity-record.d.ts +15 -0
  113. package/dist/entities/record/create-entity-record.js +13 -0
  114. package/dist/entities/record/create-entity-record.js.map +1 -0
  115. package/dist/entities/record/entity-record.d.ts +37 -0
  116. package/dist/entities/record/entity-record.js +83 -0
  117. package/dist/entities/record/entity-record.js.map +1 -0
  118. package/dist/entities/record/index.d.ts +2 -0
  119. package/dist/entities/record/index.js +2 -0
  120. package/dist/entities/record/index.js.map +1 -0
  121. package/dist/entities/record/marker.d.ts +1 -0
  122. package/dist/entities/record/marker.js +2 -0
  123. package/dist/entities/record/marker.js.map +1 -0
  124. package/dist/entities/record/public.d.ts +25 -0
  125. package/dist/entities/record/public.js +2 -0
  126. package/dist/entities/record/public.js.map +1 -0
  127. package/dist/entities/record/types.d.ts +3 -0
  128. package/dist/entities/record/types.js +2 -0
  129. package/dist/entities/record/types.js.map +1 -0
  130. package/dist/entities/schema.d.ts +12 -0
  131. package/dist/entities/schema.js +31 -0
  132. package/dist/entities/schema.js.map +1 -0
  133. package/dist/entities/store.d.ts +22 -0
  134. package/dist/entities/store.js +154 -0
  135. package/dist/entities/store.js.map +1 -0
  136. package/dist/entities/types.d.ts +82 -0
  137. package/dist/entities/types.js +2 -0
  138. package/dist/entities/types.js.map +1 -0
  139. package/dist/index.d.ts +12 -0
  140. package/dist/index.js +13 -0
  141. package/dist/index.js.map +1 -0
  142. package/dist/root/RootStore.d.ts +24 -0
  143. package/dist/root/RootStore.js +134 -0
  144. package/dist/root/RootStore.js.map +1 -0
  145. package/dist/root/coreApi/create-core-api.d.ts +7 -0
  146. package/dist/root/coreApi/create-core-api.js +12 -0
  147. package/dist/root/coreApi/create-core-api.js.map +1 -0
  148. package/dist/root/coreApi/entities.d.ts +10 -0
  149. package/dist/root/coreApi/entities.js +57 -0
  150. package/dist/root/coreApi/entities.js.map +1 -0
  151. package/dist/root/coreApi/lifecycle.d.ts +5 -0
  152. package/dist/root/coreApi/lifecycle.js +9 -0
  153. package/dist/root/coreApi/lifecycle.js.map +1 -0
  154. package/dist/root/coreApi/public.d.ts +71 -0
  155. package/dist/root/coreApi/public.js +6 -0
  156. package/dist/root/coreApi/public.js.map +1 -0
  157. package/dist/root/coreApi/stores.d.ts +2 -0
  158. package/dist/root/coreApi/stores.js +31 -0
  159. package/dist/root/coreApi/stores.js.map +1 -0
  160. package/dist/root/coreApi/types.d.ts +68 -0
  161. package/dist/root/coreApi/types.js +2 -0
  162. package/dist/root/coreApi/types.js.map +1 -0
  163. package/dist/root/create-root-store.d.ts +3 -0
  164. package/dist/root/create-root-store.js +11 -0
  165. package/dist/root/create-root-store.js.map +1 -0
  166. package/dist/root/fallback.d.ts +2 -0
  167. package/dist/root/fallback.js +6 -0
  168. package/dist/root/fallback.js.map +1 -0
  169. package/dist/root/index.d.ts +3 -0
  170. package/dist/root/index.js +3 -0
  171. package/dist/root/index.js.map +1 -0
  172. package/dist/root/marker.d.ts +1 -0
  173. package/dist/root/marker.js +2 -0
  174. package/dist/root/marker.js.map +1 -0
  175. package/dist/root/public.d.ts +28 -0
  176. package/dist/root/public.js +2 -0
  177. package/dist/root/public.js.map +1 -0
  178. package/dist/root/types.d.ts +66 -0
  179. package/dist/root/types.js +2 -0
  180. package/dist/root/types.js.map +1 -0
  181. package/dist/utils/index.d.ts +1 -0
  182. package/dist/utils/index.js +2 -0
  183. package/dist/utils/index.js.map +1 -0
  184. package/dist/utils/throttle-by-time.d.ts +1 -0
  185. package/dist/utils/throttle-by-time.js +11 -0
  186. package/dist/utils/throttle-by-time.js.map +1 -0
  187. package/package.json +11 -2
@@ -0,0 +1,154 @@
1
+ import { makeAutoObservable, observable } from 'mobx';
2
+ import { META } from '../constants/values';
3
+ export class EntitiesStore {
4
+ constructor() {
5
+ this.buckets = new Map();
6
+ this.onMergeCallbacks = new Set();
7
+ Object.defineProperty(this, 'buckets', {
8
+ enumerable: false,
9
+ writable: true,
10
+ configurable: false,
11
+ });
12
+ makeAutoObservable(this, {
13
+ buckets: false,
14
+ onMergeCallbacks: false,
15
+ getSnapshot: false,
16
+ getSnapshotKeys: false,
17
+ getSnapshotByKey: false,
18
+ reset: true,
19
+ }, { autoBind: true });
20
+ }
21
+ // ===== callbacks =====
22
+ addOnMergeCallback(fn) {
23
+ this.onMergeCallbacks.add(fn);
24
+ }
25
+ removeOnMergeCallback(fn) {
26
+ this.onMergeCallbacks.delete(fn);
27
+ }
28
+ triggerMergeCallbacks() {
29
+ for (const fn of this.onMergeCallbacks) {
30
+ fn();
31
+ }
32
+ }
33
+ // ===== buckets =====
34
+ getBucket(key) {
35
+ return this.buckets.get(key);
36
+ }
37
+ ensureBucket(key) {
38
+ let bucket = this.getBucket(key);
39
+ if (!bucket) {
40
+ bucket = observable.object({}, {}, { deep: false });
41
+ this.buckets.set(key, bucket);
42
+ }
43
+ return bucket;
44
+ }
45
+ // ===== merge =====
46
+ merge(newEntities) {
47
+ for (const key in newEntities) {
48
+ const bucket = this.ensureBucket(key);
49
+ const incomingBucket = newEntities[key];
50
+ if (!incomingBucket) {
51
+ continue;
52
+ }
53
+ for (const id in incomingBucket) {
54
+ const incoming = incomingBucket[id];
55
+ const existing = bucket[id];
56
+ if (existing) {
57
+ Object.assign(existing, incoming);
58
+ }
59
+ else {
60
+ bucket[id] = incoming;
61
+ }
62
+ }
63
+ }
64
+ this.triggerMergeCallbacks();
65
+ }
66
+ // ===== read =====
67
+ hasEntity(entityKey, id) {
68
+ return !!this.getBucket(entityKey)?.[id];
69
+ }
70
+ getEntity(entityKey, id) {
71
+ const entity = this.getBucket(entityKey)?.[id];
72
+ if (entity?.[META]) {
73
+ entity[META].accessedAt = Date.now();
74
+ }
75
+ return entity;
76
+ }
77
+ getAll(entityKey) {
78
+ const bucket = this.getBucket(entityKey);
79
+ return bucket ? Object.values(bucket) : [];
80
+ }
81
+ getCount(entityKey) {
82
+ return Object.keys(this.getBucket(entityKey) ?? {}).length;
83
+ }
84
+ // ===== remove =====
85
+ remove(entityKey, id) {
86
+ const bucket = this.getBucket(entityKey);
87
+ if (!bucket) {
88
+ return;
89
+ }
90
+ delete bucket[id];
91
+ this.triggerMergeCallbacks();
92
+ }
93
+ removeMany(toRemove) {
94
+ for (const key in toRemove) {
95
+ const bucket = this.getBucket(key);
96
+ if (!bucket) {
97
+ continue;
98
+ }
99
+ const ids = toRemove[key];
100
+ if (!ids || ids.size === 0) {
101
+ continue;
102
+ }
103
+ ids.forEach(id => {
104
+ delete bucket[id];
105
+ });
106
+ }
107
+ this.triggerMergeCallbacks();
108
+ }
109
+ // ===== reset =====
110
+ reset(entityKey) {
111
+ if (entityKey) {
112
+ this.buckets.set(entityKey, observable.object({}, {}, { deep: false }));
113
+ return;
114
+ }
115
+ for (const key of this.buckets.keys()) {
116
+ this.buckets.set(key, observable.object({}, {}, { deep: false }));
117
+ }
118
+ this.triggerMergeCallbacks();
119
+ }
120
+ // ===== snapshot =====
121
+ get getSnapshot() {
122
+ const out = {};
123
+ for (const [key, bucket] of this.buckets.entries()) {
124
+ out[key] = { ...bucket };
125
+ }
126
+ return out;
127
+ }
128
+ get getSnapshotKeys() {
129
+ return Array.from(this.buckets.keys());
130
+ }
131
+ getSnapshotByKey(entityKey) {
132
+ const bucket = this.getBucket(entityKey);
133
+ if (!bucket) {
134
+ return {};
135
+ }
136
+ const out = {};
137
+ for (const [id, entity] of Object.entries(bucket)) {
138
+ const { [META]: meta, ...rest } = entity;
139
+ out[id] = {
140
+ ...rest,
141
+ [META]: meta
142
+ ? {
143
+ createdAt: meta.createdAt,
144
+ updatedAt: meta.updatedAt,
145
+ accessedAt: meta.accessedAt,
146
+ refSources: Array.from(meta.refSources ?? []),
147
+ }
148
+ : undefined,
149
+ };
150
+ }
151
+ return out;
152
+ }
153
+ }
154
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/entities/store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,82 @@
1
+ import type { EntitySchema } from './schema';
2
+ import type { EntitiesStore } from './store';
3
+ import type { META } from '../constants/values';
4
+ /**
5
+ * Runtime schema type for infra layers
6
+ */
7
+ export type AnySchema = EntitySchema<any, any>;
8
+ /**
9
+ * Generic entity buckets shape
10
+ * key -> entityKey (string)
11
+ * value -> map of id -> stored entity
12
+ */
13
+ export type EntityBuckets = Record<string, Record<string, StoredEntity<any>>>;
14
+ /**
15
+ * Resolver injected into models
16
+ */
17
+ export type GetEntity = <T = any>(entityKey: string, id: string | number) => PublicEntity<StoredEntity<T>> | undefined;
18
+ /**
19
+ * Entity model constructor contract
20
+ */
21
+ export interface EntityModelCtor<TDto, TModel> {
22
+ new (dto: TDto, getEntity: GetEntity): TModel;
23
+ }
24
+ /**
25
+ * Schema options (runtime-oriented)
26
+ */
27
+ export interface EntitySchemaOptions<TDto, TModel> {
28
+ idAttribute?: ((input: any) => string | number) | string;
29
+ processStrategy?: (input: any) => any;
30
+ mergeStrategy?: (a: any, b: any) => any;
31
+ model?: EntityModelCtor<TDto, TModel>;
32
+ }
33
+ /**
34
+ * Core store type (no domain knowledge)
35
+ */
36
+ export type TEntitiesStore = EntitiesStore;
37
+ /**
38
+ * Entity metadata (infra concern)
39
+ */
40
+ export type EntityMeta = {
41
+ createdAt: number;
42
+ updatedAt: number;
43
+ accessedAt: number;
44
+ refSources?: Set<string>;
45
+ };
46
+ /**
47
+ * Stored entity = model + meta
48
+ */
49
+ export type StoredEntity<T> = T & {
50
+ _meta_nexigen: EntityMeta;
51
+ };
52
+ /**
53
+ * Garbage collector item
54
+ */
55
+ export type EntityGarbageCollectorItem = {
56
+ id: string;
57
+ meta: EntityMeta;
58
+ };
59
+ /**
60
+ * Normalization output
61
+ */
62
+ export interface NormalizedOutput {
63
+ map: Partial<EntityBuckets>;
64
+ ids: (string | number)[];
65
+ }
66
+ /**
67
+ * Entity processing options
68
+ */
69
+ export interface EntityProcessOptions<T> {
70
+ data: T | T[];
71
+ entityKey: string;
72
+ sourceRefId: string;
73
+ isCollection?: boolean;
74
+ }
75
+ /**
76
+ * Persist snapshot shape
77
+ */
78
+ export type EntitiesSnapshot = Record<string, Record<string, any>>;
79
+ /**
80
+ * Public projection (hide meta from DX)
81
+ */
82
+ export type PublicEntity<T> = Omit<T, typeof META>;
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/entities/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,12 @@
1
+ import { createDuck } from './async';
2
+ import { createStoreHooks } from './create-store-hooks';
3
+ import { registerRootStore } from './di';
4
+ import { createEntitySchema } from './entities/create-entity-schema';
5
+ import { createRootStore } from './root';
6
+ export * from './root/coreApi/public';
7
+ export * from './root/public';
8
+ export * from './entities/record/public';
9
+ export * from './entities/collection/public';
10
+ export * from './entities/public';
11
+ export * from './async/public';
12
+ export { registerRootStore, createRootStore, createStoreHooks, createDuck, createEntitySchema, };
package/dist/index.js ADDED
@@ -0,0 +1,13 @@
1
+ import { createDuck } from './async';
2
+ import { createStoreHooks } from './create-store-hooks';
3
+ import { registerRootStore } from './di';
4
+ import { createEntitySchema } from './entities/create-entity-schema';
5
+ import { createRootStore } from './root';
6
+ export * from './root/coreApi/public';
7
+ export * from './root/public';
8
+ export * from './entities/record/public';
9
+ export * from './entities/collection/public';
10
+ export * from './entities/public';
11
+ export * from './async/public';
12
+ export { registerRootStore, createRootStore, createStoreHooks, createDuck, createEntitySchema, };
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AAEzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,eAAe,CAAC;AAC9B,cAAc,0BAA0B,CAAC;AACzC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAE/B,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,gBAAgB,EAChB,UAAU,EACV,kBAAkB,GACnB,CAAC"}
@@ -0,0 +1,24 @@
1
+ import { SET_PERSISTENCE } from './marker';
2
+ import type { CoreAPI } from './coreApi/types';
3
+ import type { RootStoreDeps, StoreClassMap, ServiceClassMap, PersistenceNotifier } from './types';
4
+ import type { AnySchema } from '../entities/types';
5
+ export declare class RootStore<TApi, TSchemaMap extends Record<string, AnySchema>, TStores extends StoreClassMap<any, any>, TServices extends ServiceClassMap<any, any>> {
6
+ private deps;
7
+ core: CoreAPI<{
8
+ [K in keyof TStores]: InstanceType<TStores[K]>;
9
+ }>;
10
+ private entities;
11
+ private entitiesCleaner;
12
+ private persistence?;
13
+ [SET_PERSISTENCE](notifier: PersistenceNotifier): void;
14
+ stores: {
15
+ [K in keyof TStores]: InstanceType<TStores[K]>;
16
+ };
17
+ services: {
18
+ [K in keyof TServices]: InstanceType<TServices[K]>;
19
+ };
20
+ private _isInitialized;
21
+ constructor(deps: RootStoreDeps<TApi, TSchemaMap, TStores, TServices>);
22
+ private get isInitialized();
23
+ private setInitialized;
24
+ }
@@ -0,0 +1,134 @@
1
+ import { makeAutoObservable } from 'mobx';
2
+ import { createStore } from '../create';
3
+ import { EntityCleanerStore } from '../entities/cleaner';
4
+ import { COLLECTION_TAG, MULTI_COLLECTION_TAG, } from '../entities/collection/marker';
5
+ import { RECORD_TAG } from '../entities/record/marker';
6
+ import { EntitiesStore } from '../entities/store';
7
+ import { createCoreAPI } from './coreApi/create-core-api';
8
+ import { noopPersistence } from './fallback';
9
+ import { SET_PERSISTENCE } from './marker';
10
+ export class RootStore {
11
+ [SET_PERSISTENCE](notifier) {
12
+ this.persistence = notifier;
13
+ }
14
+ constructor(deps) {
15
+ this.deps = deps;
16
+ this._isInitialized = false;
17
+ const self = this;
18
+ // ---------------------------------------------
19
+ // Core systems
20
+ // ---------------------------------------------
21
+ this.entities = new EntitiesStore();
22
+ this.entitiesCleaner = new EntityCleanerStore(this.entities, this.deps.schemaMap);
23
+ const storesRef = {};
24
+ this.core = createCoreAPI({
25
+ lifecycle: {
26
+ getIsInitialized: () => self.isInitialized,
27
+ setInitialized: (v) => self.setInitialized(v),
28
+ },
29
+ entities: {
30
+ entities: this.entities,
31
+ entitiesCleaner: this.entitiesCleaner,
32
+ schemaMap: this.deps.schemaMap,
33
+ getPersistence: () => this.persistence ?? noopPersistence,
34
+ },
35
+ stores: storesRef,
36
+ __internal: {
37
+ setPersistence: notifier => {
38
+ this[SET_PERSISTENCE](notifier);
39
+ },
40
+ },
41
+ });
42
+ // ---------------------------------------------
43
+ // Deps
44
+ // ---------------------------------------------
45
+ const domainDeps = {
46
+ api: deps.api,
47
+ get stores() {
48
+ return self.stores;
49
+ },
50
+ get services() {
51
+ return self.services;
52
+ },
53
+ core: this.core,
54
+ };
55
+ const systemDeps = {
56
+ getPersistence: () => this.persistence ?? noopPersistence,
57
+ entities: this.entities,
58
+ };
59
+ const combinedDeps = {
60
+ domain: domainDeps,
61
+ system: systemDeps,
62
+ };
63
+ // ---------------------------------------------
64
+ // Plugins
65
+ // ---------------------------------------------
66
+ const decorators = {
67
+ isRecord: (v) => v?.[RECORD_TAG] === true,
68
+ isCollection: (v) => v?.[COLLECTION_TAG] === true,
69
+ isMultiCollection: (v) => v?.[MULTI_COLLECTION_TAG] === true,
70
+ };
71
+ for (const plugin of this.deps.plugins ?? []) {
72
+ plugin.setup({
73
+ entities: this.entities,
74
+ core: this.core,
75
+ config: plugin.config,
76
+ domain: domainDeps,
77
+ decorators,
78
+ });
79
+ }
80
+ // ---------------------------------------------
81
+ // Build stores
82
+ // ---------------------------------------------
83
+ this.stores = Object.fromEntries(Object.entries(this.deps.stores).map(([key, StoreClass]) => {
84
+ const instance = createStore(StoreClass, combinedDeps);
85
+ return [key, instance];
86
+ }));
87
+ Object.assign(storesRef, this.stores);
88
+ // ---------------------------------------------
89
+ // Build services
90
+ // ---------------------------------------------
91
+ this.services = Object.fromEntries(Object.entries(this.deps.services).map(([key, ServiceClass]) => {
92
+ const instance = new ServiceClass(domainDeps);
93
+ Object.defineProperty(instance, 'deps', {
94
+ enumerable: false,
95
+ configurable: true,
96
+ writable: true,
97
+ });
98
+ return [key, instance];
99
+ }));
100
+ // Hide cyclical getters inside domainDeps
101
+ Object.defineProperty(this, 'deps', {
102
+ enumerable: false,
103
+ configurable: true,
104
+ writable: true,
105
+ });
106
+ Object.defineProperty(domainDeps, 'stores', {
107
+ enumerable: false,
108
+ configurable: true,
109
+ });
110
+ Object.defineProperty(domainDeps, 'services', {
111
+ enumerable: false,
112
+ configurable: true,
113
+ });
114
+ Object.defineProperty(domainDeps, 'core', {
115
+ enumerable: false,
116
+ configurable: true,
117
+ });
118
+ Object.defineProperty(this.core, '__internal', {
119
+ enumerable: false,
120
+ });
121
+ makeAutoObservable(this, {
122
+ core: false,
123
+ services: false,
124
+ stores: false,
125
+ });
126
+ }
127
+ get isInitialized() {
128
+ return this._isInitialized;
129
+ }
130
+ setInitialized(v) {
131
+ this._isInitialized = v;
132
+ }
133
+ }
134
+ //# sourceMappingURL=RootStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RootStore.js","sourceRoot":"","sources":["../../src/root/RootStore.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { CoreAPI, CoreEntitiesDeps, CoreLifecycleDeps, CoreStoresDeps, CoreInternalAPI } from './types';
2
+ export declare function createCoreAPI<TStores extends Record<string, any>>(deps: {
3
+ lifecycle: CoreLifecycleDeps;
4
+ entities: CoreEntitiesDeps;
5
+ stores: CoreStoresDeps<TStores>;
6
+ __internal: CoreInternalAPI;
7
+ }): CoreAPI<TStores>;
@@ -0,0 +1,12 @@
1
+ import { createEntitiesAPI } from './entities';
2
+ import { createLifecycleAPI } from './lifecycle';
3
+ import { createStoresAPI } from './stores';
4
+ export function createCoreAPI(deps) {
5
+ return {
6
+ lifecycle: createLifecycleAPI(deps.lifecycle),
7
+ entities: createEntitiesAPI(deps.entities),
8
+ stores: createStoresAPI(deps.stores),
9
+ __internal: deps.__internal,
10
+ };
11
+ }
12
+ //# sourceMappingURL=create-core-api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-core-api.js","sourceRoot":"","sources":["../../../src/root/coreApi/create-core-api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAU3C,MAAM,UAAU,aAAa,CAAsC,IAKlE;IACC,OAAO;QACL,SAAS,EAAE,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC;QAC7C,QAAQ,EAAE,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC;QAC1C,MAAM,EAAE,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC;QACpC,UAAU,EAAE,IAAI,CAAC,UAAU;KAC5B,CAAC;AACJ,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { EntityCleanerStore } from '../../entities/cleaner';
2
+ import type { TEntitiesStore } from '../../entities/types';
3
+ import type { TSchemaMap, PersistenceNotifier } from '../types';
4
+ import type { CoreEntitiesAPI } from './types';
5
+ export declare function createEntitiesAPI(deps: {
6
+ entities: TEntitiesStore;
7
+ schemaMap: TSchemaMap;
8
+ entitiesCleaner: EntityCleanerStore;
9
+ getPersistence: () => PersistenceNotifier | undefined;
10
+ }): CoreEntitiesAPI;
@@ -0,0 +1,57 @@
1
+ import { createEntityCollection, createMultiEntityCollection, } from '../../entities/collection/create-entity-collection';
2
+ import { createEntityProcessor, createEntityRestorer, } from '../../entities/processor';
3
+ import { createEntityRecord } from '../../entities/record/create-entity-record';
4
+ export function createEntitiesAPI(deps) {
5
+ const { entities, entitiesCleaner, schemaMap, getPersistence } = deps;
6
+ const notify = () => {
7
+ getPersistence?.()?.onPointersChanged?.();
8
+ };
9
+ return {
10
+ createRecord(options) {
11
+ return createEntityRecord(options, {
12
+ entities,
13
+ notify,
14
+ entitiesCleaner,
15
+ entitiesApi: this,
16
+ });
17
+ },
18
+ createCollection(options) {
19
+ return createEntityCollection(options, {
20
+ entities,
21
+ entitiesCleaner,
22
+ notify,
23
+ entitiesApi: this,
24
+ });
25
+ },
26
+ createMultiCollection(options) {
27
+ return createMultiEntityCollection(options, {
28
+ entities,
29
+ entitiesCleaner,
30
+ notify,
31
+ entitiesApi: this,
32
+ });
33
+ },
34
+ process(options) {
35
+ return createEntityProcessor(entities, schemaMap, options);
36
+ },
37
+ hydrate(snapshot) {
38
+ return createEntityRestorer(entities, schemaMap)(snapshot);
39
+ },
40
+ get(key, id) {
41
+ return entities.getEntity(key, id);
42
+ },
43
+ getAll(key) {
44
+ return entities.getAll(key);
45
+ },
46
+ getCount(key) {
47
+ return entities.getCount(key);
48
+ },
49
+ getSnapshot() {
50
+ return entities.getSnapshot;
51
+ },
52
+ getSchema(key) {
53
+ return schemaMap[key];
54
+ },
55
+ };
56
+ }
57
+ //# sourceMappingURL=entities.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entities.js","sourceRoot":"","sources":["../../../src/root/coreApi/entities.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,2BAA2B,GAC5B,MAAM,oDAAoD,CAAC;AAC5D,OAAO,EACL,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,kBAAkB,EAAE,MAAM,4CAA4C,CAAC;AAchF,MAAM,UAAU,iBAAiB,CAAC,IAKjC;IACC,MAAM,EAAE,QAAQ,EAAE,eAAe,EAAE,SAAS,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC;IAEtE,MAAM,MAAM,GAAG,GAAG,EAAE;QAClB,cAAc,EAAE,EAAE,EAAE,iBAAiB,EAAE,EAAE,CAAC;IAC5C,CAAC,CAAC;IAEF,OAAO;QACL,YAAY,CAAuC,OAGlD;YACC,OAAO,kBAAkB,CAAO,OAAO,EAAE;gBACvC,QAAQ;gBACR,MAAM;gBACN,eAAe;gBACf,WAAW,EAAE,IAAI;aAClB,CAAC,CAAC;QACL,CAAC;QAED,gBAAgB,CACd,OAAmC;YAEnC,OAAO,sBAAsB,CAAO,OAAO,EAAE;gBAC3C,QAAQ;gBACR,eAAe;gBACf,MAAM;gBACN,WAAW,EAAE,IAAI;aAClB,CAAC,CAAC;QACL,CAAC;QAED,qBAAqB,CACnB,OAAmC;YAEnC,OAAO,2BAA2B,CAAO,OAAO,EAAE;gBAChD,QAAQ;gBACR,eAAe;gBACf,MAAM;gBACN,WAAW,EAAE,IAAI;aAClB,CAAC,CAAC;QACL,CAAC;QAED,OAAO,CACL,OAAyD;YAEzD,OAAO,qBAAqB,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;QAC7D,CAAC;QAED,OAAO,CAAC,QAA6C;YACnD,OAAO,oBAAoB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC;QAC7D,CAAC;QAED,GAAG,CAAmB,GAAM,EAAE,EAAmB;YAC/C,OAAO,QAAQ,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,CAAQ,CAAC;QAC5C,CAAC;QAED,MAAM,CAAmB,GAAM;YAC7B,OAAO,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAQ,CAAC;QACrC,CAAC;QAED,QAAQ,CAAmB,GAAM;YAC/B,OAAO,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAChC,CAAC;QAED,WAAW;YACT,OAAO,QAAQ,CAAC,WAAW,CAAC;QAC9B,CAAC;QAED,SAAS,CAAsB,GAAS;YACtC,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC;QACxB,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { CoreLifecycleAPI } from './types';
2
+ export declare function createLifecycleAPI(deps: {
3
+ getIsInitialized: () => boolean;
4
+ setInitialized: (v: boolean) => void;
5
+ }): CoreLifecycleAPI;
@@ -0,0 +1,9 @@
1
+ export function createLifecycleAPI(deps) {
2
+ return {
3
+ get isInitialized() {
4
+ return deps.getIsInitialized();
5
+ },
6
+ setInitialized: deps.setInitialized,
7
+ };
8
+ }
9
+ //# sourceMappingURL=lifecycle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../../src/root/coreApi/lifecycle.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,kBAAkB,CAAC,IAGlC;IACC,OAAO;QACL,IAAI,aAAa;YACf,OAAO,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACjC,CAAC;QACD,cAAc,EAAE,IAAI,CAAC,cAAc;KACpC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,71 @@
1
+ import type { EntityCollection } from '../../entities/collection/public';
2
+ import type { MultiEntityCollection } from '../../entities/collection/public';
3
+ import type { EntityId } from '../../entities/public';
4
+ import type { EntityRecord } from '../../entities/record/public';
5
+ /**
6
+ * Snapshot of a single store
7
+ * Shape is store-defined
8
+ */
9
+ export type StoreSnapshot = Record<string, any>;
10
+ /**
11
+ * Snapshot of all stores
12
+ */
13
+ export type StoresSnapshot<TStores> = {
14
+ [K in keyof TStores]?: StoreSnapshot;
15
+ };
16
+ export interface EntityProcessOptions<T> {
17
+ data: T | T[];
18
+ entityKey: string;
19
+ sourceRefId: string;
20
+ isCollection?: boolean;
21
+ }
22
+ export type CoreEntitiesAPI = {
23
+ createRecord<T extends {
24
+ id: EntityId;
25
+ }, M>(options: {
26
+ entityKey: string;
27
+ recordId: string;
28
+ }): EntityRecord<T, M>;
29
+ createCollection<T extends {
30
+ id: EntityId;
31
+ }, M>(options: {
32
+ entityKey: string;
33
+ collectionId?: string;
34
+ limit?: number;
35
+ reversed?: boolean;
36
+ hasNoMore?: boolean;
37
+ }): EntityCollection<T, M>;
38
+ createMultiCollection<T extends {
39
+ id: EntityId;
40
+ }, M>(options: {
41
+ entityKey: string;
42
+ collectionId?: string;
43
+ limit?: number;
44
+ reversed?: boolean;
45
+ hasNoMore?: boolean;
46
+ }): MultiEntityCollection<T, M>;
47
+ process<TDto>(options: EntityProcessOptions<TDto>): EntityId[];
48
+ hydrate(snapshot: Record<string, Record<string, any>> | null | undefined): void;
49
+ get<T = any>(entityKey: string, id: EntityId): T | undefined;
50
+ getAll<T = any>(entityKey: string): T[];
51
+ getCount(entityKey: string): number;
52
+ getSnapshot(): Record<string, any>;
53
+ getSchema(entityKey: string): unknown;
54
+ };
55
+ export type CoreStoresAPI<TStores> = {
56
+ getSnapshot(): StoresSnapshot<TStores>;
57
+ getSnapshotByKey<K extends keyof TStores>(key: K): StoresSnapshot<TStores>[K];
58
+ applySnapshot(snapshot: StoresSnapshot<TStores>): void;
59
+ applySnapshotByKey<K extends keyof TStores>(key: K, snapshot: StoresSnapshot<TStores>[K]): void;
60
+ resetAll(): void;
61
+ resetByKey<K extends keyof TStores>(key: K): void;
62
+ };
63
+ export type CoreLifecycleAPI = {
64
+ readonly isInitialized: boolean;
65
+ setInitialized(v: boolean): void;
66
+ };
67
+ export type CoreAPI<TStores = {}> = {
68
+ lifecycle: CoreLifecycleAPI;
69
+ entities: CoreEntitiesAPI;
70
+ stores: CoreStoresAPI<TStores>;
71
+ };
@@ -0,0 +1,6 @@
1
+ /* ======================================================
2
+ * CORE — PUBLIC API
3
+ * Everything domain stores & services ARE allowed to use
4
+ * ====================================================== */
5
+ export {};
6
+ //# sourceMappingURL=public.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"public.js","sourceRoot":"","sources":["../../../src/root/coreApi/public.ts"],"names":[],"mappings":"AAAA;;;4DAG4D"}
@@ -0,0 +1,2 @@
1
+ import type { CoreStoresAPI } from './types';
2
+ export declare function createStoresAPI<TStores extends Record<string, any>>(stores?: TStores | any): CoreStoresAPI<TStores>;