@warriorteam/redai-zalo-sdk 1.28.0 → 1.29.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/CHANGELOG.md +62 -0
- package/ZNS-TYPE-IMPROVEMENTS.md +220 -0
- package/dist/services/zns.service.d.ts.map +1 -1
- package/dist/services/zns.service.js +145 -157
- package/dist/services/zns.service.js.map +1 -1
- package/dist/types/zns.d.ts +95 -0
- package/dist/types/zns.d.ts.map +1 -1
- package/examples/zns-validation-example.ts +362 -0
- package/package.json +10 -4
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,68 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
|
|
5
|
+
## [1.29.0] - 2025-01-05
|
|
6
|
+
|
|
7
|
+
### 🚀 Major Type Safety Improvements
|
|
8
|
+
|
|
9
|
+
#### ZNS Service Type Safety Enhancement
|
|
10
|
+
- **Feature**: Completely removed `any` types from ZNS Service validation functions
|
|
11
|
+
- **Impact**: Full type safety for all ZNS template components and validation
|
|
12
|
+
- **Benefits**: Better IDE support, compile-time error detection, improved developer experience
|
|
13
|
+
|
|
14
|
+
#### New Type Definitions Added
|
|
15
|
+
- `ZNSValidationComponent` - Union type for all ZNS components
|
|
16
|
+
- `ZNSTitleComponent` - Type-safe TITLE component (9-65 chars, max 4 params)
|
|
17
|
+
- `ZNSParagraphComponent` - Type-safe PARAGRAPH component (9-400 chars, max 10 params)
|
|
18
|
+
- `ZNSOTPComponent` - Type-safe OTP component (1-10 chars)
|
|
19
|
+
- `ZNSTableComponent` & `ZNSTableRow` - Type-safe TABLE component (2-8 rows)
|
|
20
|
+
- `ZNSLogoComponent` - Type-safe LOGO component with light/dark attachments
|
|
21
|
+
- `ZNSImagesComponent` - Type-safe IMAGES component (1-3 attachments)
|
|
22
|
+
- `ZNSButtonsComponent` & `ZNSButtonItem` - Type-safe BUTTONS component (1-2 buttons)
|
|
23
|
+
- `ZNSPaymentComponent` - Type-safe PAYMENT component with bank details
|
|
24
|
+
- `ZNSVoucherComponent` - Type-safe VOUCHER component with display options
|
|
25
|
+
- `ZNSRatingComponent` & `ZNSRatingItem` - Type-safe RATING component (exactly 5 items)
|
|
26
|
+
- `ZNSAttachment` - Type-safe attachment object for images
|
|
27
|
+
|
|
28
|
+
#### Updated Validation Functions
|
|
29
|
+
All validation functions now use specific types instead of `any`:
|
|
30
|
+
- `validateLayoutStructure()` - Uses `ZNSValidationComponent[]`
|
|
31
|
+
- `validateTitleComponent()` - Uses `ZNSTitleComponent`
|
|
32
|
+
- `validateParagraphComponent()` - Uses `ZNSParagraphComponent`
|
|
33
|
+
- `validateOTPComponent()` - Uses `ZNSOTPComponent`
|
|
34
|
+
- `validateTableComponent()` - Uses `ZNSTableComponent`
|
|
35
|
+
- `validateLogoComponent()` - Uses `ZNSLogoComponent`
|
|
36
|
+
- `validateImagesComponent()` - Uses `ZNSImagesComponent`
|
|
37
|
+
- `validateButtonsComponent()` - Uses `ZNSButtonsComponent`
|
|
38
|
+
- `validatePaymentComponent()` - Uses `ZNSPaymentComponent`
|
|
39
|
+
- `validateVoucherComponent()` - Uses `ZNSVoucherComponent`
|
|
40
|
+
- `validateRatingComponent()` - Uses `ZNSRatingComponent`
|
|
41
|
+
- `validateAttachment()` - Uses `ZNSAttachment`
|
|
42
|
+
|
|
43
|
+
#### Developer Experience Improvements
|
|
44
|
+
- **IntelliSense**: Full autocomplete support for all ZNS components
|
|
45
|
+
- **Error Detection**: Compile-time validation of component structures
|
|
46
|
+
- **Type Safety**: Eliminated runtime errors from incorrect component usage
|
|
47
|
+
- **Documentation**: Type definitions serve as inline documentation
|
|
48
|
+
|
|
49
|
+
#### Files Added/Modified
|
|
50
|
+
- `src/types/zns.ts` - Added comprehensive component type definitions
|
|
51
|
+
- `src/services/zns.service.ts` - Updated all validation functions with proper types
|
|
52
|
+
- `examples/zns-validation-example.ts` - Complete usage examples for all template types
|
|
53
|
+
- `ZNS-TYPE-IMPROVEMENTS.md` - Detailed documentation of improvements
|
|
54
|
+
|
|
55
|
+
#### Migration Guide
|
|
56
|
+
Existing code continues to work, but developers can now benefit from:
|
|
57
|
+
```typescript
|
|
58
|
+
// Before: No type safety
|
|
59
|
+
const component: any = { TITLE: { value: "Hello" } };
|
|
60
|
+
|
|
61
|
+
// After: Full type safety
|
|
62
|
+
const component: ZNSValidationComponent = {
|
|
63
|
+
TITLE: { value: "Hello {{customer_name}}!" }
|
|
64
|
+
};
|
|
65
|
+
```
|
|
66
|
+
|
|
5
67
|
## [1.27.3] - 2025-08-31
|
|
6
68
|
|
|
7
69
|
### 🐛 Critical Bug Fixes
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
# ZNS Service Type Improvements
|
|
2
|
+
|
|
3
|
+
## Tổng quan
|
|
4
|
+
|
|
5
|
+
Đã cập nhật ZNS Service để sử dụng các type cụ thể thay vì `any` type, cải thiện type safety và developer experience.
|
|
6
|
+
|
|
7
|
+
## Những thay đổi chính
|
|
8
|
+
|
|
9
|
+
### 1. Thêm các interface validation components mới trong `src/types/zns.ts`
|
|
10
|
+
|
|
11
|
+
```typescript
|
|
12
|
+
// Attachment object cho LOGO và IMAGES
|
|
13
|
+
export interface ZNSAttachment {
|
|
14
|
+
type: "IMAGE";
|
|
15
|
+
media_id: string;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
// TITLE component
|
|
19
|
+
export interface ZNSTitleComponent {
|
|
20
|
+
value: string; // 9-65 ký tự, tối đa 4 params
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
// PARAGRAPH component
|
|
24
|
+
export interface ZNSParagraphComponent {
|
|
25
|
+
value: string; // 9-400 ký tự, tối đa 10 params
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
// OTP component
|
|
29
|
+
export interface ZNSOTPComponent {
|
|
30
|
+
value: string; // 1-10 ký tự
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
// TABLE component
|
|
34
|
+
export interface ZNSTableComponent {
|
|
35
|
+
rows: ZNSTableRow[]; // 2-8 rows
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export interface ZNSTableRow {
|
|
39
|
+
title: string; // 3-36 ký tự, chỉ text cố định
|
|
40
|
+
value: string; // 3-90 ký tự, có thể có params
|
|
41
|
+
row_type?: 0 | 1 | 2 | 3 | 4 | 5; // Hiệu ứng row
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// LOGO component
|
|
45
|
+
export interface ZNSLogoComponent {
|
|
46
|
+
light: ZNSAttachment;
|
|
47
|
+
dark: ZNSAttachment;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
// IMAGES component
|
|
51
|
+
export interface ZNSImagesComponent {
|
|
52
|
+
items: ZNSAttachment[]; // 1-3 attachments
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// BUTTONS component
|
|
56
|
+
export interface ZNSButtonsComponent {
|
|
57
|
+
items: ZNSButtonItem[]; // 1-2 buttons
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export interface ZNSButtonItem {
|
|
61
|
+
type: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9; // Button types
|
|
62
|
+
title: string; // 5-30 ký tự, chỉ text cố định
|
|
63
|
+
content: string; // URL/phone, có thể có params
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// PAYMENT component
|
|
67
|
+
export interface ZNSPaymentComponent {
|
|
68
|
+
bank_code: string; // Bank code cố định
|
|
69
|
+
account_name: string; // 1-100 ký tự, text cố định
|
|
70
|
+
bank_account: string; // 1-100 ký tự, text cố định
|
|
71
|
+
amount: string | number; // Số tiền hoặc param
|
|
72
|
+
note?: string; // 1-90 ký tự, có thể có params
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
// VOUCHER component
|
|
76
|
+
export interface ZNSVoucherComponent {
|
|
77
|
+
name: string; // 1-30 ký tự, có thể có params
|
|
78
|
+
condition: string; // 1-40 ký tự, có thể có params
|
|
79
|
+
start_date?: string; // Có thể có params
|
|
80
|
+
end_date: string; // Có thể có params
|
|
81
|
+
voucher_code: string; // 1-25 ký tự, có thể có params
|
|
82
|
+
display_code?: 1 | 2 | 3; // QR code, Bar code, Text only
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
// RATING component
|
|
86
|
+
export interface ZNSRatingComponent {
|
|
87
|
+
items: ZNSRatingItem[]; // Đúng 5 items
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
export interface ZNSRatingItem {
|
|
91
|
+
star: 1 | 2 | 3 | 4 | 5; // Số sao
|
|
92
|
+
title: string; // 1-50 ký tự
|
|
93
|
+
question?: string; // 1-100 ký tự
|
|
94
|
+
answers?: string[]; // 1-5 câu trả lời, mỗi câu 1-50 ký tự
|
|
95
|
+
thanks: string; // 1-100 ký tự
|
|
96
|
+
description: string; // 1-200 ký tự
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
// Union type cho tất cả các component
|
|
100
|
+
export type ZNSValidationComponent =
|
|
101
|
+
| { TITLE: ZNSTitleComponent }
|
|
102
|
+
| { PARAGRAPH: ZNSParagraphComponent }
|
|
103
|
+
| { OTP: ZNSOTPComponent }
|
|
104
|
+
| { TABLE: ZNSTableComponent }
|
|
105
|
+
| { LOGO: ZNSLogoComponent }
|
|
106
|
+
| { IMAGES: ZNSImagesComponent }
|
|
107
|
+
| { BUTTONS: ZNSButtonsComponent }
|
|
108
|
+
| { PAYMENT: ZNSPaymentComponent }
|
|
109
|
+
| { VOUCHER: ZNSVoucherComponent }
|
|
110
|
+
| { RATING: ZNSRatingComponent };
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
### 2. Cập nhật ZNS Service validation functions
|
|
114
|
+
|
|
115
|
+
Tất cả các function validation trong `src/services/zns.service.ts` đã được cập nhật để sử dụng type cụ thể:
|
|
116
|
+
|
|
117
|
+
- `validateLayoutStructure()`: Sử dụng `ZNSValidationComponent[]` thay vì `any[]`
|
|
118
|
+
- `isHeaderComponent()`, `isBodyComponent()`, `isFooterComponent()`: Sử dụng `ZNSValidationComponent`
|
|
119
|
+
- `validateComponent()`: Sử dụng `ZNSValidationComponent`
|
|
120
|
+
- `validateTitleComponent()`: Sử dụng `ZNSTitleComponent`
|
|
121
|
+
- `validateParagraphComponent()`: Sử dụng `ZNSParagraphComponent`
|
|
122
|
+
- `validateOTPComponent()`: Sử dụng `ZNSOTPComponent`
|
|
123
|
+
- `validateTableComponent()`: Sử dụng `ZNSTableComponent`
|
|
124
|
+
- `validateLogoComponent()`: Sử dụng `ZNSLogoComponent`
|
|
125
|
+
- `validateImagesComponent()`: Sử dụng `ZNSImagesComponent`
|
|
126
|
+
- `validateButtonsComponent()`: Sử dụng `ZNSButtonsComponent`
|
|
127
|
+
- `validatePaymentComponent()`: Sử dụng `ZNSPaymentComponent`
|
|
128
|
+
- `validateVoucherComponent()`: Sử dụng `ZNSVoucherComponent`
|
|
129
|
+
- `validateRatingComponent()`: Sử dụng `ZNSRatingComponent`
|
|
130
|
+
- `validateAttachment()`: Sử dụng `ZNSAttachment`
|
|
131
|
+
|
|
132
|
+
### 3. Lợi ích của việc cập nhật
|
|
133
|
+
|
|
134
|
+
#### Type Safety
|
|
135
|
+
- Loại bỏ hoàn toàn việc sử dụng `any` type
|
|
136
|
+
- IDE có thể detect lỗi type ngay khi code
|
|
137
|
+
- Autocomplete tốt hơn khi viết code
|
|
138
|
+
|
|
139
|
+
#### Developer Experience
|
|
140
|
+
- IntelliSense hiển thị đúng các property có sẵn
|
|
141
|
+
- Validation tự động khi compile TypeScript
|
|
142
|
+
- Dễ dàng refactor code mà không lo lỗi runtime
|
|
143
|
+
|
|
144
|
+
#### Maintainability
|
|
145
|
+
- Code dễ đọc và hiểu hơn
|
|
146
|
+
- Ít bug hơn do type checking
|
|
147
|
+
- Dễ dàng thêm feature mới
|
|
148
|
+
|
|
149
|
+
### 4. Ví dụ sử dụng
|
|
150
|
+
|
|
151
|
+
Xem file `examples/zns-validation-example.ts` để biết cách sử dụng các type mới.
|
|
152
|
+
|
|
153
|
+
#### Trước khi cập nhật:
|
|
154
|
+
```typescript
|
|
155
|
+
// Không có type safety
|
|
156
|
+
private validateTitleComponent(title: any): void {
|
|
157
|
+
if (!title.value || typeof title.value !== 'string') {
|
|
158
|
+
// Có thể có lỗi runtime nếu title không đúng cấu trúc
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
#### Sau khi cập nhật:
|
|
164
|
+
```typescript
|
|
165
|
+
// Type safety đầy đủ
|
|
166
|
+
private validateTitleComponent(title: ZNSTitleComponent): void {
|
|
167
|
+
if (!title.value || typeof title.value !== 'string') {
|
|
168
|
+
// IDE sẽ báo lỗi ngay nếu title không đúng type
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
### 5. Cách sử dụng trong dự án
|
|
174
|
+
|
|
175
|
+
```typescript
|
|
176
|
+
import {
|
|
177
|
+
ZNSValidationComponent,
|
|
178
|
+
ZNSTitleComponent,
|
|
179
|
+
ZNSButtonsComponent
|
|
180
|
+
} from "./src/types/zns";
|
|
181
|
+
|
|
182
|
+
// Tạo component với type safety
|
|
183
|
+
const titleComponent: ZNSValidationComponent = {
|
|
184
|
+
TITLE: {
|
|
185
|
+
value: "Xin chào {{customer_name}}!"
|
|
186
|
+
}
|
|
187
|
+
};
|
|
188
|
+
|
|
189
|
+
const buttonsComponent: ZNSValidationComponent = {
|
|
190
|
+
BUTTONS: {
|
|
191
|
+
items: [
|
|
192
|
+
{
|
|
193
|
+
type: 1, // URL
|
|
194
|
+
title: "Xem chi tiết",
|
|
195
|
+
content: "https://example.com"
|
|
196
|
+
}
|
|
197
|
+
]
|
|
198
|
+
}
|
|
199
|
+
};
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
### 6. Migration Guide
|
|
203
|
+
|
|
204
|
+
Nếu bạn đang sử dụng code cũ với `any` type:
|
|
205
|
+
|
|
206
|
+
1. Import các type mới từ `src/types/zns`
|
|
207
|
+
2. Thay thế `any` bằng type cụ thể tương ứng
|
|
208
|
+
3. TypeScript compiler sẽ báo lỗi nếu có vấn đề về type
|
|
209
|
+
4. Fix các lỗi type để đảm bảo code chạy đúng
|
|
210
|
+
|
|
211
|
+
### 7. Kết luận
|
|
212
|
+
|
|
213
|
+
Việc cập nhật này giúp:
|
|
214
|
+
- ✅ Loại bỏ hoàn toàn `any` type
|
|
215
|
+
- ✅ Cải thiện type safety
|
|
216
|
+
- ✅ Tăng developer experience
|
|
217
|
+
- ✅ Giảm bugs và lỗi runtime
|
|
218
|
+
- ✅ Code dễ maintain hơn
|
|
219
|
+
|
|
220
|
+
Tất cả validation functions trong ZNS Service giờ đây đều có type safety đầy đủ và tuân thủ đúng chuẩn TypeScript best practices.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zns.service.d.ts","sourceRoot":"","sources":["../../src/services/zns.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"zns.service.d.ts","sourceRoot":"","sources":["../../src/services/zns.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEpD,OAAO,EACL,UAAU,EACV,aAAa,EAEb,eAAe,EACf,kBAAkB,EAClB,wBAAwB,EACxB,wBAAwB,EACxB,6BAA6B,EAC7B,oBAAoB,EACpB,mBAAmB,EACnB,iBAAiB,EACjB,aAAa,EACb,iBAAiB,EACjB,oBAAoB,EACpB,YAAY,EACZ,sBAAsB,EACtB,qBAAqB,EACrB,yBAAyB,EACzB,gBAAgB,EAiBjB,MAAM,cAAc,CAAC;AAEtB;;;;;;;;;;;;GAYG;AACH,qBAAa,UAAU;IA+BT,OAAO,CAAC,QAAQ,CAAC,MAAM;IA7BnC,OAAO,CAAC,QAAQ,CAAC,SAAS,CA2Bf;gBAEkB,MAAM,EAAE,UAAU;IAE/C;;;;;OAKG;IACG,WAAW,CACf,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,UAAU,GAClB,OAAO,CAAC,aAAa,CAAC;IAczB;;;;;OAKG;IACG,oBAAoB,CACxB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,aAAa,CAAC;IAczB;;;;;OAKG;IACG,kBAAkB,CACtB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,aAAa,CAAC;IAczB;;;;;OAKG;IACG,cAAc,CAClB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,aAAa,CAAC;IAczB;;;;;OAKG;IACG,kBAAkB,CACtB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,aAAa,CAAC;IAczB;;;;;;;;;;;;;OAaG;IACG,gBAAgB,CACpB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,oBAAoB,CAAC;IAchC;;;;;;;;;;;;;OAaG;IACG,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAa9D;;;;;;;;;;;OAWG;IACG,sBAAsB,CAC1B,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,sBAAsB,CAAC;IAgBlC;;;;;;;;;;;;;;OAcG;IACG,eAAe,CACnB,WAAW,EAAE,MAAM,EACnB,MAAM,GAAE,MAAU,EAClB,KAAK,GAAE,MAAW,EAClB,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GACrB,OAAO,CAAC,eAAe,CAAC;IAyB3B;;;;;;;;;;;;;;;;;;OAkBG;IACG,kBAAkB,CACtB,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,kBAAkB,CAAC;IAc9B;;;;;;;;;OASG;IACG,qBAAqB,CACzB,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,qBAAqB,CAAC;IAiBjC;;;;;;;;;;;;;;OAcG;IACG,iBAAiB,CACrB,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,yBAAyB,CAAC;IAoBrC;;;;;;;;;;;;;;OAcG;IACG,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAalE;;;;;;;OAOG;IACG,cAAc,CAClB,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,wBAAwB,GACrC,OAAO,CAAC,6BAA6B,CAAC;IAiBzC;;;;;;;;;;;;;OAaG;IACG,cAAc,CAClB,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,wBAAwB,GACrC,OAAO,CAAC,6BAA6B,CAAC;IAsBzC;;;;;;;;;;;;;;OAcG;IACG,WAAW,CACf,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC,cAAc,EACzC,QAAQ,GAAE,MAAoB,GAC7B,OAAO,CAAC,oBAAoB,CAAC;IAiChC;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAuBlC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAkC3B;;OAEG;IACH,OAAO,CAAC,oCAAoC;IAc5C;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAmD/B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAIzB;;OAEG;IACH,OAAO,CAAC,eAAe;IAKvB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAIzB;;OAEG;IACH,OAAO,CAAC,4BAA4B;IAiCpC;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAuBlC;;OAEG;IACH,OAAO,CAAC,6BAA6B;IA+BrC;;OAEG;IACH,OAAO,CAAC,6BAA6B;IAqCrC;;OAEG;IACH,OAAO,CAAC,4BAA4B;IA2BpC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAiCzB;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAc9B;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAclC;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAS5B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IA2B9B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAQ7B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAY/B;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAwBhC;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAwBhC;;OAEG;IACH,OAAO,CAAC,wBAAwB;IA2BhC;;OAEG;IACH,OAAO,CAAC,uBAAuB;IA+C/B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAS1B;;OAEG;IACH,OAAO,CAAC,cAAc;IAqEtB,OAAO,CAAC,cAAc;CAavB"}
|