@libs-ui/pipes-convert-signal-to-object 0.2.356-41 → 0.2.356-43

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.
package/README.md CHANGED
@@ -1,145 +1,313 @@
1
1
  # @libs-ui/pipes-convert-signal-to-object
2
2
 
3
- > Version: `0.2.355-15`
4
- >
5
- > Pipe chuyển đổi cấu trúc Signals lồng nhau thành plain object/value.
3
+ > Pipe chuyển đổi cấu trúc Signals lồng nhau thành plain object/array để sẵn sàng gửi API hoặc tích hợp thư viện bên ngoài.
6
4
 
7
5
  ## Giới thiệu
8
6
 
9
- `LibsUiPipesConvertSignalToObjectPipe` là pipe ngược lại của `convert-object-to-signal`. Nó nhận vào một cấu trúc nested signals (object hoặc array chứa các signals) và unwrap toàn bộ chúng thành plain object/array. Điều này rất hữu ích khi bạn cần chuẩn bị dữ liệu để gửi đi (API call), lưu trữ (LocalStorage), hoặc sử dụng với các thư viện không hỗ trợ Signal.
7
+ `LibsUiPipesConvertSignalToObjectPipe` nhận vào một cấu trúc signal lồng nhau (object hoặc array chứa các signal con) và đệ quy unwrap toàn bộ chúng thành plain object/array. Pipe này cặp đôi ngược lại của `@libs-ui/pipes-convert-object-to-signal`, cho phép chuyển đổi hai chiều giữa dạng signal và plain object. Kết quả đầu ra là một plain object chuẩn, thể serialize bằng `JSON.stringify`, gửi trực tiếp qua HTTP, hoặc truyền cho bất kỳ thư viện nào không hiểu Angular Signal.
10
8
 
11
- ### Tính năng
9
+ ## Tính năng
12
10
 
13
- - ✅ Unwrap nested signals (multi-level)
11
+ - ✅ Unwrap nested signals đệ quy nhiều cấp (multi-level)
14
12
  - ✅ Chuyển đổi Signal Object thành Plain Object
15
13
  - ✅ Chuyển đổi Signal Array thành Plain Array
16
- - ✅ Deep clone kết quả mặc định (an toàn)
17
- - ✅ Hỗ trợ primitive signals
14
+ - ✅ Hỗ trợ Map Set chứa signal
15
+ - ✅ Hỗ trợ primitive signal (string, number, boolean)
16
+ - ✅ Deep clone kết quả mặc định (bảo vệ signal gốc không bị mutate)
17
+ - ✅ Tùy chọn tắt deep clone để tối ưu hiệu năng
18
+ - ✅ Bỏ qua an toàn các đối tượng đặc biệt: Date, RegExp, DOM element, dayjs...
19
+ - ✅ Chống vòng lặp vô hạn với circular reference detection
18
20
 
19
21
  ## Khi nào sử dụng
20
22
 
21
- ### 📤 Gửi data đến API
23
+ - Cần gửi state dạng signal lên API (HTTP POST/PUT) — các HTTP client yêu cầu plain object
24
+ - Cần serialize state sang `JSON.stringify` để lưu vào `localStorage` / `sessionStorage`
25
+ - Tích hợp với thư viện bên ngoài (chart, map, form lib...) chỉ nhận plain object
26
+ - Cần log hoặc debug giá trị thực bên trong một cấu trúc signal phức tạp
27
+ - Chuẩn bị payload trước khi submit form chứa các signal field
22
28
 
23
- Các HTTP client thường yêu cầu plain object. Pipe này giúp bạn chuẩn bị payload dễ dàng:
29
+ ## Cài đặt
24
30
 
25
- ```typescript
26
- // Nested signals state
27
- const user = {
28
- name: signal('John'),
29
- settings: { theme: signal('dark') },
30
- };
31
+ ```bash
32
+ npm install @libs-ui/pipes-convert-signal-to-object
33
+ ```
31
34
 
32
- // Convert to plain object
33
- const payload = user | LibsUiPipesConvertSignalToObjectPipe;
34
- // => { name: 'John', settings: { theme: 'dark' } }
35
+ ## Import
35
36
 
36
- http.post('/api/user', payload);
37
+ ```typescript
38
+ import { LibsUiPipesConvertSignalToObjectPipe } from '@libs-ui/pipes-convert-signal-to-object';
39
+
40
+ @Component({
41
+ standalone: true,
42
+ imports: [LibsUiPipesConvertSignalToObjectPipe],
43
+ // ...
44
+ })
45
+ export class UserFormComponent {}
37
46
  ```
38
47
 
39
- ### 💾 Serialize đến LocalStorage
48
+ ## dụ sử dụng
40
49
 
41
- Signal không thể được serialize trực tiếp bằng `JSON.stringify`. Hãy convert chúng trước:
50
+ ### 1. Unwrap signal object thành plain object (template)
42
51
 
43
52
  ```typescript
44
- const plainData = dataSignal | LibsUiPipesConvertSignalToObjectPipe;
45
- localStorage.setItem('data', JSON.stringify(plainData));
46
- ```
53
+ import { Component, signal } from '@angular/core';
54
+ import { LibsUiPipesConvertSignalToObjectPipe } from '@libs-ui/pipes-convert-signal-to-object';
47
55
 
48
- ### 🔌 Tích hợp External Libraries
56
+ @Component({
57
+ standalone: true,
58
+ imports: [LibsUiPipesConvertSignalToObjectPipe],
59
+ template: `
60
+ @let user = (userSignal | LibsUiPipesConvertSignalToObjectPipe);
61
+ <p>Tên: {{ user.name }}</p>
62
+ <p>Email: {{ user.email }}</p>
63
+ <button (click)="handlerSave(user)">Lưu lên API</button>
64
+ `,
65
+ })
66
+ export class UserFormComponent {
67
+ readonly userSignal = signal({
68
+ name: signal('Nguyễn Văn A'),
69
+ email: signal('nva@example.com'),
70
+ age: signal(28),
71
+ });
72
+
73
+ handlerSave(payload: { name: string; email: string; age: number }): void {
74
+ // payload đã là plain object, sẵn sàng gửi API
75
+ // this.http.post('/api/users', payload).subscribe(...)
76
+ }
77
+ }
78
+ ```
49
79
 
50
- Nhiều thư viện (charting, maps, etc.) chỉ chấp nhận plain JS objects/arrays:
80
+ ### 2. Unwrap signal array thành plain array
51
81
 
52
82
  ```typescript
53
- const chartData = signalsData | LibsUiPipesConvertSignalToObjectPipe;
54
- chart.update(chartData);
83
+ import { Component, signal } from '@angular/core';
84
+ import { LibsUiPipesConvertSignalToObjectPipe } from '@libs-ui/pipes-convert-signal-to-object';
85
+
86
+ @Component({
87
+ standalone: true,
88
+ imports: [LibsUiPipesConvertSignalToObjectPipe],
89
+ template: `
90
+ @let items = (itemsSignal | LibsUiPipesConvertSignalToObjectPipe);
91
+ <ul>
92
+ @for (item of items; track item) {
93
+ <li>{{ item }}</li>
94
+ }
95
+ </ul>
96
+ <p>JSON: {{ items | json }}</p>
97
+ `,
98
+ })
99
+ export class ItemListComponent {
100
+ readonly itemsSignal = signal([
101
+ signal('Táo'),
102
+ signal('Chuối'),
103
+ signal('Cam'),
104
+ ]);
105
+ }
55
106
  ```
56
107
 
57
- ## Cài đặt
108
+ ### 3. Unwrap nested signal nhiều cấp
58
109
 
59
- ```bash
60
- npm install @libs-ui/pipes-convert-signal-to-object
110
+ ```typescript
111
+ import { Component, signal } from '@angular/core';
112
+ import { LibsUiPipesConvertSignalToObjectPipe } from '@libs-ui/pipes-convert-signal-to-object';
113
+
114
+ @Component({
115
+ standalone: true,
116
+ imports: [LibsUiPipesConvertSignalToObjectPipe],
117
+ template: `
118
+ @let company = (companySignal | LibsUiPipesConvertSignalToObjectPipe);
119
+ <p>Công ty: {{ company.name }}</p>
120
+ <p>Giám đốc: {{ company.ceo.name }} ({{ company.ceo.age }} tuổi)</p>
121
+ <pre>{{ company | json }}</pre>
122
+ `,
123
+ })
124
+ export class CompanyDetailComponent {
125
+ readonly companySignal = signal({
126
+ name: signal('Tech Corp'),
127
+ ceo: signal({
128
+ name: signal('Trần Văn B'),
129
+ age: signal(45),
130
+ }),
131
+ });
132
+
133
+ // companySignal | LibsUiPipesConvertSignalToObjectPipe
134
+ // => { name: 'Tech Corp', ceo: { name: 'Trần Văn B', age: 45 } }
135
+ }
61
136
  ```
62
137
 
63
- ## Import
138
+ ### 4. Tắt deep clone để tăng hiệu năng
64
139
 
65
140
  ```typescript
141
+ import { Component, signal } from '@angular/core';
66
142
  import { LibsUiPipesConvertSignalToObjectPipe } from '@libs-ui/pipes-convert-signal-to-object';
67
143
 
68
144
  @Component({
69
145
  standalone: true,
70
146
  imports: [LibsUiPipesConvertSignalToObjectPipe],
71
- // ...
147
+ template: `
148
+ <!-- Truyền false để bỏ qua deep clone — nhanh hơn nhưng không sao chép -->
149
+ @let rawData = (dataSignal | LibsUiPipesConvertSignalToObjectPipe : false);
150
+ <p>{{ rawData.title }}</p>
151
+ `,
72
152
  })
73
- export class YourComponent {}
153
+ export class FastReadComponent {
154
+ readonly dataSignal = signal({
155
+ title: signal('Báo cáo tháng 6'),
156
+ count: signal(120),
157
+ });
158
+ }
74
159
  ```
75
160
 
76
- ## dụ
77
-
78
- ### 1. Basic Object Unwrap
161
+ ### 5. Sử dụng độc lập trong TypeScript (pipe.transform)
79
162
 
80
- ```html
81
- @let user = (userSignal | LibsUiPipesConvertSignalToObjectPipe);
163
+ ```typescript
164
+ import { Component, inject, signal } from '@angular/core';
165
+ import { LibsUiPipesConvertSignalToObjectPipe } from '@libs-ui/pipes-convert-signal-to-object';
82
166
 
83
- <p>User: {{ user.name }}</p>
167
+ @Component({
168
+ standalone: true,
169
+ imports: [LibsUiPipesConvertSignalToObjectPipe],
170
+ providers: [LibsUiPipesConvertSignalToObjectPipe],
171
+ template: `<button (click)="handlerSubmit()">Gửi form</button>`,
172
+ })
173
+ export class OrderFormComponent {
174
+ private readonly convertPipe = inject(LibsUiPipesConvertSignalToObjectPipe);
175
+
176
+ readonly orderSignal = signal({
177
+ productId: signal('P001'),
178
+ quantity: signal(5),
179
+ note: signal('Giao buổi sáng'),
180
+ });
181
+
182
+ handlerSubmit(): void {
183
+ const payload = this.convertPipe.transform(this.orderSignal);
184
+ // payload = { productId: 'P001', quantity: 5, note: 'Giao buổi sáng' }
185
+ // this.orderApi.create(payload).subscribe(...)
186
+ }
187
+ }
84
188
  ```
85
189
 
86
- ### 2. Array Unwrap
190
+ ### 6. Lưu state vào localStorage
87
191
 
88
- ```html
89
- @let items = (itemsSignal | LibsUiPipesConvertSignalToObjectPipe);
192
+ ```typescript
193
+ import { Component, inject, signal } from '@angular/core';
194
+ import { LibsUiPipesConvertSignalToObjectPipe } from '@libs-ui/pipes-convert-signal-to-object';
90
195
 
91
- <ul>
92
- @for (item of items; track $index) {
93
- <li>{{ item }}</li>
196
+ @Component({
197
+ standalone: true,
198
+ imports: [LibsUiPipesConvertSignalToObjectPipe],
199
+ providers: [LibsUiPipesConvertSignalToObjectPipe],
200
+ template: `<button (click)="handlerSaveFilter()">Lưu bộ lọc</button>`,
201
+ })
202
+ export class FilterBarComponent {
203
+ private readonly convertPipe = inject(LibsUiPipesConvertSignalToObjectPipe);
204
+
205
+ readonly filterSignal = signal({
206
+ keyword: signal('angular'),
207
+ status: signal('active'),
208
+ page: signal(1),
209
+ });
210
+
211
+ handlerSaveFilter(): void {
212
+ const plainFilter = this.convertPipe.transform(this.filterSignal);
213
+ // plainFilter = { keyword: 'angular', status: 'active', page: 1 }
214
+ localStorage.setItem('user-filter', JSON.stringify(plainFilter));
94
215
  }
95
- </ul>
216
+ }
96
217
  ```
97
218
 
98
- ### 3. No Clone (Faster)
219
+ ## Transform
220
+
221
+ | Tham số | Type | Bắt buộc | Default | Mô tả |
222
+ |---|---|---|---|---|
223
+ | `data` | `any` | Có | — | Giá trị signal hoặc cấu trúc object/array chứa nested signals cần unwrap |
224
+ | `isCloneDeep` | `boolean` | Không | `true` | `true` để deep clone kết quả (bảo vệ signal gốc); `false` để giữ reference gốc (nhanh hơn, cẩn thận mutate) |
99
225
 
100
- Nếu bạn chắc chắn không mutate kết quả hoặc cần performance tối đa:
226
+ **Cú pháp template:**
101
227
 
102
228
  ```html
103
- @let rawData = (dataSignal | LibsUiPipesConvertSignalToObjectPipe : false);
229
+ {{ dataSignal | LibsUiPipesConvertSignalToObjectPipe }}
230
+ {{ dataSignal | LibsUiPipesConvertSignalToObjectPipe : false }}
231
+ @let plain = (dataSignal | LibsUiPipesConvertSignalToObjectPipe);
104
232
  ```
105
233
 
106
- ## API
234
+ **Cú pháp standalone (inject):**
107
235
 
108
- ### LibsUiPipesConvertSignalToObjectPipe
236
+ ```typescript
237
+ const plain = this.convertPipe.transform(this.dataSignal);
238
+ const plainNoClone = this.convertPipe.transform(this.dataSignal, false);
239
+ ```
240
+
241
+ **Kiểu trả về:** Plain object, plain array, hoặc primitive value sau khi đã unwrap toàn bộ signal con.
242
+
243
+ ## Hành vi chi tiết
244
+
245
+ ### Unwrap đệ quy so với gọi `()`
109
246
 
110
247
  ```typescript
111
- data | LibsUiPipesConvertSignalToObjectPipe : isCloneDeep?
248
+ // Gọi () chỉ unwrap 1 cấp — vẫn còn signal con bên trong
249
+ userSignal()
250
+ // => { name: WritableSignal<string>, age: WritableSignal<number> }
251
+
252
+ // Pipe unwrap toàn bộ tất cả cấp
253
+ userSignal | LibsUiPipesConvertSignalToObjectPipe
254
+ // => { name: 'Nguyễn Văn A', age: 28 }
112
255
  ```
113
256
 
114
- #### Parameters
257
+ ### Quy tắc xử lý theo kiểu dữ liệu
258
+
259
+ | Kiểu input | Hành vi |
260
+ |---|---|
261
+ | `Signal<primitive>` | Unwrap thành giá trị nguyên thủy |
262
+ | `Signal<object>` | Unwrap object, tiếp tục đệ quy vào các property |
263
+ | `Signal<array>` | Unwrap array, tiếp tục đệ quy từng phần tử |
264
+ | `Signal<Map>` | Unwrap thành `Map` mới với values đã unwrap |
265
+ | `Signal<Set>` | Unwrap thành `Set` mới với values đã unwrap |
266
+ | `null` / `undefined` | Trả về nguyên như đầu vào, không throw |
267
+ | `Date`, `RegExp`, DOM element, dayjs | Giữ nguyên, không xử lý |
268
+ | Circular reference | Được phát hiện và xử lý an toàn, không bị stack overflow |
269
+
270
+ ### Deep clone (mặc định `true`)
271
+
272
+ ```typescript
273
+ // isCloneDeep = true (mặc định) — AN TOÀN
274
+ const plain = this.convertPipe.transform(this.dataSignal);
275
+ plain.name = 'Jane'; // Không ảnh hưởng đến this.dataSignal
115
276
 
116
- | Property | Type | Default | Description |
117
- | ------------- | ---------------------- | ------- | --------------------------------------------------------- |
118
- | `data` | `any` | - | Nested signals cần chuyển đổi thành plain object. |
119
- | `isCloneDeep` | `boolean \| undefined` | `true` | `true` để deep clone (an toàn), `false` để giữ reference. |
277
+ // isCloneDeep = false NHANH HƠN nhưng cần cẩn thận
278
+ const plainRef = this.convertPipe.transform(this.dataSignal, false);
279
+ plainRef.name = 'Jane'; // thể ảnh hưởng đến giá trị bên trong signal gốc
280
+ ```
120
281
 
121
- #### Returns
282
+ ## Types & Interfaces
122
283
 
123
- Plain object, array, hoặc primitive value sau khi đã unwrap tất cả signals.
284
+ ```typescript
285
+ import { LibsUiPipesConvertSignalToObjectPipe } from '@libs-ui/pipes-convert-signal-to-object';
124
286
 
125
- ## Hidden Logic
287
+ // Pipe transform signature
288
+ // transform(data: any, isCloneDeep?: boolean): any
126
289
 
127
- ### 1. 🔄 Recursive Unwrap
290
+ // dụ kiểu tường minh khi inject để dùng trong TS
291
+ const result: { name: string; age: number } =
292
+ this.convertPipe.transform<{ name: string; age: number }>(this.userSignal);
293
+ ```
128
294
 
129
- Pipe sẽ đệ quy đi vào mọi property của object/array. Nếu gặp Signal, nó sẽ gọi `()` để lấy giá trị, sau đó tiếp tục đệ quy cho giá trị đó.
295
+ ## Lưu ý quan trọng
130
296
 
131
- ### 2. 🔀 Deep Clone
297
+ ⚠️ **Không serialize trực tiếp Signal**: `JSON.stringify(signal)` sẽ không cho kết quả đúng vì signal là function object. Luôn dùng pipe này trước khi serialize.
132
298
 
133
- Mặc định, kết quả trả về một bản sao deep clone của dữ liệu đã unwrap. Điều này đảm bảo rằng nếu bạn thay đổi property của object kết quả, **KHÔNG** ảnh hưởng ngược lại đến state trong Signal gốc.
299
+ ⚠️ **isCloneDeep = false mutation**: Khi tắt deep clone, việc thay đổi property trên plain object kết quả thể làm thay đổi giá trị bên trong signal gốc không mong muốn. Chỉ dùng `false` khi chắc chắn không mutate kết quả.
134
300
 
135
- ## Demo
301
+ ⚠️ **Đối tượng đặc biệt được giữ nguyên**: `Date`, `RegExp`, dayjs, DOM element và các đối tượng framework sẽ được truyền nguyên vẹn mà không bị unwrap, đảm bảo không mất dữ liệu.
136
302
 
137
- - **Local Development**: [http://localhost:4500/pipes/convert-signal-to-object](http://localhost:4500/pipes/convert-signal-to-object)
303
+ ⚠️ **Pipe chỉ unwrap — không làm reactive**: Kết quả trả về là snapshot tại thời điểm pipe chạy. Nếu signal thay đổi sau đó, cần pipe chạy lại (Angular change detection sẽ tự kích hoạt trong template với OnPush khi signal thay đổi).
138
304
 
139
- ## Unit Tests
305
+ ⚠️ **Dùng với inject khi cần trong TypeScript**: Để dùng ngoài template, khai báo trong `providers` của component và inject bằng `inject(LibsUiPipesConvertSignalToObjectPipe)`.
140
306
 
141
- Xem file `test-commands.md` để biết cách chạy unit tests.
307
+ ## Demo
142
308
 
143
- ## License
309
+ ```bash
310
+ npx nx serve core-ui
311
+ ```
144
312
 
145
- MIT
313
+ Truy cập: http://localhost:4500/pipes/convert-signal-to-object
@@ -1 +1 @@
1
- {"version":3,"file":"libs-ui-pipes-convert-signal-to-object.mjs","sources":["../../../../../libs-ui/pipes/convert-signal-to-object/src/convert-signal-to-object.pipe.ts","../../../../../libs-ui/pipes/convert-signal-to-object/src/libs-ui-pipes-convert-signal-to-object.ts"],"sourcesContent":["import { Pipe, PipeTransform } from '@angular/core';\nimport { convertSignalToObject } from '@libs-ui/utils';\n@Pipe({\n name: 'LibsUiPipesConvertSignalToObjectPipe',\n standalone: true,\n})\nexport class LibsUiPipesConvertSignalToObjectPipe implements PipeTransform {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n transform(data: any, isCloneDeep?: boolean): any {\n if (!data) {\n return data;\n }\n\n return convertSignalToObject(data, isCloneDeep);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;MAMa,oCAAoC,CAAA;;IAE/C,SAAS,CAAC,IAAS,EAAE,WAAqB,EAAA;QACxC,IAAI,CAAC,IAAI,EAAE;AACT,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,OAAO,qBAAqB,CAAC,IAAI,EAAE,WAAW,CAAC;IACjD;wGARW,oCAAoC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;sGAApC,oCAAoC,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,sCAAA,EAAA,CAAA;;4FAApC,oCAAoC,EAAA,UAAA,EAAA,CAAA;kBAJhD,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,sCAAsC;AAC5C,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA;;;ACLD;;AAEG;;;;"}
1
+ {"version":3,"file":"libs-ui-pipes-convert-signal-to-object.mjs","sources":["../../../../../libs-ui/pipes/convert-signal-to-object/src/convert-signal-to-object.pipe.ts","../../../../../libs-ui/pipes/convert-signal-to-object/src/libs-ui-pipes-convert-signal-to-object.ts"],"sourcesContent":["import { Pipe, PipeTransform } from '@angular/core';\nimport { convertSignalToObject } from '@libs-ui/utils';\n@Pipe({\n name: 'LibsUiPipesConvertSignalToObjectPipe',\n standalone: true,\n})\nexport class LibsUiPipesConvertSignalToObjectPipe implements PipeTransform {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n transform(data: any, isCloneDeep?: boolean): any {\n if (!data) {\n return data;\n }\n\n return convertSignalToObject(data, isCloneDeep);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;MAMa,oCAAoC,CAAA;;IAE/C,SAAS,CAAC,IAAS,EAAE,WAAqB,EAAA;QACxC,IAAI,CAAC,IAAI,EAAE;AACT,YAAA,OAAO,IAAI,CAAC;SACb;AAED,QAAA,OAAO,qBAAqB,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;KACjD;wGARU,oCAAoC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;sGAApC,oCAAoC,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,sCAAA,EAAA,CAAA,CAAA;;4FAApC,oCAAoC,EAAA,UAAA,EAAA,CAAA;kBAJhD,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,sCAAsC;AAC5C,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA,CAAA;;;ACLD;;AAEG;;;;"}
package/package.json CHANGED
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "name": "@libs-ui/pipes-convert-signal-to-object",
3
- "version": "0.2.356-41",
3
+ "version": "0.2.356-43",
4
4
  "peerDependencies": {
5
5
  "@angular/core": ">=18.0.0",
6
- "@libs-ui/utils": "0.2.356-41"
6
+ "@libs-ui/utils": "0.2.356-43"
7
7
  },
8
8
  "sideEffects": false,
9
9
  "module": "fesm2022/libs-ui-pipes-convert-signal-to-object.mjs",