@libs-ui/pipes-convert-signal-to-object 0.2.356-9 → 0.2.357-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.
package/README.md
CHANGED
|
@@ -1,145 +1,313 @@
|
|
|
1
1
|
# @libs-ui/pipes-convert-signal-to-object
|
|
2
2
|
|
|
3
|
-
>
|
|
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`
|
|
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 là 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, có 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
|
-
|
|
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
|
-
- ✅
|
|
17
|
-
- ✅ Hỗ trợ primitive
|
|
14
|
+
- ✅ Hỗ trợ Map và 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
|
-
|
|
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
|
-
|
|
29
|
+
## Cài đặt
|
|
24
30
|
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
|
|
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
|
-
|
|
33
|
-
const payload = user | LibsUiPipesConvertSignalToObjectPipe;
|
|
34
|
-
// => { name: 'John', settings: { theme: 'dark' } }
|
|
35
|
+
## Import
|
|
35
36
|
|
|
36
|
-
|
|
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
|
-
|
|
48
|
+
## Ví dụ sử dụng
|
|
40
49
|
|
|
41
|
-
|
|
50
|
+
### 1. Unwrap signal object thành plain object (template)
|
|
42
51
|
|
|
43
52
|
```typescript
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
```
|
|
53
|
+
import { Component, signal } from '@angular/core';
|
|
54
|
+
import { LibsUiPipesConvertSignalToObjectPipe } from '@libs-ui/pipes-convert-signal-to-object';
|
|
47
55
|
|
|
48
|
-
|
|
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
|
-
|
|
80
|
+
### 2. Unwrap signal array thành plain array
|
|
51
81
|
|
|
52
82
|
```typescript
|
|
53
|
-
|
|
54
|
-
|
|
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
|
-
|
|
108
|
+
### 3. Unwrap nested signal nhiều cấp
|
|
58
109
|
|
|
59
|
-
```
|
|
60
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
77
|
-
|
|
78
|
-
### 1. Basic Object Unwrap
|
|
161
|
+
### 5. Sử dụng độc lập trong TypeScript (pipe.transform)
|
|
79
162
|
|
|
80
|
-
```
|
|
81
|
-
|
|
163
|
+
```typescript
|
|
164
|
+
import { Component, inject, signal } from '@angular/core';
|
|
165
|
+
import { LibsUiPipesConvertSignalToObjectPipe } from '@libs-ui/pipes-convert-signal-to-object';
|
|
82
166
|
|
|
83
|
-
|
|
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
|
-
###
|
|
190
|
+
### 6. Lưu state vào localStorage
|
|
87
191
|
|
|
88
|
-
```
|
|
89
|
-
|
|
192
|
+
```typescript
|
|
193
|
+
import { Component, inject, signal } from '@angular/core';
|
|
194
|
+
import { LibsUiPipesConvertSignalToObjectPipe } from '@libs-ui/pipes-convert-signal-to-object';
|
|
90
195
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
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
|
-
|
|
216
|
+
}
|
|
96
217
|
```
|
|
97
218
|
|
|
98
|
-
|
|
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
|
-
|
|
226
|
+
**Cú pháp template:**
|
|
101
227
|
|
|
102
228
|
```html
|
|
103
|
-
|
|
229
|
+
{{ dataSignal | LibsUiPipesConvertSignalToObjectPipe }}
|
|
230
|
+
{{ dataSignal | LibsUiPipesConvertSignalToObjectPipe : false }}
|
|
231
|
+
@let plain = (dataSignal | LibsUiPipesConvertSignalToObjectPipe);
|
|
104
232
|
```
|
|
105
233
|
|
|
106
|
-
|
|
234
|
+
**Cú pháp standalone (inject):**
|
|
107
235
|
|
|
108
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
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'; // Có thể ảnh hưởng đến giá trị bên trong signal gốc
|
|
280
|
+
```
|
|
120
281
|
|
|
121
|
-
|
|
282
|
+
## Types & Interfaces
|
|
122
283
|
|
|
123
|
-
|
|
284
|
+
```typescript
|
|
285
|
+
import { LibsUiPipesConvertSignalToObjectPipe } from '@libs-ui/pipes-convert-signal-to-object';
|
|
124
286
|
|
|
125
|
-
|
|
287
|
+
// Pipe transform signature
|
|
288
|
+
// transform(data: any, isCloneDeep?: boolean): any
|
|
126
289
|
|
|
127
|
-
|
|
290
|
+
// Ví 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
|
-
|
|
295
|
+
## Lưu ý quan trọng
|
|
130
296
|
|
|
131
|
-
|
|
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
|
-
|
|
299
|
+
⚠️ **isCloneDeep = false và mutation**: Khi tắt deep clone, việc thay đổi property trên plain object kết quả có 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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
307
|
+
## Demo
|
|
142
308
|
|
|
143
|
-
|
|
309
|
+
```bash
|
|
310
|
+
npx nx serve core-ui
|
|
311
|
+
```
|
|
144
312
|
|
|
145
|
-
|
|
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;
|
|
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.
|
|
3
|
+
"version": "0.2.357-0",
|
|
4
4
|
"peerDependencies": {
|
|
5
5
|
"@angular/core": ">=18.0.0",
|
|
6
|
-
"@libs-ui/utils": "0.2.
|
|
6
|
+
"@libs-ui/utils": "0.2.357-0"
|
|
7
7
|
},
|
|
8
8
|
"sideEffects": false,
|
|
9
9
|
"module": "fesm2022/libs-ui-pipes-convert-signal-to-object.mjs",
|