@marianmeres/ecsuite 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/AGENTS.md +218 -0
  2. package/API.md +865 -0
  3. package/LICENSE +21 -0
  4. package/README.md +149 -0
  5. package/dist/adapters/mock/cart.d.ts +20 -0
  6. package/dist/adapters/mock/cart.js +86 -0
  7. package/dist/adapters/mock/customer.d.ts +20 -0
  8. package/dist/adapters/mock/customer.js +58 -0
  9. package/dist/adapters/mock/mod.d.ts +9 -0
  10. package/dist/adapters/mock/mod.js +9 -0
  11. package/dist/adapters/mock/order.d.ts +20 -0
  12. package/dist/adapters/mock/order.js +66 -0
  13. package/dist/adapters/mock/payment.d.ts +20 -0
  14. package/dist/adapters/mock/payment.js +55 -0
  15. package/dist/adapters/mock/product.d.ts +25 -0
  16. package/dist/adapters/mock/product.js +60 -0
  17. package/dist/adapters/mock/wishlist.d.ts +20 -0
  18. package/dist/adapters/mock/wishlist.js +70 -0
  19. package/dist/adapters/mod.d.ts +6 -0
  20. package/dist/adapters/mod.js +6 -0
  21. package/dist/domains/base.d.ts +83 -0
  22. package/dist/domains/base.js +187 -0
  23. package/dist/domains/cart.d.ts +96 -0
  24. package/dist/domains/cart.js +287 -0
  25. package/dist/domains/customer.d.ts +74 -0
  26. package/dist/domains/customer.js +183 -0
  27. package/dist/domains/mod.d.ts +13 -0
  28. package/dist/domains/mod.js +13 -0
  29. package/dist/domains/order.d.ts +83 -0
  30. package/dist/domains/order.js +233 -0
  31. package/dist/domains/payment.d.ts +83 -0
  32. package/dist/domains/payment.js +175 -0
  33. package/dist/domains/product.d.ts +130 -0
  34. package/dist/domains/product.js +241 -0
  35. package/dist/domains/wishlist.d.ts +101 -0
  36. package/dist/domains/wishlist.js +256 -0
  37. package/dist/mod.d.ts +28 -0
  38. package/dist/mod.js +32 -0
  39. package/dist/suite.d.ts +115 -0
  40. package/dist/suite.js +168 -0
  41. package/dist/types/adapter.d.ts +77 -0
  42. package/dist/types/adapter.js +7 -0
  43. package/dist/types/events.d.ts +111 -0
  44. package/dist/types/events.js +7 -0
  45. package/dist/types/mod.d.ts +9 -0
  46. package/dist/types/mod.js +9 -0
  47. package/dist/types/state.d.ts +61 -0
  48. package/dist/types/state.js +7 -0
  49. package/package.json +28 -0
package/AGENTS.md ADDED
@@ -0,0 +1,218 @@
1
+ # AGENTS.md - @marianmeres/ecsuite
2
+
3
+ Machine-readable documentation for AI coding assistants.
4
+
5
+ ## Package Overview
6
+
7
+ ```yaml
8
+ name: "@marianmeres/ecsuite"
9
+ version: "1.0.0"
10
+ type: "library"
11
+ language: "typescript"
12
+ runtime: "deno"
13
+ npm_compatible: true
14
+ license: "MIT"
15
+ ```
16
+
17
+ ## Purpose
18
+
19
+ E-commerce frontend UI state management library providing:
20
+ - Optimistic updates with automatic rollback
21
+ - Svelte-compatible reactive stores
22
+ - Pluggable adapter pattern for server communication
23
+ - Pub/sub event system
24
+ - Local persistence for cart/wishlist
25
+
26
+ ## Architecture
27
+
28
+ ```
29
+ ECSuite (orchestrator)
30
+ ├── CartManager [localStorage, optimistic updates]
31
+ ├── WishlistManager [localStorage, optimistic updates]
32
+ ├── OrderManager [server-only, read + create]
33
+ ├── CustomerManager [server-only, read + update]
34
+ ├── PaymentManager [server-only, read-only]
35
+ └── ProductManager [in-memory cache with TTL]
36
+ ```
37
+
38
+ ## Directory Structure
39
+
40
+ ```
41
+ src/
42
+ ├── mod.ts # Main entry point
43
+ ├── suite.ts # ECSuite orchestrator
44
+ ├── types/
45
+ │ ├── mod.ts # Type re-exports
46
+ │ ├── adapter.ts # Adapter interfaces
47
+ │ ├── events.ts # Event types
48
+ │ └── state.ts # State types
49
+ ├── domains/
50
+ │ ├── mod.ts # Domain re-exports
51
+ │ ├── base.ts # BaseDomainManager abstract class
52
+ │ ├── cart.ts # CartManager
53
+ │ ├── wishlist.ts # WishlistManager
54
+ │ ├── order.ts # OrderManager
55
+ │ ├── customer.ts # CustomerManager
56
+ │ ├── payment.ts # PaymentManager
57
+ │ └── product.ts # ProductManager
58
+ └── adapters/
59
+ ├── mod.ts # Adapter exports
60
+ └── mock/ # Mock adapters for testing
61
+ ├── mod.ts
62
+ ├── cart.ts
63
+ ├── wishlist.ts
64
+ ├── order.ts
65
+ ├── customer.ts
66
+ ├── payment.ts
67
+ └── product.ts
68
+ tests/
69
+ ├── cart.test.ts
70
+ ├── wishlist.test.ts
71
+ ├── order.test.ts
72
+ ├── customer.test.ts
73
+ ├── payment.test.ts
74
+ ├── product.test.ts
75
+ └── ecsuite.test.ts
76
+ ```
77
+
78
+ ## Key Exports
79
+
80
+ ```typescript
81
+ // Main
82
+ export { ECSuite, createECSuite, ECSuiteConfig } from "./suite.ts";
83
+
84
+ // Types
85
+ export {
86
+ DomainState, DomainError, DomainStateWrapper, DomainContext,
87
+ WishlistItem, WishlistData, EnrichedCartItem, EnrichedWishlistItem,
88
+ AdapterResult, CartAdapter, WishlistAdapter, OrderAdapter,
89
+ CustomerAdapter, PaymentAdapter, ProductAdapter, OrderCreatePayload,
90
+ DomainName, ECSuiteEventType, ECSuiteEvent, /* ...event interfaces */
91
+ } from "./types/mod.ts";
92
+
93
+ // Domain Managers
94
+ export {
95
+ BaseDomainManager, BaseDomainOptions, StorageType,
96
+ CartManager, CartManagerOptions,
97
+ WishlistManager, WishlistManagerOptions,
98
+ OrderManager, OrderManagerOptions, OrderListData,
99
+ CustomerManager, CustomerManagerOptions,
100
+ PaymentManager, PaymentManagerOptions, PaymentListData,
101
+ ProductManager, ProductManagerOptions,
102
+ } from "./domains/mod.ts";
103
+
104
+ // Mock Adapters
105
+ export {
106
+ createMockCartAdapter, MockCartAdapterOptions,
107
+ createMockWishlistAdapter, MockWishlistAdapterOptions,
108
+ createMockOrderAdapter, MockOrderAdapterOptions,
109
+ createMockCustomerAdapter, MockCustomerAdapterOptions,
110
+ createMockPaymentAdapter, MockPaymentAdapterOptions,
111
+ createMockProductAdapter, MockProductAdapterOptions,
112
+ } from "./adapters/mod.ts";
113
+ ```
114
+
115
+ ## State Machine
116
+
117
+ ```
118
+ State transitions:
119
+ initializing -> ready
120
+ ready -> syncing
121
+ syncing -> ready (success)
122
+ syncing -> error (failure with rollback)
123
+ error -> syncing (retry)
124
+ ```
125
+
126
+ ## Common Patterns
127
+
128
+ ### Creating Suite
129
+
130
+ ```typescript
131
+ const suite = createECSuite({
132
+ context: { customerId: "uuid" },
133
+ adapters: { cart: myCartAdapter },
134
+ storage: { type: "local" },
135
+ productCacheTtl: 300000,
136
+ autoInitialize: true,
137
+ });
138
+ ```
139
+
140
+ ### Subscribing to Store (Svelte-compatible)
141
+
142
+ ```typescript
143
+ suite.cart.subscribe((state) => {
144
+ // state: { state, data, error, lastSyncedAt }
145
+ });
146
+ ```
147
+
148
+ ### Event Handling
149
+
150
+ ```typescript
151
+ suite.on("cart:item:added", (event) => { /* ... */ });
152
+ suite.onAny(({ event, data }) => { /* ... */ });
153
+ suite.once("order:created", (event) => { /* ... */ });
154
+ ```
155
+
156
+ ### Implementing Adapter
157
+
158
+ ```typescript
159
+ const myAdapter: CartAdapter = {
160
+ async fetch(ctx) {
161
+ return { success: true, data: cartData };
162
+ // or { success: false, error: { code, message } }
163
+ },
164
+ // ... other methods
165
+ };
166
+ ```
167
+
168
+ ## Dependencies
169
+
170
+ ```yaml
171
+ runtime:
172
+ "@marianmeres/clog": "^3.15.0"
173
+ "@marianmeres/collection-types": "^1.9.0"
174
+ "@marianmeres/pubsub": "^2.4.5"
175
+ "@marianmeres/store": "^2.4.2"
176
+ dev:
177
+ "@std/assert": "^1.0.16"
178
+ "@std/fs": "^1.0.20"
179
+ "@std/path": "^1.1.3"
180
+ ```
181
+
182
+ ## Testing
183
+
184
+ ```bash
185
+ deno test # Run all tests
186
+ deno test --watch # Watch mode
187
+ ```
188
+
189
+ Test utilities:
190
+ - Mock adapters with configurable delay and error injection
191
+ - Memory storage type for isolated tests
192
+
193
+ ## Build
194
+
195
+ ```bash
196
+ deno task npm:build # Build for npm
197
+ deno task npm:publish # Build and publish to npm
198
+ deno publish # Publish to JSR
199
+ ```
200
+
201
+ ## Code Style
202
+
203
+ - Tabs for indentation
204
+ - 90 character line width
205
+ - TypeScript strict mode
206
+ - JSDoc for all public API
207
+
208
+ ## Important Implementation Details
209
+
210
+ 1. **Optimistic Updates**: `_withOptimisticUpdate()` in BaseDomainManager captures previous state before mutation, rolls back on server error.
211
+
212
+ 2. **Persistence**: Cart and Wishlist use `@marianmeres/store` with `createStoragePersistor()` for localStorage/sessionStorage.
213
+
214
+ 3. **ProductManager**: Does NOT extend BaseDomainManager. Uses simple Map cache with TTL instead of state machine.
215
+
216
+ 4. **Event System**: Shared PubSub instance passed through ECSuite constructor. Events typed with discriminated union.
217
+
218
+ 5. **Context**: DomainContext (customerId, sessionId) passed to all adapter methods for server-side identification.