@libs-ui/interfaces-types 0.2.315-0 → 0.2.317-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/date.type.d.ts ADDED
@@ -0,0 +1,18 @@
1
+ import * as dayjs from 'dayjs';
2
+ type NullableDate = Extract<dayjs.ConfigType, undefined | null>;
3
+ export type NonNullableDate = Exclude<dayjs.ConfigType, undefined | null>;
4
+ export type GetDayjsConfig = {
5
+ date?: dayjs.ConfigType;
6
+ utc?: boolean;
7
+ formatOfDate?: string;
8
+ returnDayjsIfConfigDateNotExist?: boolean;
9
+ localeZone?: string;
10
+ };
11
+ export type GetDayjsReturn<C> = C extends undefined ? dayjs.Dayjs : C extends {
12
+ returnDayjsIfConfigDateNotExist: true;
13
+ } ? dayjs.Dayjs : C extends {
14
+ date: NonNullableDate;
15
+ } ? dayjs.Dayjs : C extends {
16
+ date: NullableDate;
17
+ } ? undefined : dayjs.Dayjs | undefined;
18
+ export {};
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS50eXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGlicy11aS9pbnRlcmZhY2VzLXR5cGVzL3NyYy9kYXRlLnR5cGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGRheWpzIGZyb20gJ2RheWpzJztcblxudHlwZSBOdWxsYWJsZURhdGUgPSBFeHRyYWN0PGRheWpzLkNvbmZpZ1R5cGUsIHVuZGVmaW5lZCB8IG51bGw+O1xuZXhwb3J0IHR5cGUgTm9uTnVsbGFibGVEYXRlID0gRXhjbHVkZTxkYXlqcy5Db25maWdUeXBlLCB1bmRlZmluZWQgfCBudWxsPjtcblxuZXhwb3J0IHR5cGUgR2V0RGF5anNDb25maWcgPSB7XG4gIGRhdGU/OiBkYXlqcy5Db25maWdUeXBlO1xuICB1dGM/OiBib29sZWFuO1xuICBmb3JtYXRPZkRhdGU/OiBzdHJpbmc7XG4gIHJldHVybkRheWpzSWZDb25maWdEYXRlTm90RXhpc3Q/OiBib29sZWFuO1xuICBsb2NhbGVab25lPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgR2V0RGF5anNSZXR1cm48Qz4gPSBDIGV4dGVuZHMgdW5kZWZpbmVkXG4gID8gZGF5anMuRGF5anNcbiAgOiBDIGV4dGVuZHMgeyByZXR1cm5EYXlqc0lmQ29uZmlnRGF0ZU5vdEV4aXN0OiB0cnVlIH1cbiAgICA/IGRheWpzLkRheWpzXG4gICAgOiBDIGV4dGVuZHMgeyBkYXRlOiBOb25OdWxsYWJsZURhdGUgfVxuICAgICAgPyBkYXlqcy5EYXlqc1xuICAgICAgOiBDIGV4dGVuZHMgeyBkYXRlOiBOdWxsYWJsZURhdGUgfVxuICAgICAgICA/IHVuZGVmaW5lZFxuICAgICAgICA6IGRheWpzLkRheWpzIHwgdW5kZWZpbmVkO1xuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXh0cmFjdC1pbnB1dHMudHlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnMtdWkvaW50ZXJmYWNlcy10eXBlcy9zcmMvZXh0cmFjdC1pbnB1dHMudHlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuaW1wb3J0IHsgSW5wdXRTaWduYWwsIElucHV0U2lnbmFsV2l0aFRyYW5zZm9ybSwgTW9kZWxTaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLy8gVXRpbGl0eSB0eXBlIMSR4buDIHVud3JhcCBJbnB1dFNpZ25hbCB0eXBlXG50eXBlIFVud3JhcElucHV0U2lnbmFsPFQsIEsgZXh0ZW5kcyBrZXlvZiBUPiA9IFRbS10gZXh0ZW5kcyBJbnB1dFNpZ25hbDxpbmZlciBVPiB8IE1vZGVsU2lnbmFsPGluZmVyIFU+IHwgSW5wdXRTaWduYWxXaXRoVHJhbnNmb3JtPGFueSwgaW5mZXIgVT4gPyBVIDogbmV2ZXI7XG5cbi8vIFV0aWxpdHkgdHlwZSDEkeG7gyBmaWx0ZXIgdsOgIHThuqFvIHJlcXVpcmVkIHByb3BlcnRpZXNcbnR5cGUgUmVxdWlyZWRJbnB1dFByb3BlcnRpZXM8VD4gPSB7XG4gIFtLIGluIGtleW9mIFQgYXMgVFtLXSBleHRlbmRzIElucHV0U2lnbmFsPGluZmVyIFU+IHwgTW9kZWxTaWduYWw8aW5mZXIgVT4gfCBJbnB1dFNpZ25hbFdpdGhUcmFuc2Zvcm08YW55LCBpbmZlciBVPiA/ICh1bmRlZmluZWQgZXh0ZW5kcyBVID8gbmV2ZXIgOiBLKSA6IG5ldmVyXTogVW53cmFwSW5wdXRTaWduYWw8VCwgSz47XG59O1xuXG4vLyBVdGlsaXR5IHR5cGUgxJHhu4MgZmlsdGVyIHbDoCB04bqhbyBvcHRpb25hbCBwcm9wZXJ0aWVzXG50eXBlIE9wdGlvbmFsSW5wdXRQcm9wZXJ0aWVzPFQ+ID0ge1xuICBbSyBpbiBrZXlvZiBUIGFzIFRbS10gZXh0ZW5kcyBJbnB1dFNpZ25hbDxpbmZlciBVPiB8IE1vZGVsU2lnbmFsPGluZmVyIFU+IHwgSW5wdXRTaWduYWxXaXRoVHJhbnNmb3JtPGFueSwgaW5mZXIgVT4gPyAodW5kZWZpbmVkIGV4dGVuZHMgVSA/IEsgOiBuZXZlcikgOiBuZXZlcl0/OiBVbndyYXBJbnB1dFNpZ25hbDxULCBLPjtcbn07XG5cbi8vIE1haW4gdHlwZSDEkeG7gyBleHRyYWN0IHThuqV0IGPhuqMgaW5wdXRzIHThu6sgY29tcG9uZW50XG5leHBvcnQgdHlwZSBFeHRyYWN0SW5wdXRzPFQsIFIgZXh0ZW5kcyBib29sZWFuID0gdHJ1ZT4gPSAoUiBleHRlbmRzIHRydWUgPyBSZXF1aXJlZElucHV0UHJvcGVydGllczxUPiA6IFBhcnRpYWw8UmVxdWlyZWRJbnB1dFByb3BlcnRpZXM8VD4+KSAmIE9wdGlvbmFsSW5wdXRQcm9wZXJ0aWVzPFQ+O1xuIl19
@@ -0,0 +1,187 @@
1
+ export {};
2
+ /** ====================== (Tuỳ chọn) Ví dụ nhanh ====================== **/
3
+ // export interface IComment {
4
+ // comments?: WritableSignal<ISubComment>;
5
+ // }
6
+ // export interface ISubComment {
7
+ // store?: WritableSignal<Array<WritableSignal<IComment>>>;
8
+ // data?: WritableSignal<Array<WritableSignal<IComment>>>;
9
+ // specific_temp_data?: WritableSignal<Array<WritableSignal<IComment>>>;
10
+ // paging?: WritableSignal<{
11
+ // cursors?: WritableSignal<{
12
+ // after?: WritableSignal<string>;
13
+ // before?: WritableSignal<string>;
14
+ // }>;
15
+ // before?: WritableSignal<string>;
16
+ // after?: WritableSignal<string>;
17
+ // next?: WritableSignal<string>;
18
+ // previous?: WritableSignal<string>;
19
+ // }>;
20
+ // summary?: WritableSignal<{
21
+ // can_comment?: WritableSignal<boolean>;
22
+ // canorder_comment?: WritableSignal<string>;
23
+ // total_count?: WritableSignal<number>;
24
+ // }>;
25
+ // }
26
+ // type V_comments_F = GetValueAtPath<IComment, 'comments', false>; // ISubComment
27
+ // type V_comments_T = GetValueAtPath<IComment, 'comments', true>; // WritableSignal<ISubComment>
28
+ // type V_comments_store_F = GetValueAtPath<IComment, 'comments.data', false>; // Array<WritableSignal<IComment>>
29
+ // type V_comments_store_T = GetValueAtPath<IComment, 'comments.data', true>; // WritableSignal<Array<WritableSignal<IComment>>>
30
+ // export interface Test {
31
+ // specific_query?: WritableSignal<IAssignmentItemQuery>;
32
+ // data: WritableSignal<Array<WritableSignal<IAssignmentItem>>>;
33
+ // index: number;
34
+ // info: {
35
+ // name: string;
36
+ // age: number;
37
+ // };
38
+ // city: WritableSignal<{
39
+ // name: string;
40
+ // country: string;
41
+ // }>;
42
+ // address: WritableSignal<{
43
+ // ip: WritableSignal<string>;
44
+ // port: WritableSignal<number>;
45
+ // }>;
46
+ // owner: Array<string>;
47
+ // support: Array<WritableSignal<string>>;
48
+ // host: Array<{
49
+ // ip: WritableSignal<string>;
50
+ // port: number;
51
+ // }>;
52
+ // country: WritableSignal<
53
+ // Array<
54
+ // WritableSignal<{
55
+ // name: WritableSignal<{
56
+ // vi: string;
57
+ // en: string;
58
+ // }>;
59
+ // code: WritableSignal<{
60
+ // vi: WritableSignal<string>;
61
+ // en: WritableSignal<string>;
62
+ // }>;
63
+ // flag: WritableSignal<string>;
64
+ // phone_code: string;
65
+ // currency: {
66
+ // name: string;
67
+ // code: WritableSignal<string>;
68
+ // symbol: WritableSignal<{
69
+ // vi: string;
70
+ // en: string;
71
+ // cn: WritableSignal<Array<string>>;
72
+ // jp: WritableSignal<
73
+ // Array<
74
+ // WritableSignal<{
75
+ // vi: string;
76
+ // en: string;
77
+ // }>
78
+ // >
79
+ // >;
80
+ // }>;
81
+ // };
82
+ // }>
83
+ // >
84
+ // >;
85
+ // }
86
+ // interface IAssignmentItem {
87
+ // id: WritableSignal<string>;
88
+ // name: WritableSignal<string>;
89
+ // description: WritableSignal<string>;
90
+ // created_at: WritableSignal<string>;
91
+ // updated_at: WritableSignal<string>;
92
+ // assignees?: WritableSignal<Array<WritableSignal<IAssignee>>>;
93
+ // }
94
+ // export interface IAssignee {
95
+ // assignee_id?: WritableSignal<string>;
96
+ // conversation_id?: WritableSignal<string>;
97
+ // created_time?: WritableSignal<string>;
98
+ // created_user?: WritableSignal<string>;
99
+ // id?: WritableSignal<string>;
100
+ // note?: WritableSignal<string>;
101
+ // status?: WritableSignal<number>;
102
+ // assign_tag_activity_status?: WritableSignal<number>;
103
+ // comment_id?: WritableSignal<string>;
104
+ // rating_id?: WritableSignal<string>;
105
+ // }
106
+ // export interface IAssignmentItemQuery {
107
+ // per_page: WritableSignal<number>;
108
+ // after_token?: WritableSignal<string>;
109
+ // before_token?: WritableSignal<string>;
110
+ // search?: WritableSignal<string>;
111
+ // search_index?: WritableSignal<number>;
112
+ // }
113
+ // type V_index_F = GetValueAtPath<Test, 'index', false>; // number
114
+ // type V_index_T = GetValueAtPath<Test, 'index', true>; // number
115
+ // type V_info_F = GetValueAtPath<Test, 'info', false>; // { name: string; age: number }
116
+ // type V_info_T = GetValueAtPath<Test, 'info', true>; // { name: string; age: number }
117
+ // type V_info_name_F = GetValueAtPath<Test, 'info.name', false>; // string
118
+ // type V_info_name_T = GetValueAtPath<Test, 'info.name', true>; // string
119
+ // type V_info_age_F = GetValueAtPath<Test, 'info.age', false>; // number
120
+ // type V_info_age_T = GetValueAtPath<Test, 'info.age', true>; // number
121
+ // // City (signal-wrapped object with plain fields)
122
+ // type V_city_F = GetValueAtPath<Test, 'city', false>; // { name: string; country: string }
123
+ // type V_city_T = GetValueAtPath<Test, 'city', true>; // WritableSignal<{ name: string; country: string }>
124
+ // type V_city_name_F = GetValueAtPath<Test, 'city.name', false>; // string
125
+ // type V_city_name_T = GetValueAtPath<Test, 'city.name', true>; // string
126
+ // type V_city_country_F = GetValueAtPath<Test, 'city.country', false>; // string
127
+ // type V_city_country_T = GetValueAtPath<Test, 'city.country', true>; // string
128
+ // // Address (signal-wrapped object with signal leaves)
129
+ // type V_address_F = GetValueAtPath<Test, 'address', false>; // { ip: string; port: number }
130
+ // type V_address_T = GetValueAtPath<Test, 'address', true>; // WritableSignal<{ ip: WritableSignal<string>; port: WritableSignal<number> }>
131
+ // type V_address_ip_F = GetValueAtPath<Test, 'address.ip', false>; // string
132
+ // type V_address_ip_T = GetValueAtPath<Test, 'address.ip', true>; // WritableSignal<string>
133
+ // type V_address_port_F = GetValueAtPath<Test, 'address.port', false>; // number
134
+ // type V_address_port_T = GetValueAtPath<Test, 'address.port', true>; // WritableSignal<number>
135
+ // // Owner (array of primitives)
136
+ // type V_owner_F = GetValueAtPath<Test, 'owner', false>; // string[]
137
+ // type V_owner_T = GetValueAtPath<Test, 'owner', true>; // string[]
138
+ // type V_owner_idx_F = GetValueAtPath<Test, 'owner[0]', false>; // string
139
+ // type V_owner_idx_T = GetValueAtPath<Test, 'owner[0]', true>; // string
140
+ // // Support (array of signals)
141
+ // type V_support_F = GetValueAtPath<Test, 'support', false>; // string[]
142
+ // type V_support_T = GetValueAtPath<Test, 'support', true>; // WritableSignal<string>[]
143
+ // type V_support_idx_F = GetValueAtPath<Test, 'support[0]', false>; // string
144
+ // type V_support_idx_T = GetValueAtPath<Test, 'support[0]', true>; // WritableSignal<string>
145
+ // // Host (array of objects with mixed leaves)
146
+ // type V_host_F = GetValueAtPath<Test, 'host', false>; // { ip: string; port: number }[]
147
+ // type V_host_T = GetValueAtPath<Test, 'host', true>; // { ip: WritableSignal<string>; port: number }[]
148
+ // type V_host_idx_F = GetValueAtPath<Test, 'host[0]', false>; // { ip: string; port: number }
149
+ // type V_host_idx_T = GetValueAtPath<Test, 'host[0]', true>; // { ip: WritableSignal<string>; port: number }
150
+ // type V_host_ip_F = GetValueAtPath<Test, 'host[0].ip', false>; // string
151
+ // type V_host_ip_T = GetValueAtPath<Test, 'host[0].ip', true>; // WritableSignal<string>
152
+ // type V_host_port_F = GetValueAtPath<Test, 'host[0].port', false>; // number
153
+ // type V_host_port_T = GetValueAtPath<Test, 'host[0].port', true>; // number
154
+ // // currency
155
+ // type V_currency_F = GetValueAtPath<Test, 'country[0].currency', false>; // { name: string; code: string; symbol: { ... } }
156
+ // type V_currency_T = GetValueAtPath<Test, 'country[0].currency', true>; // { name: string; code: WritableSignal<string>; symbol: WritableSignal<{ ... }> }
157
+ // type V_currency_name_F = GetValueAtPath<Test, 'country[0].currency.name', false>; // string
158
+ // type V_currency_name_T = GetValueAtPath<Test, 'country[0].currency.name', true>; // string
159
+ // type V_currency_code_F = GetValueAtPath<Test, 'country[0].currency.code', false>; // string
160
+ // type V_currency_code_T = GetValueAtPath<Test, 'country[0].currency.code', true>; // WritableSignal<string>
161
+ // // currency.symbol
162
+ // type V_symbol_F = GetValueAtPath<Test, 'country[0].currency.symbol', false>; // { vi: string; en: string; cn: string[]; jp: { vi: string; en: string }[] }
163
+ // type V_symbol_T = GetValueAtPath<Test, 'country[0].currency.symbol', true>; // WritableSignal<{ vi: string; en: string; cn: WritableSignal<string[]>; jp: WritableSignal<{ vi: string; en: string }[]> }>
164
+ // type V_symbol_vi_F = GetValueAtPath<Test, 'country[0].currency.symbol.vi', false>; // string
165
+ // type V_symbol_vi_T = GetValueAtPath<Test, 'country[0].currency.symbol.vi', true>; // string
166
+ // type V_symbol_en_F = GetValueAtPath<Test, 'country[0].currency.symbol.en', false>; // string
167
+ // type V_symbol_en_T = GetValueAtPath<Test, 'country[0].currency.symbol.en', true>; // string
168
+ // type V_symbol_cn_F = GetValueAtPath<Test, 'country[0].currency.symbol.cn', false>; // string[]
169
+ // type V_symbol_cn_T = GetValueAtPath<Test, 'country[0].currency.symbol.cn', true>; // WritableSignal<string[]>
170
+ // type V_symbol_cn_idx_F = GetValueAtPath<Test, 'country[0].currency.symbol.cn[0]', false>; // string
171
+ // type V_symbol_cn_idx_T = GetValueAtPath<Test, 'country[0].currency.symbol.cn[0]', true>; // string
172
+ // type V_symbol_jp_F = GetValueAtPath<Test, 'country[0].currency.symbol.jp', false>; // { vi: string; en: string }[]
173
+ // type V_symbol_jp_T = GetValueAtPath<Test, 'country[0].currency.symbol.jp', true>; // WritableSignal<{ vi: string; en: string }[]>
174
+ // type V_symbol_jp_idx_F = GetValueAtPath<Test, 'country[0].currency.symbol.jp[0]', false>; // { vi: string; en: string }
175
+ // type V_symbol_jp_idx_T = GetValueAtPath<Test, 'country[0].currency.symbol.jp[0]', true>; // WritableSignal<{ vi: string; en: string }>
176
+ // type V_symbol_jp_vi_F = GetValueAtPath<Test, 'country[0].currency.symbol.jp[0].vi', false>; // string
177
+ // type V_symbol_jp_vi_T = GetValueAtPath<Test, 'country[0].currency.symbol.jp[0].vi', true>; // string
178
+ // type V_symbol_jp_en_F = GetValueAtPath<Test, 'country[0].currency.symbol.jp[0].en', false>; // string
179
+ // type V_symbol_jp_en_T = GetValueAtPath<Test, 'country[0].currency.symbol.jp[0].en', true>; // string
180
+ // type V_Array_symbol_cn_F = GetValueAtPath<Array<Test>, '[0].country[0].currency.symbol.cn', false>; // string[]
181
+ // type V_Array_symbol_cn_T = GetValueAtPath<Array<Test>, '[0].country[0].currency.symbol.cn', true>; // WritableSignal<string[]>
182
+ // type V_Array_symbol_cn_idx_F = GetValueAtPath<Array<Test>, '[0].country[0].currency.symbol.cn[0]', false>; // string
183
+ // type V_Array_symbol_cn_idx_T = GetValueAtPath<Array<Test>, '[0].country[0].currency.symbol.cn[0]', true>; // string
184
+ // type pathIAssignmentItem = PathOf<IAssignmentItem>;
185
+ // type pathIAssignmentItem = PathOf<unknown>; // string
186
+ // type V_assignees_F = GetValueAtPath<IAssignmentItem, 'assignees[0]', false>; // IAssignee
187
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy11dGlsaXRpZXMtZm9yLXBhdGgtdmFsdWUudHlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnMtdWkvaW50ZXJmYWNlcy10eXBlcy9zcmMvZ2VuZXJpYy11dGlsaXRpZXMtZm9yLXBhdGgtdmFsdWUudHlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBcUhBLDRFQUE0RTtBQUU1RSw4QkFBOEI7QUFDOUIsNENBQTRDO0FBQzVDLElBQUk7QUFFSixpQ0FBaUM7QUFDakMsNkRBQTZEO0FBQzdELDREQUE0RDtBQUM1RCwwRUFBMEU7QUFDMUUsOEJBQThCO0FBQzlCLGlDQUFpQztBQUNqQyx3Q0FBd0M7QUFDeEMseUNBQXlDO0FBQ3pDLFVBQVU7QUFDVix1Q0FBdUM7QUFDdkMsc0NBQXNDO0FBQ3RDLHFDQUFxQztBQUNyQyx5Q0FBeUM7QUFDekMsUUFBUTtBQUNSLCtCQUErQjtBQUMvQiw2Q0FBNkM7QUFDN0MsaURBQWlEO0FBQ2pELDRDQUE0QztBQUM1QyxRQUFRO0FBQ1IsSUFBSTtBQUVKLGtGQUFrRjtBQUNsRixpR0FBaUc7QUFFakcsaUhBQWlIO0FBQ2pILGdJQUFnSTtBQUVoSSwwQkFBMEI7QUFDMUIsMkRBQTJEO0FBRTNELGtFQUFrRTtBQUVsRSxtQkFBbUI7QUFDbkIsWUFBWTtBQUNaLG9CQUFvQjtBQUNwQixtQkFBbUI7QUFDbkIsT0FBTztBQUNQLDJCQUEyQjtBQUMzQixvQkFBb0I7QUFDcEIsdUJBQXVCO0FBQ3ZCLFFBQVE7QUFDUiw4QkFBOEI7QUFDOUIsa0NBQWtDO0FBQ2xDLG9DQUFvQztBQUNwQyxRQUFRO0FBQ1IsMEJBQTBCO0FBQzFCLDRDQUE0QztBQUM1QyxrQkFBa0I7QUFDbEIsa0NBQWtDO0FBQ2xDLG9CQUFvQjtBQUNwQixRQUFRO0FBRVIsNkJBQTZCO0FBQzdCLGFBQWE7QUFDYix5QkFBeUI7QUFDekIsaUNBQWlDO0FBQ2pDLHdCQUF3QjtBQUN4Qix3QkFBd0I7QUFDeEIsY0FBYztBQUNkLGlDQUFpQztBQUNqQyx3Q0FBd0M7QUFDeEMsd0NBQXdDO0FBQ3hDLGNBQWM7QUFDZCx3Q0FBd0M7QUFDeEMsOEJBQThCO0FBQzlCLHNCQUFzQjtBQUN0QiwwQkFBMEI7QUFDMUIsMENBQTBDO0FBQzFDLHFDQUFxQztBQUNyQywwQkFBMEI7QUFDMUIsMEJBQTBCO0FBQzFCLGlEQUFpRDtBQUNqRCxrQ0FBa0M7QUFDbEMsdUJBQXVCO0FBQ3ZCLG1DQUFtQztBQUNuQyxnQ0FBZ0M7QUFDaEMsZ0NBQWdDO0FBQ2hDLHFCQUFxQjtBQUNyQixrQkFBa0I7QUFDbEIsaUJBQWlCO0FBQ2pCLGdCQUFnQjtBQUNoQixhQUFhO0FBQ2IsV0FBVztBQUNYLFFBQVE7QUFDUixPQUFPO0FBQ1AsSUFBSTtBQUVKLDhCQUE4QjtBQUM5QixnQ0FBZ0M7QUFDaEMsa0NBQWtDO0FBQ2xDLHlDQUF5QztBQUN6Qyx3Q0FBd0M7QUFDeEMsd0NBQXdDO0FBQ3hDLGtFQUFrRTtBQUNsRSxJQUFJO0FBRUosK0JBQStCO0FBQy9CLDBDQUEwQztBQUMxQyw4Q0FBOEM7QUFDOUMsMkNBQTJDO0FBQzNDLDJDQUEyQztBQUMzQyxpQ0FBaUM7QUFDakMsbUNBQW1DO0FBQ25DLHFDQUFxQztBQUNyQyx5REFBeUQ7QUFDekQseUNBQXlDO0FBQ3pDLHdDQUF3QztBQUN4QyxJQUFJO0FBRUosMENBQTBDO0FBQzFDLHNDQUFzQztBQUN0QywwQ0FBMEM7QUFDMUMsMkNBQTJDO0FBQzNDLHFDQUFxQztBQUNyQywyQ0FBMkM7QUFDM0MsSUFBSTtBQUVKLG1FQUFtRTtBQUNuRSxrRUFBa0U7QUFFbEUsd0ZBQXdGO0FBQ3hGLHVGQUF1RjtBQUN2RiwyRUFBMkU7QUFDM0UsMEVBQTBFO0FBQzFFLHlFQUF5RTtBQUN6RSx3RUFBd0U7QUFFeEUsb0RBQW9EO0FBQ3BELDRGQUE0RjtBQUM1RiwyR0FBMkc7QUFDM0csMkVBQTJFO0FBQzNFLDBFQUEwRTtBQUMxRSxpRkFBaUY7QUFDakYsZ0ZBQWdGO0FBRWhGLHdEQUF3RDtBQUN4RCw2RkFBNkY7QUFDN0YsNElBQTRJO0FBQzVJLDZFQUE2RTtBQUM3RSw0RkFBNEY7QUFDNUYsaUZBQWlGO0FBQ2pGLGdHQUFnRztBQUVoRyxpQ0FBaUM7QUFDakMscUVBQXFFO0FBQ3JFLG9FQUFvRTtBQUNwRSwwRUFBMEU7QUFDMUUseUVBQXlFO0FBRXpFLGdDQUFnQztBQUNoQyx5RUFBeUU7QUFDekUsd0ZBQXdGO0FBQ3hGLDhFQUE4RTtBQUM5RSw2RkFBNkY7QUFFN0YsK0NBQStDO0FBQy9DLHlGQUF5RjtBQUN6Rix3R0FBd0c7QUFDeEcsOEZBQThGO0FBQzlGLDZHQUE2RztBQUM3RywwRUFBMEU7QUFDMUUseUZBQXlGO0FBQ3pGLDhFQUE4RTtBQUM5RSw2RUFBNkU7QUFFN0UsY0FBYztBQUNkLDZIQUE2SDtBQUM3SCw0SkFBNEo7QUFDNUosOEZBQThGO0FBQzlGLDZGQUE2RjtBQUM3Riw4RkFBOEY7QUFDOUYsNkdBQTZHO0FBRTdHLHFCQUFxQjtBQUNyQiw2SkFBNko7QUFDN0osNE1BQTRNO0FBQzVNLCtGQUErRjtBQUMvRiw4RkFBOEY7QUFDOUYsK0ZBQStGO0FBQy9GLDhGQUE4RjtBQUM5RixpR0FBaUc7QUFDakcsZ0hBQWdIO0FBQ2hILHNHQUFzRztBQUN0RyxxR0FBcUc7QUFDckcscUhBQXFIO0FBQ3JILG9JQUFvSTtBQUNwSSwwSEFBMEg7QUFDMUgseUlBQXlJO0FBQ3pJLHdHQUF3RztBQUN4Ryx1R0FBdUc7QUFDdkcsd0dBQXdHO0FBQ3hHLHVHQUF1RztBQUV2RyxrSEFBa0g7QUFDbEgsaUlBQWlJO0FBQ2pJLHVIQUF1SDtBQUN2SCxzSEFBc0g7QUFFdEgsc0RBQXNEO0FBQ3RELHdEQUF3RDtBQUV4RCw0RkFBNEYiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyBTaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLyoqID09PT09PT09PT09PT09PT09PT09PT0gSGVscGVyczogdW53cmFwICYgc2hhcGUgPT09PT09PT09PT09PT09PT09PT09PSAqKi9cblxuLy8gVW53cmFwIG3hu5l0IGzhu5twIFNpZ25hbFxudHlwZSBVbndyYXBTaWduYWw8VD4gPSBUIGV4dGVuZHMgU2lnbmFsPGluZmVyIFU+ID8gVSA6IFQ7XG5cbi8vIFVud3JhcCB0b8OgbiBi4buZIFNpZ25hbFxudHlwZSBVbndyYXBBbGxTaWduYWxzPFQ+ID0gVCBleHRlbmRzIFNpZ25hbDxpbmZlciBVPiA/IFVud3JhcEFsbFNpZ25hbHM8VT4gOiBUO1xuXG4vLyBMb+G6oWkgYuG7jyB1bmRlZmluZWQgfCBudWxsIHNhdSBraGkgdW53cmFwIDEgbOG7m3AgU2lnbmFsIMSR4buDIHNvaSBzaGFwZVxudHlwZSBDbGVhbjxUPiA9IEV4Y2x1ZGU8VW53cmFwU2lnbmFsPFQ+LCB1bmRlZmluZWQgfCBudWxsPjtcblxuLy8gS2V5IGThuqFuZyBzdHJpbmdcbnR5cGUgU3RyS2V5czxUPiA9IEV4dHJhY3Q8a2V5b2YgVCwgc3RyaW5nPjtcblxuLy8gQmFzZSB0eXBlIHNhdSBraGkgdW53cmFwIHRvw6BuIGLhu5kgU2lnbmFsICh0aeG7h24gZMO5bmcgbmhp4buBdSBuxqFpKVxudHlwZSBCYXNlPFQ+ID0gVW53cmFwQWxsU2lnbmFsczxUPjtcblxuLyoqID09PT09PT09PT09PT09PT09PT09PT0gQXJyYXkgaGVscGVycyA9PT09PT09PT09PT09PT09PT09PT09ICoqL1xuXG4vLyBM4bqleSBlbGVtZW50IHR5cGUgY+G7p2EgbeG6o25nLCB04buxIGzDoG0gc+G6oWNoIChi4buPIHVuZGVmaW5lZC9udWxsLCB1bndyYXAgU2lnbmFsIHRyxrDhu5tjIGtoaSBraeG7g20gdHJhKVxudHlwZSBBcnJheUVsZW1lbnRSYXc8VD4gPSBCYXNlPENsZWFuPFQ+PiBleHRlbmRzIFJlYWRvbmx5QXJyYXk8aW5mZXIgVT4gPyBVIDogQmFzZTxDbGVhbjxUPj4gZXh0ZW5kcyAoaW5mZXIgVSlbXSA/IFUgOiBuZXZlcjtcblxuLy8gS2nhu4NtIHRyYSBhcnJheS1saWtlIHNhdSBraGkgdW53cmFwIHRvw6BuIGLhu5kgU2lnbmFsIHbDoCBsw6BtIHPhuqFjaCBvcHRpb25hbFxudHlwZSBJc0FycmF5TGlrZTxUPiA9IEJhc2U8Q2xlYW48VD4+IGV4dGVuZHMgcmVhZG9ubHkgdW5rbm93bltdID8gdHJ1ZSA6IEJhc2U8Q2xlYW48VD4+IGV4dGVuZHMgdW5rbm93bltdID8gdHJ1ZSA6IGZhbHNlO1xuXG4vLyBLaeG7g20gdHJhIG9iamVjdCBraMO0bmcgcGjhuqNpIGFycmF5IHNhdSBraGkgdW53cmFwIHRvw6BuIGLhu5kgU2lnbmFsIHbDoCBsw6BtIHPhuqFjaCBvcHRpb25hbFxudHlwZSBJc05vbkFycmF5T2JqZWN0PFQ+ID0gQmFzZTxDbGVhbjxUPj4gZXh0ZW5kcyBvYmplY3QgPyAoQmFzZTxDbGVhbjxUPj4gZXh0ZW5kcyByZWFkb25seSB1bmtub3duW10gPyBmYWxzZSA6IEJhc2U8Q2xlYW48VD4+IGV4dGVuZHMgdW5rbm93bltdID8gZmFsc2UgOiB0cnVlKSA6IGZhbHNlO1xuXG4vKiogPT09PT09PT09PT09PT09PT09PT09PSBET00vRXZ0IGd1YXJkID09PT09PT09PT09PT09PT09PT09PT0gKiovXG5cbnR5cGUgSXNET01UeXBlPFQ+ID0gQmFzZTxUPiBleHRlbmRzIEV2ZW50IHwgTm9kZSB8IERvY3VtZW50IHwgRWxlbWVudCB8IFdpbmRvdyB8IENTU1N0eWxlRGVjbGFyYXRpb24gfCBDU1NSdWxlIHwgQ1NTU3R5bGVTaGVldCA/IHRydWUgOiBmYWxzZTtcblxuLyoqID09PT09PT09PT09PT09PT09PT09PT0gRmluYWxpemUgKGdp4buvIFNpZ25hbCBu4bq/dSBj4bqnbikgPT09PT09PT09PT09PT09PT09PT09PSAqKi9cblxudHlwZSBGaW5hbGl6ZTxULCBSIGV4dGVuZHMgYm9vbGVhbj4gPSBSIGV4dGVuZHMgdHJ1ZSA/IFQgOiBVbndyYXBBbGxTaWduYWxzPFQ+O1xuXG4vKiogPT09PT09PT09PT09PT09PT09PT09PSBEZXB0aCBsaW1pdGVyIChoeWJyaWQsIG3hurdjIMSR4buLbmggNikgPT09PT09PT09PT09PT09PT09PT09PSAqKi9cblxudHlwZSBEZWM8TiBleHRlbmRzIG51bWJlcj4gPSBOIGV4dGVuZHMgNiA/IDUgOiBOIGV4dGVuZHMgNSA/IDQgOiBOIGV4dGVuZHMgNCA/IDMgOiBOIGV4dGVuZHMgMyA/IDIgOiBOIGV4dGVuZHMgMiA/IDEgOiBOIGV4dGVuZHMgMSA/IDAgOiAwO1xuXG4vKiogPT09PT09PT09PT09PT09PT09PT09PSBQYXRoIGJ1aWxkZXJzIChEZXB0aC1saW1pdGVkKSA9PT09PT09PT09PT09PT09PT09PT09ICoqL1xuXG4vLyBQYXRoIGNobyBhcnJheSDhu58gcm9vdC9maWVsZFxudHlwZSBQYXRoRm9yQXJyYXk8VCwgRGVwdGggZXh0ZW5kcyBudW1iZXI+ID0gW0RlcHRoXSBleHRlbmRzIFswXSA/IG5ldmVyIDogYFske251bWJlcn1dYCB8IChQYXRoT2Y8QXJyYXlFbGVtZW50UmF3PFQ+LCBEZWM8RGVwdGg+PiBleHRlbmRzIG5ldmVyID8gbmV2ZXIgOiBgWyR7bnVtYmVyfV0uJHtQYXRoT2Y8QXJyYXlFbGVtZW50UmF3PFQ+LCBEZWM8RGVwdGg+Pn1gKTtcblxuLy8gUGF0aCBjaG8gdOG7q25nIHByb3AgSyB0w7l5IGtp4buDdSBnacOhIHRy4buLXG50eXBlIFBhdGhGb3JQcm9wPFRQcm9wLCBLIGV4dGVuZHMgc3RyaW5nLCBEZXB0aCBleHRlbmRzIG51bWJlcj4gPSBbRGVwdGhdIGV4dGVuZHMgWzBdXG4gID8gS1xuICA6IElzQXJyYXlMaWtlPFRQcm9wPiBleHRlbmRzIHRydWVcbiAgICA/IGAke0t9YCB8IGAke0t9WyR7bnVtYmVyfV1gIHwgKFBhdGhPZjxBcnJheUVsZW1lbnRSYXc8VFByb3A+LCBEZWM8RGVwdGg+PiBleHRlbmRzIG5ldmVyID8gbmV2ZXIgOiBgJHtLfVske251bWJlcn1dLiR7UGF0aE9mPEFycmF5RWxlbWVudFJhdzxUUHJvcD4sIERlYzxEZXB0aD4+fWApXG4gICAgOiBJc05vbkFycmF5T2JqZWN0PFRQcm9wPiBleHRlbmRzIHRydWVcbiAgICAgID8gYCR7S31gIHwgKFBhdGhPZjxDbGVhbjxUUHJvcD4sIERlYzxEZXB0aD4+IGV4dGVuZHMgbmV2ZXIgPyBuZXZlciA6IGAke0t9LiR7UGF0aE9mPENsZWFuPFRQcm9wPiwgRGVjPERlcHRoPj59YClcbiAgICAgIDogYCR7S31gO1xuXG4vLyBQYXRoIGNobyBvYmplY3QgKG1hcCB04burbmcga2V5KVxudHlwZSBQYXRoRm9yT2JqZWN0PFQsIERlcHRoIGV4dGVuZHMgbnVtYmVyPiA9IHtcbiAgW0sgaW4gU3RyS2V5czxUPl06IFBhdGhGb3JQcm9wPFRbS10sIEssIERlcHRoPjtcbn1bU3RyS2V5czxUPl07XG5cbi8qKiA9PT09PT09PT09PT09PT09PT09PT09IFB1YmxpYzogUGF0aE9mIChoeWJyaWQsIERlcHRoIG3hurdjIMSR4buLbmggNikgPT09PT09PT09PT09PT09PT09PT09PSAqKi9cblxuZXhwb3J0IHR5cGUgUGF0aE9mPFRSYXcsIERlcHRoIGV4dGVuZHMgbnVtYmVyID0gNj4gPVxuICBJc0RPTVR5cGU8VFJhdz4gZXh0ZW5kcyB0cnVlID8gYW55IDogW0RlcHRoXSBleHRlbmRzIFswXSA/IG5ldmVyIDogQmFzZTxUUmF3PiBleHRlbmRzIHJlYWRvbmx5IHVua25vd25bXSB8IHVua25vd25bXSA/IFBhdGhGb3JBcnJheTxUUmF3LCBEZXB0aD4gOiBCYXNlPFRSYXc+IGV4dGVuZHMgb2JqZWN0ID8gUGF0aEZvck9iamVjdDxCYXNlPFRSYXc+LCBEZXB0aD4gOiBzdHJpbmc7XG5cbi8qKiA9PT09PT09PT09PT09PT09PT09PT09IFJlc29sdmUgZ2nDoSB0cuG7iyB0aGVvIHBhdGggPT09PT09PT09PT09PT09PT09PT09PSAqKi9cblxuLy8gR2V0SW50ZXJuYWw6IMSRaSB0aGVvIHN0cmluZyBwYXRoIMSR4buDIHJlc29sdmUgdHlwZSBnacOhIHRy4buLIGN14buRaSBjw7luZ1xudHlwZSBHZXRJbnRlcm5hbDxUUmF3LCBQIGV4dGVuZHMgc3RyaW5nLCBSIGV4dGVuZHMgYm9vbGVhbj4gPVxuICAvLyBbeF0uUmVzdCAoxJHDoW5oIGluZGV4IHbDoG8gcm9vdCBhcnJheSlcbiAgUCBleHRlbmRzIGBbJHtpbmZlciBJfV0uJHtpbmZlciBSZXN0fWBcbiAgICA/IEkgZXh0ZW5kcyBgJHtudW1iZXJ9YFxuICAgICAgPyBHZXRJbnRlcm5hbDxBcnJheUVsZW1lbnRSYXc8VFJhdz4sIFJlc3QsIFI+XG4gICAgICA6IGFueVxuICAgIDogLy8gW3hdIChjaOG7iSBpbmRleClcbiAgICAgIFAgZXh0ZW5kcyBgWyR7aW5mZXIgSX1dYFxuICAgICAgPyBJIGV4dGVuZHMgYCR7bnVtYmVyfWBcbiAgICAgICAgPyBGaW5hbGl6ZTxBcnJheUVsZW1lbnRSYXc8VFJhdz4sIFI+XG4gICAgICAgIDogYW55XG4gICAgICA6IC8vIEtbeF0uUmVzdCAoxJHDoW5oIGluZGV4IHbDoG8gZmllbGQgbeG6o25nKVxuICAgICAgICBQIGV4dGVuZHMgYCR7aW5mZXIgS31bJHtpbmZlciBJfV0uJHtpbmZlciBSZXN0fWBcbiAgICAgICAgPyBLIGV4dGVuZHMgU3RyS2V5czxDbGVhbjxCYXNlPFRSYXc+Pj5cbiAgICAgICAgICA/IEkgZXh0ZW5kcyBgJHtudW1iZXJ9YFxuICAgICAgICAgICAgPyBHZXRJbnRlcm5hbDxBcnJheUVsZW1lbnRSYXc8Q2xlYW48QmFzZTxUUmF3Pj5bS10+LCBSZXN0LCBSPlxuICAgICAgICAgICAgOiBhbnlcbiAgICAgICAgICA6IGFueVxuICAgICAgICA6IC8vIEsuUmVzdCAoxJFpIHPDonUgdsOgbyBvYmplY3QpXG4gICAgICAgICAgUCBleHRlbmRzIGAke2luZmVyIEt9LiR7aW5mZXIgUmVzdH1gXG4gICAgICAgICAgPyBLIGV4dGVuZHMgU3RyS2V5czxDbGVhbjxCYXNlPFRSYXc+Pj5cbiAgICAgICAgICAgID8gSXNBcnJheUxpa2U8Q2xlYW48QmFzZTxUUmF3Pj5bS10+IGV4dGVuZHMgdHJ1ZVxuICAgICAgICAgICAgICA/IGFueSAvLyBraMO0bmcgaOG7lyB0cuG7oyBkb3QgdsOgbyBwaOG6p24gdOG7rSBt4bqjbmcga2hpIHRoaeG6v3UgaW5kZXhcbiAgICAgICAgICAgICAgOiBHZXRJbnRlcm5hbDxDbGVhbjxCYXNlPFRSYXc+PltLXSwgUmVzdCwgUj5cbiAgICAgICAgICAgIDogYW55XG4gICAgICAgICAgOiAvLyBLWzxudW1iZXI+XSAoa+G6v3QgdGjDumMg4bufIGluZGV4KVxuICAgICAgICAgICAgUCBleHRlbmRzIGAke2luZmVyIEt9WyR7aW5mZXIgSX1dYFxuICAgICAgICAgICAgPyBLIGV4dGVuZHMgU3RyS2V5czxDbGVhbjxCYXNlPFRSYXc+Pj5cbiAgICAgICAgICAgICAgPyBJIGV4dGVuZHMgYCR7bnVtYmVyfWBcbiAgICAgICAgICAgICAgICA/IEZpbmFsaXplPEFycmF5RWxlbWVudFJhdzxDbGVhbjxCYXNlPFRSYXc+PltLXT4sIFI+XG4gICAgICAgICAgICAgICAgOiBhbnlcbiAgICAgICAgICAgICAgOiBhbnlcbiAgICAgICAgICAgIDogLy8gSyAoa+G6v3QgdGjDumMg4bufIGtleSlcbiAgICAgICAgICAgICAgUCBleHRlbmRzIGAke2luZmVyIEt9YFxuICAgICAgICAgICAgICA/IEsgZXh0ZW5kcyBTdHJLZXlzPENsZWFuPEJhc2U8VFJhdz4+PlxuICAgICAgICAgICAgICAgID8gRmluYWxpemU8Q2xlYW48QmFzZTxUUmF3Pj5bS10sIFI+XG4gICAgICAgICAgICAgICAgOiBhbnlcbiAgICAgICAgICAgICAgOiBhbnk7XG5cbi8qKiA9PT09PT09PT09PT09PT09PT09PT09IFB1YmxpYzogR2V0VmFsdWVBdFBhdGggJiBHZXRSZXR1cm5UeXBlID09PT09PT09PT09PT09PT09PT09PT0gKiovXG5cbi8vIFJlc29sdmUga2nhu4N1IGdpw6EgdHLhu4sgdOG6oWkgcGF0aCBQLiBO4bq/dSBSPXRydWUsIGdp4buvIG5ndXnDqm4gU2lnbmFsOyBt4bq3YyDEkeG7i25oIFI9ZmFsc2Ugc+G6vSB1bndyYXAgdG/DoG4gYuG7mSBTaWduYWwuXG5leHBvcnQgdHlwZSBHZXRWYWx1ZUF0UGF0aDxUUmF3LCBQIGV4dGVuZHMgUGF0aE9mPFRSYXc+LCBSIGV4dGVuZHMgYm9vbGVhbiA9IGZhbHNlPiA9IEdldEludGVybmFsPFRSYXcsIFAsIFI+O1xuXG4vLyBLaeG7g3UgdHLhuqMgduG7gSBj4bunYSBnZXQoKSBk4buxYSB0csOqbiBkZWZhdWx0VmFsdWUgRFxuZXhwb3J0IHR5cGUgR2V0UmV0dXJuVHlwZTxPLCBQIGV4dGVuZHMgUGF0aE9mPE8+LCBLUyBleHRlbmRzIGJvb2xlYW4sIEQ+ID0gRCBleHRlbmRzIHVuZGVmaW5lZCA/IEdldFZhbHVlQXRQYXRoPE8sIFAsIEtTPiA6IEQ7XG5cbi8qKiA9PT09PT09PT09PT09PT09PT09PT09IChUdeG7syBjaOG7jW4pIFbDrSBk4bulIG5oYW5oID09PT09PT09PT09PT09PT09PT09PT0gKiovXG5cbi8vIGV4cG9ydCBpbnRlcmZhY2UgSUNvbW1lbnQge1xuLy8gICBjb21tZW50cz86IFdyaXRhYmxlU2lnbmFsPElTdWJDb21tZW50Pjtcbi8vIH1cblxuLy8gZXhwb3J0IGludGVyZmFjZSBJU3ViQ29tbWVudCB7XG4vLyAgIHN0b3JlPzogV3JpdGFibGVTaWduYWw8QXJyYXk8V3JpdGFibGVTaWduYWw8SUNvbW1lbnQ+Pj47XG4vLyAgIGRhdGE/OiBXcml0YWJsZVNpZ25hbDxBcnJheTxXcml0YWJsZVNpZ25hbDxJQ29tbWVudD4+Pjtcbi8vICAgc3BlY2lmaWNfdGVtcF9kYXRhPzogV3JpdGFibGVTaWduYWw8QXJyYXk8V3JpdGFibGVTaWduYWw8SUNvbW1lbnQ+Pj47XG4vLyAgIHBhZ2luZz86IFdyaXRhYmxlU2lnbmFsPHtcbi8vICAgICBjdXJzb3JzPzogV3JpdGFibGVTaWduYWw8e1xuLy8gICAgICAgYWZ0ZXI/OiBXcml0YWJsZVNpZ25hbDxzdHJpbmc+O1xuLy8gICAgICAgYmVmb3JlPzogV3JpdGFibGVTaWduYWw8c3RyaW5nPjtcbi8vICAgICB9Pjtcbi8vICAgICBiZWZvcmU/OiBXcml0YWJsZVNpZ25hbDxzdHJpbmc+O1xuLy8gICAgIGFmdGVyPzogV3JpdGFibGVTaWduYWw8c3RyaW5nPjtcbi8vICAgICBuZXh0PzogV3JpdGFibGVTaWduYWw8c3RyaW5nPjtcbi8vICAgICBwcmV2aW91cz86IFdyaXRhYmxlU2lnbmFsPHN0cmluZz47XG4vLyAgIH0+O1xuLy8gICBzdW1tYXJ5PzogV3JpdGFibGVTaWduYWw8e1xuLy8gICAgIGNhbl9jb21tZW50PzogV3JpdGFibGVTaWduYWw8Ym9vbGVhbj47XG4vLyAgICAgY2Fub3JkZXJfY29tbWVudD86IFdyaXRhYmxlU2lnbmFsPHN0cmluZz47XG4vLyAgICAgdG90YWxfY291bnQ/OiBXcml0YWJsZVNpZ25hbDxudW1iZXI+O1xuLy8gICB9Pjtcbi8vIH1cblxuLy8gdHlwZSBWX2NvbW1lbnRzX0YgPSBHZXRWYWx1ZUF0UGF0aDxJQ29tbWVudCwgJ2NvbW1lbnRzJywgZmFsc2U+OyAvLyBJU3ViQ29tbWVudFxuLy8gdHlwZSBWX2NvbW1lbnRzX1QgPSBHZXRWYWx1ZUF0UGF0aDxJQ29tbWVudCwgJ2NvbW1lbnRzJywgdHJ1ZT47IC8vIFdyaXRhYmxlU2lnbmFsPElTdWJDb21tZW50PlxuXG4vLyB0eXBlIFZfY29tbWVudHNfc3RvcmVfRiA9IEdldFZhbHVlQXRQYXRoPElDb21tZW50LCAnY29tbWVudHMuZGF0YScsIGZhbHNlPjsgLy8gQXJyYXk8V3JpdGFibGVTaWduYWw8SUNvbW1lbnQ+PlxuLy8gdHlwZSBWX2NvbW1lbnRzX3N0b3JlX1QgPSBHZXRWYWx1ZUF0UGF0aDxJQ29tbWVudCwgJ2NvbW1lbnRzLmRhdGEnLCB0cnVlPjsgLy8gV3JpdGFibGVTaWduYWw8QXJyYXk8V3JpdGFibGVTaWduYWw8SUNvbW1lbnQ+Pj5cblxuLy8gZXhwb3J0IGludGVyZmFjZSBUZXN0IHtcbi8vICAgc3BlY2lmaWNfcXVlcnk/OiBXcml0YWJsZVNpZ25hbDxJQXNzaWdubWVudEl0ZW1RdWVyeT47XG5cbi8vICAgZGF0YTogV3JpdGFibGVTaWduYWw8QXJyYXk8V3JpdGFibGVTaWduYWw8SUFzc2lnbm1lbnRJdGVtPj4+O1xuXG4vLyAgIGluZGV4OiBudW1iZXI7XG4vLyAgIGluZm86IHtcbi8vICAgICBuYW1lOiBzdHJpbmc7XG4vLyAgICAgYWdlOiBudW1iZXI7XG4vLyAgIH07XG4vLyAgIGNpdHk6IFdyaXRhYmxlU2lnbmFsPHtcbi8vICAgICBuYW1lOiBzdHJpbmc7XG4vLyAgICAgY291bnRyeTogc3RyaW5nO1xuLy8gICB9Pjtcbi8vICAgYWRkcmVzczogV3JpdGFibGVTaWduYWw8e1xuLy8gICAgIGlwOiBXcml0YWJsZVNpZ25hbDxzdHJpbmc+O1xuLy8gICAgIHBvcnQ6IFdyaXRhYmxlU2lnbmFsPG51bWJlcj47XG4vLyAgIH0+O1xuLy8gICBvd25lcjogQXJyYXk8c3RyaW5nPjtcbi8vICAgc3VwcG9ydDogQXJyYXk8V3JpdGFibGVTaWduYWw8c3RyaW5nPj47XG4vLyAgIGhvc3Q6IEFycmF5PHtcbi8vICAgICBpcDogV3JpdGFibGVTaWduYWw8c3RyaW5nPjtcbi8vICAgICBwb3J0OiBudW1iZXI7XG4vLyAgIH0+O1xuXG4vLyAgIGNvdW50cnk6IFdyaXRhYmxlU2lnbmFsPFxuLy8gICAgIEFycmF5PFxuLy8gICAgICAgV3JpdGFibGVTaWduYWw8e1xuLy8gICAgICAgICBuYW1lOiBXcml0YWJsZVNpZ25hbDx7XG4vLyAgICAgICAgICAgdmk6IHN0cmluZztcbi8vICAgICAgICAgICBlbjogc3RyaW5nO1xuLy8gICAgICAgICB9Pjtcbi8vICAgICAgICAgY29kZTogV3JpdGFibGVTaWduYWw8e1xuLy8gICAgICAgICAgIHZpOiBXcml0YWJsZVNpZ25hbDxzdHJpbmc+O1xuLy8gICAgICAgICAgIGVuOiBXcml0YWJsZVNpZ25hbDxzdHJpbmc+O1xuLy8gICAgICAgICB9Pjtcbi8vICAgICAgICAgZmxhZzogV3JpdGFibGVTaWduYWw8c3RyaW5nPjtcbi8vICAgICAgICAgcGhvbmVfY29kZTogc3RyaW5nO1xuLy8gICAgICAgICBjdXJyZW5jeToge1xuLy8gICAgICAgICAgIG5hbWU6IHN0cmluZztcbi8vICAgICAgICAgICBjb2RlOiBXcml0YWJsZVNpZ25hbDxzdHJpbmc+O1xuLy8gICAgICAgICAgIHN5bWJvbDogV3JpdGFibGVTaWduYWw8e1xuLy8gICAgICAgICAgICAgdmk6IHN0cmluZztcbi8vICAgICAgICAgICAgIGVuOiBzdHJpbmc7XG4vLyAgICAgICAgICAgICBjbjogV3JpdGFibGVTaWduYWw8QXJyYXk8c3RyaW5nPj47XG4vLyAgICAgICAgICAgICBqcDogV3JpdGFibGVTaWduYWw8XG4vLyAgICAgICAgICAgICAgIEFycmF5PFxuLy8gICAgICAgICAgICAgICAgIFdyaXRhYmxlU2lnbmFsPHtcbi8vICAgICAgICAgICAgICAgICAgIHZpOiBzdHJpbmc7XG4vLyAgICAgICAgICAgICAgICAgICBlbjogc3RyaW5nO1xuLy8gICAgICAgICAgICAgICAgIH0+XG4vLyAgICAgICAgICAgICAgID5cbi8vICAgICAgICAgICAgID47XG4vLyAgICAgICAgICAgfT47XG4vLyAgICAgICAgIH07XG4vLyAgICAgICB9PlxuLy8gICAgID5cbi8vICAgPjtcbi8vIH1cblxuLy8gaW50ZXJmYWNlIElBc3NpZ25tZW50SXRlbSB7XG4vLyAgIGlkOiBXcml0YWJsZVNpZ25hbDxzdHJpbmc+O1xuLy8gICBuYW1lOiBXcml0YWJsZVNpZ25hbDxzdHJpbmc+O1xuLy8gICBkZXNjcmlwdGlvbjogV3JpdGFibGVTaWduYWw8c3RyaW5nPjtcbi8vICAgY3JlYXRlZF9hdDogV3JpdGFibGVTaWduYWw8c3RyaW5nPjtcbi8vICAgdXBkYXRlZF9hdDogV3JpdGFibGVTaWduYWw8c3RyaW5nPjtcbi8vICAgYXNzaWduZWVzPzogV3JpdGFibGVTaWduYWw8QXJyYXk8V3JpdGFibGVTaWduYWw8SUFzc2lnbmVlPj4+O1xuLy8gfVxuXG4vLyBleHBvcnQgaW50ZXJmYWNlIElBc3NpZ25lZSB7XG4vLyAgIGFzc2lnbmVlX2lkPzogV3JpdGFibGVTaWduYWw8c3RyaW5nPjtcbi8vICAgY29udmVyc2F0aW9uX2lkPzogV3JpdGFibGVTaWduYWw8c3RyaW5nPjtcbi8vICAgY3JlYXRlZF90aW1lPzogV3JpdGFibGVTaWduYWw8c3RyaW5nPjtcbi8vICAgY3JlYXRlZF91c2VyPzogV3JpdGFibGVTaWduYWw8c3RyaW5nPjtcbi8vICAgaWQ/OiBXcml0YWJsZVNpZ25hbDxzdHJpbmc+O1xuLy8gICBub3RlPzogV3JpdGFibGVTaWduYWw8c3RyaW5nPjtcbi8vICAgc3RhdHVzPzogV3JpdGFibGVTaWduYWw8bnVtYmVyPjtcbi8vICAgYXNzaWduX3RhZ19hY3Rpdml0eV9zdGF0dXM/OiBXcml0YWJsZVNpZ25hbDxudW1iZXI+O1xuLy8gICBjb21tZW50X2lkPzogV3JpdGFibGVTaWduYWw8c3RyaW5nPjtcbi8vICAgcmF0aW5nX2lkPzogV3JpdGFibGVTaWduYWw8c3RyaW5nPjtcbi8vIH1cblxuLy8gZXhwb3J0IGludGVyZmFjZSBJQXNzaWdubWVudEl0ZW1RdWVyeSB7XG4vLyAgIHBlcl9wYWdlOiBXcml0YWJsZVNpZ25hbDxudW1iZXI+O1xuLy8gICBhZnRlcl90b2tlbj86IFdyaXRhYmxlU2lnbmFsPHN0cmluZz47XG4vLyAgIGJlZm9yZV90b2tlbj86IFdyaXRhYmxlU2lnbmFsPHN0cmluZz47XG4vLyAgIHNlYXJjaD86IFdyaXRhYmxlU2lnbmFsPHN0cmluZz47XG4vLyAgIHNlYXJjaF9pbmRleD86IFdyaXRhYmxlU2lnbmFsPG51bWJlcj47XG4vLyB9XG5cbi8vIHR5cGUgVl9pbmRleF9GID0gR2V0VmFsdWVBdFBhdGg8VGVzdCwgJ2luZGV4JywgZmFsc2U+OyAvLyBudW1iZXJcbi8vIHR5cGUgVl9pbmRleF9UID0gR2V0VmFsdWVBdFBhdGg8VGVzdCwgJ2luZGV4JywgdHJ1ZT47IC8vIG51bWJlclxuXG4vLyB0eXBlIFZfaW5mb19GID0gR2V0VmFsdWVBdFBhdGg8VGVzdCwgJ2luZm8nLCBmYWxzZT47IC8vIHsgbmFtZTogc3RyaW5nOyBhZ2U6IG51bWJlciB9XG4vLyB0eXBlIFZfaW5mb19UID0gR2V0VmFsdWVBdFBhdGg8VGVzdCwgJ2luZm8nLCB0cnVlPjsgLy8geyBuYW1lOiBzdHJpbmc7IGFnZTogbnVtYmVyIH1cbi8vIHR5cGUgVl9pbmZvX25hbWVfRiA9IEdldFZhbHVlQXRQYXRoPFRlc3QsICdpbmZvLm5hbWUnLCBmYWxzZT47IC8vIHN0cmluZ1xuLy8gdHlwZSBWX2luZm9fbmFtZV9UID0gR2V0VmFsdWVBdFBhdGg8VGVzdCwgJ2luZm8ubmFtZScsIHRydWU+OyAvLyBzdHJpbmdcbi8vIHR5cGUgVl9pbmZvX2FnZV9GID0gR2V0VmFsdWVBdFBhdGg8VGVzdCwgJ2luZm8uYWdlJywgZmFsc2U+OyAvLyBudW1iZXJcbi8vIHR5cGUgVl9pbmZvX2FnZV9UID0gR2V0VmFsdWVBdFBhdGg8VGVzdCwgJ2luZm8uYWdlJywgdHJ1ZT47IC8vIG51bWJlclxuXG4vLyAvLyBDaXR5IChzaWduYWwtd3JhcHBlZCBvYmplY3Qgd2l0aCBwbGFpbiBmaWVsZHMpXG4vLyB0eXBlIFZfY2l0eV9GID0gR2V0VmFsdWVBdFBhdGg8VGVzdCwgJ2NpdHknLCBmYWxzZT47IC8vIHsgbmFtZTogc3RyaW5nOyBjb3VudHJ5OiBzdHJpbmcgfVxuLy8gdHlwZSBWX2NpdHlfVCA9IEdldFZhbHVlQXRQYXRoPFRlc3QsICdjaXR5JywgdHJ1ZT47IC8vIFdyaXRhYmxlU2lnbmFsPHsgbmFtZTogc3RyaW5nOyBjb3VudHJ5OiBzdHJpbmcgfT5cbi8vIHR5cGUgVl9jaXR5X25hbWVfRiA9IEdldFZhbHVlQXRQYXRoPFRlc3QsICdjaXR5Lm5hbWUnLCBmYWxzZT47IC8vIHN0cmluZ1xuLy8gdHlwZSBWX2NpdHlfbmFtZV9UID0gR2V0VmFsdWVBdFBhdGg8VGVzdCwgJ2NpdHkubmFtZScsIHRydWU+OyAvLyBzdHJpbmdcbi8vIHR5cGUgVl9jaXR5X2NvdW50cnlfRiA9IEdldFZhbHVlQXRQYXRoPFRlc3QsICdjaXR5LmNvdW50cnknLCBmYWxzZT47IC8vIHN0cmluZ1xuLy8gdHlwZSBWX2NpdHlfY291bnRyeV9UID0gR2V0VmFsdWVBdFBhdGg8VGVzdCwgJ2NpdHkuY291bnRyeScsIHRydWU+OyAvLyBzdHJpbmdcblxuLy8gLy8gQWRkcmVzcyAoc2lnbmFsLXdyYXBwZWQgb2JqZWN0IHdpdGggc2lnbmFsIGxlYXZlcylcbi8vIHR5cGUgVl9hZGRyZXNzX0YgPSBHZXRWYWx1ZUF0UGF0aDxUZXN0LCAnYWRkcmVzcycsIGZhbHNlPjsgLy8geyBpcDogc3RyaW5nOyBwb3J0OiBudW1iZXIgfVxuLy8gdHlwZSBWX2FkZHJlc3NfVCA9IEdldFZhbHVlQXRQYXRoPFRlc3QsICdhZGRyZXNzJywgdHJ1ZT47IC8vIFdyaXRhYmxlU2lnbmFsPHsgaXA6IFdyaXRhYmxlU2lnbmFsPHN0cmluZz47IHBvcnQ6IFdyaXRhYmxlU2lnbmFsPG51bWJlcj4gfT5cbi8vIHR5cGUgVl9hZGRyZXNzX2lwX0YgPSBHZXRWYWx1ZUF0UGF0aDxUZXN0LCAnYWRkcmVzcy5pcCcsIGZhbHNlPjsgLy8gc3RyaW5nXG4vLyB0eXBlIFZfYWRkcmVzc19pcF9UID0gR2V0VmFsdWVBdFBhdGg8VGVzdCwgJ2FkZHJlc3MuaXAnLCB0cnVlPjsgLy8gV3JpdGFibGVTaWduYWw8c3RyaW5nPlxuLy8gdHlwZSBWX2FkZHJlc3NfcG9ydF9GID0gR2V0VmFsdWVBdFBhdGg8VGVzdCwgJ2FkZHJlc3MucG9ydCcsIGZhbHNlPjsgLy8gbnVtYmVyXG4vLyB0eXBlIFZfYWRkcmVzc19wb3J0X1QgPSBHZXRWYWx1ZUF0UGF0aDxUZXN0LCAnYWRkcmVzcy5wb3J0JywgdHJ1ZT47IC8vIFdyaXRhYmxlU2lnbmFsPG51bWJlcj5cblxuLy8gLy8gT3duZXIgKGFycmF5IG9mIHByaW1pdGl2ZXMpXG4vLyB0eXBlIFZfb3duZXJfRiA9IEdldFZhbHVlQXRQYXRoPFRlc3QsICdvd25lcicsIGZhbHNlPjsgLy8gc3RyaW5nW11cbi8vIHR5cGUgVl9vd25lcl9UID0gR2V0VmFsdWVBdFBhdGg8VGVzdCwgJ293bmVyJywgdHJ1ZT47IC8vIHN0cmluZ1tdXG4vLyB0eXBlIFZfb3duZXJfaWR4X0YgPSBHZXRWYWx1ZUF0UGF0aDxUZXN0LCAnb3duZXJbMF0nLCBmYWxzZT47IC8vIHN0cmluZ1xuLy8gdHlwZSBWX293bmVyX2lkeF9UID0gR2V0VmFsdWVBdFBhdGg8VGVzdCwgJ293bmVyWzBdJywgdHJ1ZT47IC8vIHN0cmluZ1xuXG4vLyAvLyBTdXBwb3J0IChhcnJheSBvZiBzaWduYWxzKVxuLy8gdHlwZSBWX3N1cHBvcnRfRiA9IEdldFZhbHVlQXRQYXRoPFRlc3QsICdzdXBwb3J0JywgZmFsc2U+OyAvLyBzdHJpbmdbXVxuLy8gdHlwZSBWX3N1cHBvcnRfVCA9IEdldFZhbHVlQXRQYXRoPFRlc3QsICdzdXBwb3J0JywgdHJ1ZT47IC8vIFdyaXRhYmxlU2lnbmFsPHN0cmluZz5bXVxuLy8gdHlwZSBWX3N1cHBvcnRfaWR4X0YgPSBHZXRWYWx1ZUF0UGF0aDxUZXN0LCAnc3VwcG9ydFswXScsIGZhbHNlPjsgLy8gc3RyaW5nXG4vLyB0eXBlIFZfc3VwcG9ydF9pZHhfVCA9IEdldFZhbHVlQXRQYXRoPFRlc3QsICdzdXBwb3J0WzBdJywgdHJ1ZT47IC8vIFdyaXRhYmxlU2lnbmFsPHN0cmluZz5cblxuLy8gLy8gSG9zdCAoYXJyYXkgb2Ygb2JqZWN0cyB3aXRoIG1peGVkIGxlYXZlcylcbi8vIHR5cGUgVl9ob3N0X0YgPSBHZXRWYWx1ZUF0UGF0aDxUZXN0LCAnaG9zdCcsIGZhbHNlPjsgLy8geyBpcDogc3RyaW5nOyBwb3J0OiBudW1iZXIgfVtdXG4vLyB0eXBlIFZfaG9zdF9UID0gR2V0VmFsdWVBdFBhdGg8VGVzdCwgJ2hvc3QnLCB0cnVlPjsgLy8geyBpcDogV3JpdGFibGVTaWduYWw8c3RyaW5nPjsgcG9ydDogbnVtYmVyIH1bXVxuLy8gdHlwZSBWX2hvc3RfaWR4X0YgPSBHZXRWYWx1ZUF0UGF0aDxUZXN0LCAnaG9zdFswXScsIGZhbHNlPjsgLy8geyBpcDogc3RyaW5nOyBwb3J0OiBudW1iZXIgfVxuLy8gdHlwZSBWX2hvc3RfaWR4X1QgPSBHZXRWYWx1ZUF0UGF0aDxUZXN0LCAnaG9zdFswXScsIHRydWU+OyAvLyB7IGlwOiBXcml0YWJsZVNpZ25hbDxzdHJpbmc+OyBwb3J0OiBudW1iZXIgfVxuLy8gdHlwZSBWX2hvc3RfaXBfRiA9IEdldFZhbHVlQXRQYXRoPFRlc3QsICdob3N0WzBdLmlwJywgZmFsc2U+OyAvLyBzdHJpbmdcbi8vIHR5cGUgVl9ob3N0X2lwX1QgPSBHZXRWYWx1ZUF0UGF0aDxUZXN0LCAnaG9zdFswXS5pcCcsIHRydWU+OyAvLyBXcml0YWJsZVNpZ25hbDxzdHJpbmc+XG4vLyB0eXBlIFZfaG9zdF9wb3J0X0YgPSBHZXRWYWx1ZUF0UGF0aDxUZXN0LCAnaG9zdFswXS5wb3J0JywgZmFsc2U+OyAvLyBudW1iZXJcbi8vIHR5cGUgVl9ob3N0X3BvcnRfVCA9IEdldFZhbHVlQXRQYXRoPFRlc3QsICdob3N0WzBdLnBvcnQnLCB0cnVlPjsgLy8gbnVtYmVyXG5cbi8vIC8vIGN1cnJlbmN5XG4vLyB0eXBlIFZfY3VycmVuY3lfRiA9IEdldFZhbHVlQXRQYXRoPFRlc3QsICdjb3VudHJ5WzBdLmN1cnJlbmN5JywgZmFsc2U+OyAvLyB7IG5hbWU6IHN0cmluZzsgY29kZTogc3RyaW5nOyBzeW1ib2w6IHsgLi4uIH0gfVxuLy8gdHlwZSBWX2N1cnJlbmN5X1QgPSBHZXRWYWx1ZUF0UGF0aDxUZXN0LCAnY291bnRyeVswXS5jdXJyZW5jeScsIHRydWU+OyAvLyB7IG5hbWU6IHN0cmluZzsgY29kZTogV3JpdGFibGVTaWduYWw8c3RyaW5nPjsgc3ltYm9sOiBXcml0YWJsZVNpZ25hbDx7IC4uLiB9PiB9XG4vLyB0eXBlIFZfY3VycmVuY3lfbmFtZV9GID0gR2V0VmFsdWVBdFBhdGg8VGVzdCwgJ2NvdW50cnlbMF0uY3VycmVuY3kubmFtZScsIGZhbHNlPjsgLy8gc3RyaW5nXG4vLyB0eXBlIFZfY3VycmVuY3lfbmFtZV9UID0gR2V0VmFsdWVBdFBhdGg8VGVzdCwgJ2NvdW50cnlbMF0uY3VycmVuY3kubmFtZScsIHRydWU+OyAvLyBzdHJpbmdcbi8vIHR5cGUgVl9jdXJyZW5jeV9jb2RlX0YgPSBHZXRWYWx1ZUF0UGF0aDxUZXN0LCAnY291bnRyeVswXS5jdXJyZW5jeS5jb2RlJywgZmFsc2U+OyAvLyBzdHJpbmdcbi8vIHR5cGUgVl9jdXJyZW5jeV9jb2RlX1QgPSBHZXRWYWx1ZUF0UGF0aDxUZXN0LCAnY291bnRyeVswXS5jdXJyZW5jeS5jb2RlJywgdHJ1ZT47IC8vIFdyaXRhYmxlU2lnbmFsPHN0cmluZz5cblxuLy8gLy8gY3VycmVuY3kuc3ltYm9sXG4vLyB0eXBlIFZfc3ltYm9sX0YgPSBHZXRWYWx1ZUF0UGF0aDxUZXN0LCAnY291bnRyeVswXS5jdXJyZW5jeS5zeW1ib2wnLCBmYWxzZT47IC8vIHsgdmk6IHN0cmluZzsgZW46IHN0cmluZzsgY246IHN0cmluZ1tdOyBqcDogeyB2aTogc3RyaW5nOyBlbjogc3RyaW5nIH1bXSB9XG4vLyB0eXBlIFZfc3ltYm9sX1QgPSBHZXRWYWx1ZUF0UGF0aDxUZXN0LCAnY291bnRyeVswXS5jdXJyZW5jeS5zeW1ib2wnLCB0cnVlPjsgLy8gV3JpdGFibGVTaWduYWw8eyB2aTogc3RyaW5nOyBlbjogc3RyaW5nOyBjbjogV3JpdGFibGVTaWduYWw8c3RyaW5nW10+OyBqcDogV3JpdGFibGVTaWduYWw8eyB2aTogc3RyaW5nOyBlbjogc3RyaW5nIH1bXT4gfT5cbi8vIHR5cGUgVl9zeW1ib2xfdmlfRiA9IEdldFZhbHVlQXRQYXRoPFRlc3QsICdjb3VudHJ5WzBdLmN1cnJlbmN5LnN5bWJvbC52aScsIGZhbHNlPjsgLy8gc3RyaW5nXG4vLyB0eXBlIFZfc3ltYm9sX3ZpX1QgPSBHZXRWYWx1ZUF0UGF0aDxUZXN0LCAnY291bnRyeVswXS5jdXJyZW5jeS5zeW1ib2wudmknLCB0cnVlPjsgLy8gc3RyaW5nXG4vLyB0eXBlIFZfc3ltYm9sX2VuX0YgPSBHZXRWYWx1ZUF0UGF0aDxUZXN0LCAnY291bnRyeVswXS5jdXJyZW5jeS5zeW1ib2wuZW4nLCBmYWxzZT47IC8vIHN0cmluZ1xuLy8gdHlwZSBWX3N5bWJvbF9lbl9UID0gR2V0VmFsdWVBdFBhdGg8VGVzdCwgJ2NvdW50cnlbMF0uY3VycmVuY3kuc3ltYm9sLmVuJywgdHJ1ZT47IC8vIHN0cmluZ1xuLy8gdHlwZSBWX3N5bWJvbF9jbl9GID0gR2V0VmFsdWVBdFBhdGg8VGVzdCwgJ2NvdW50cnlbMF0uY3VycmVuY3kuc3ltYm9sLmNuJywgZmFsc2U+OyAvLyBzdHJpbmdbXVxuLy8gdHlwZSBWX3N5bWJvbF9jbl9UID0gR2V0VmFsdWVBdFBhdGg8VGVzdCwgJ2NvdW50cnlbMF0uY3VycmVuY3kuc3ltYm9sLmNuJywgdHJ1ZT47IC8vIFdyaXRhYmxlU2lnbmFsPHN0cmluZ1tdPlxuLy8gdHlwZSBWX3N5bWJvbF9jbl9pZHhfRiA9IEdldFZhbHVlQXRQYXRoPFRlc3QsICdjb3VudHJ5WzBdLmN1cnJlbmN5LnN5bWJvbC5jblswXScsIGZhbHNlPjsgLy8gc3RyaW5nXG4vLyB0eXBlIFZfc3ltYm9sX2NuX2lkeF9UID0gR2V0VmFsdWVBdFBhdGg8VGVzdCwgJ2NvdW50cnlbMF0uY3VycmVuY3kuc3ltYm9sLmNuWzBdJywgdHJ1ZT47IC8vIHN0cmluZ1xuLy8gdHlwZSBWX3N5bWJvbF9qcF9GID0gR2V0VmFsdWVBdFBhdGg8VGVzdCwgJ2NvdW50cnlbMF0uY3VycmVuY3kuc3ltYm9sLmpwJywgZmFsc2U+OyAvLyB7IHZpOiBzdHJpbmc7IGVuOiBzdHJpbmcgfVtdXG4vLyB0eXBlIFZfc3ltYm9sX2pwX1QgPSBHZXRWYWx1ZUF0UGF0aDxUZXN0LCAnY291bnRyeVswXS5jdXJyZW5jeS5zeW1ib2wuanAnLCB0cnVlPjsgLy8gV3JpdGFibGVTaWduYWw8eyB2aTogc3RyaW5nOyBlbjogc3RyaW5nIH1bXT5cbi8vIHR5cGUgVl9zeW1ib2xfanBfaWR4X0YgPSBHZXRWYWx1ZUF0UGF0aDxUZXN0LCAnY291bnRyeVswXS5jdXJyZW5jeS5zeW1ib2wuanBbMF0nLCBmYWxzZT47IC8vIHsgdmk6IHN0cmluZzsgZW46IHN0cmluZyB9XG4vLyB0eXBlIFZfc3ltYm9sX2pwX2lkeF9UID0gR2V0VmFsdWVBdFBhdGg8VGVzdCwgJ2NvdW50cnlbMF0uY3VycmVuY3kuc3ltYm9sLmpwWzBdJywgdHJ1ZT47IC8vIFdyaXRhYmxlU2lnbmFsPHsgdmk6IHN0cmluZzsgZW46IHN0cmluZyB9PlxuLy8gdHlwZSBWX3N5bWJvbF9qcF92aV9GID0gR2V0VmFsdWVBdFBhdGg8VGVzdCwgJ2NvdW50cnlbMF0uY3VycmVuY3kuc3ltYm9sLmpwWzBdLnZpJywgZmFsc2U+OyAvLyBzdHJpbmdcbi8vIHR5cGUgVl9zeW1ib2xfanBfdmlfVCA9IEdldFZhbHVlQXRQYXRoPFRlc3QsICdjb3VudHJ5WzBdLmN1cnJlbmN5LnN5bWJvbC5qcFswXS52aScsIHRydWU+OyAvLyBzdHJpbmdcbi8vIHR5cGUgVl9zeW1ib2xfanBfZW5fRiA9IEdldFZhbHVlQXRQYXRoPFRlc3QsICdjb3VudHJ5WzBdLmN1cnJlbmN5LnN5bWJvbC5qcFswXS5lbicsIGZhbHNlPjsgLy8gc3RyaW5nXG4vLyB0eXBlIFZfc3ltYm9sX2pwX2VuX1QgPSBHZXRWYWx1ZUF0UGF0aDxUZXN0LCAnY291bnRyeVswXS5jdXJyZW5jeS5zeW1ib2wuanBbMF0uZW4nLCB0cnVlPjsgLy8gc3RyaW5nXG5cbi8vIHR5cGUgVl9BcnJheV9zeW1ib2xfY25fRiA9IEdldFZhbHVlQXRQYXRoPEFycmF5PFRlc3Q+LCAnWzBdLmNvdW50cnlbMF0uY3VycmVuY3kuc3ltYm9sLmNuJywgZmFsc2U+OyAvLyBzdHJpbmdbXVxuLy8gdHlwZSBWX0FycmF5X3N5bWJvbF9jbl9UID0gR2V0VmFsdWVBdFBhdGg8QXJyYXk8VGVzdD4sICdbMF0uY291bnRyeVswXS5jdXJyZW5jeS5zeW1ib2wuY24nLCB0cnVlPjsgLy8gV3JpdGFibGVTaWduYWw8c3RyaW5nW10+XG4vLyB0eXBlIFZfQXJyYXlfc3ltYm9sX2NuX2lkeF9GID0gR2V0VmFsdWVBdFBhdGg8QXJyYXk8VGVzdD4sICdbMF0uY291bnRyeVswXS5jdXJyZW5jeS5zeW1ib2wuY25bMF0nLCBmYWxzZT47IC8vIHN0cmluZ1xuLy8gdHlwZSBWX0FycmF5X3N5bWJvbF9jbl9pZHhfVCA9IEdldFZhbHVlQXRQYXRoPEFycmF5PFRlc3Q+LCAnWzBdLmNvdW50cnlbMF0uY3VycmVuY3kuc3ltYm9sLmNuWzBdJywgdHJ1ZT47IC8vIHN0cmluZ1xuXG4vLyB0eXBlIHBhdGhJQXNzaWdubWVudEl0ZW0gPSBQYXRoT2Y8SUFzc2lnbm1lbnRJdGVtPjtcbi8vIHR5cGUgcGF0aElBc3NpZ25tZW50SXRlbSA9IFBhdGhPZjx1bmtub3duPjsgLy8gc3RyaW5nXG5cbi8vIHR5cGUgVl9hc3NpZ25lZXNfRiA9IEdldFZhbHVlQXRQYXRoPElBc3NpZ25tZW50SXRlbSwgJ2Fzc2lnbmVlc1swXScsIGZhbHNlPjsgLy8gSUFzc2lnbmVlXG4iXX0=
package/esm2022/index.mjs CHANGED
@@ -1,15 +1,18 @@
1
+ export * from './aspect-ratio.interface';
1
2
  export * from './bounding-client-rect.interface';
2
- export * from './paging.interface';
3
- export * from './event-browser.interface';
4
- export * from './string.interface';
5
- export * from './template-ref.interface';
6
3
  export * from './communicate-micro.type';
7
- export * from './http-response.interface';
8
- export * from './http-process-upload.interface';
4
+ export * from './event-browser.interface';
5
+ export * from './extract-inputs.type';
6
+ export * from './file.interface';
9
7
  export * from './function.type';
10
- export * from './object.type';
8
+ export * from './generic-utilities-for-path-value.type';
9
+ export * from './http-process-upload.interface';
10
+ export * from './http-response.interface';
11
11
  export * from './language-support.type';
12
+ export * from './object.type';
13
+ export * from './paging.interface';
14
+ export * from './string.interface';
15
+ export * from './template-ref.interface';
12
16
  export * from './validator.interface';
13
- export * from './file.interface';
14
- export * from './aspect-ratio.interface';
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzLXVpL2ludGVyZmFjZXMtdHlwZXMvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsa0NBQWtDLENBQUM7QUFDakQsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyxpQ0FBaUMsQ0FBQztBQUNoRCxjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsMEJBQTBCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2JvdW5kaW5nLWNsaWVudC1yZWN0LmludGVyZmFjZSc7XG5leHBvcnQgKiBmcm9tICcuL3BhZ2luZy5pbnRlcmZhY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9ldmVudC1icm93c2VyLmludGVyZmFjZSc7XG5leHBvcnQgKiBmcm9tICcuL3N0cmluZy5pbnRlcmZhY2UnO1xuZXhwb3J0ICogZnJvbSAnLi90ZW1wbGF0ZS1yZWYuaW50ZXJmYWNlJztcbmV4cG9ydCAqIGZyb20gJy4vY29tbXVuaWNhdGUtbWljcm8udHlwZSc7XG5leHBvcnQgKiBmcm9tICcuL2h0dHAtcmVzcG9uc2UuaW50ZXJmYWNlJztcbmV4cG9ydCAqIGZyb20gJy4vaHR0cC1wcm9jZXNzLXVwbG9hZC5pbnRlcmZhY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9mdW5jdGlvbi50eXBlJztcbmV4cG9ydCAqIGZyb20gJy4vb2JqZWN0LnR5cGUnO1xuZXhwb3J0ICogZnJvbSAnLi9sYW5ndWFnZS1zdXBwb3J0LnR5cGUnO1xuZXhwb3J0ICogZnJvbSAnLi92YWxpZGF0b3IuaW50ZXJmYWNlJztcbmV4cG9ydCAqIGZyb20gJy4vZmlsZS5pbnRlcmZhY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9hc3BlY3QtcmF0aW8uaW50ZXJmYWNlJztcbiJdfQ==
17
+ export * from './date.type';
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzLXVpL2ludGVyZmFjZXMtdHlwZXMvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYyxrQ0FBa0MsQ0FBQztBQUNqRCxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYyx5Q0FBeUMsQ0FBQztBQUN4RCxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsYUFBYSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9hc3BlY3QtcmF0aW8uaW50ZXJmYWNlJztcbmV4cG9ydCAqIGZyb20gJy4vYm91bmRpbmctY2xpZW50LXJlY3QuaW50ZXJmYWNlJztcbmV4cG9ydCAqIGZyb20gJy4vY29tbXVuaWNhdGUtbWljcm8udHlwZSc7XG5leHBvcnQgKiBmcm9tICcuL2V2ZW50LWJyb3dzZXIuaW50ZXJmYWNlJztcbmV4cG9ydCAqIGZyb20gJy4vZXh0cmFjdC1pbnB1dHMudHlwZSc7XG5leHBvcnQgKiBmcm9tICcuL2ZpbGUuaW50ZXJmYWNlJztcbmV4cG9ydCAqIGZyb20gJy4vZnVuY3Rpb24udHlwZSc7XG5leHBvcnQgKiBmcm9tICcuL2dlbmVyaWMtdXRpbGl0aWVzLWZvci1wYXRoLXZhbHVlLnR5cGUnO1xuZXhwb3J0ICogZnJvbSAnLi9odHRwLXByb2Nlc3MtdXBsb2FkLmludGVyZmFjZSc7XG5leHBvcnQgKiBmcm9tICcuL2h0dHAtcmVzcG9uc2UuaW50ZXJmYWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGFuZ3VhZ2Utc3VwcG9ydC50eXBlJztcbmV4cG9ydCAqIGZyb20gJy4vb2JqZWN0LnR5cGUnO1xuZXhwb3J0ICogZnJvbSAnLi9wYWdpbmcuaW50ZXJmYWNlJztcbmV4cG9ydCAqIGZyb20gJy4vc3RyaW5nLmludGVyZmFjZSc7XG5leHBvcnQgKiBmcm9tICcuL3RlbXBsYXRlLXJlZi5pbnRlcmZhY2UnO1xuZXhwb3J0ICogZnJvbSAnLi92YWxpZGF0b3IuaW50ZXJmYWNlJztcbmV4cG9ydCAqIGZyb20gJy4vZGF0ZS50eXBlJztcbiJdfQ==
@@ -0,0 +1,10 @@
1
+ import { InputSignal, InputSignalWithTransform, ModelSignal } from '@angular/core';
2
+ type UnwrapInputSignal<T, K extends keyof T> = T[K] extends InputSignal<infer U> | ModelSignal<infer U> | InputSignalWithTransform<any, infer U> ? U : never;
3
+ type RequiredInputProperties<T> = {
4
+ [K in keyof T as T[K] extends InputSignal<infer U> | ModelSignal<infer U> | InputSignalWithTransform<any, infer U> ? (undefined extends U ? never : K) : never]: UnwrapInputSignal<T, K>;
5
+ };
6
+ type OptionalInputProperties<T> = {
7
+ [K in keyof T as T[K] extends InputSignal<infer U> | ModelSignal<infer U> | InputSignalWithTransform<any, infer U> ? (undefined extends U ? K : never) : never]?: UnwrapInputSignal<T, K>;
8
+ };
9
+ export type ExtractInputs<T, R extends boolean = true> = (R extends true ? RequiredInputProperties<T> : Partial<RequiredInputProperties<T>>) & OptionalInputProperties<T>;
10
+ export {};
@@ -1,5 +1,191 @@
1
1
  /* eslint-disable @typescript-eslint/no-explicit-any */
2
2
 
3
+ /** ====================== (Tuỳ chọn) Ví dụ nhanh ====================== **/
4
+ // export interface IComment {
5
+ // comments?: WritableSignal<ISubComment>;
6
+ // }
7
+ // export interface ISubComment {
8
+ // store?: WritableSignal<Array<WritableSignal<IComment>>>;
9
+ // data?: WritableSignal<Array<WritableSignal<IComment>>>;
10
+ // specific_temp_data?: WritableSignal<Array<WritableSignal<IComment>>>;
11
+ // paging?: WritableSignal<{
12
+ // cursors?: WritableSignal<{
13
+ // after?: WritableSignal<string>;
14
+ // before?: WritableSignal<string>;
15
+ // }>;
16
+ // before?: WritableSignal<string>;
17
+ // after?: WritableSignal<string>;
18
+ // next?: WritableSignal<string>;
19
+ // previous?: WritableSignal<string>;
20
+ // }>;
21
+ // summary?: WritableSignal<{
22
+ // can_comment?: WritableSignal<boolean>;
23
+ // canorder_comment?: WritableSignal<string>;
24
+ // total_count?: WritableSignal<number>;
25
+ // }>;
26
+ // }
27
+ // type V_comments_F = GetValueAtPath<IComment, 'comments', false>; // ISubComment
28
+ // type V_comments_T = GetValueAtPath<IComment, 'comments', true>; // WritableSignal<ISubComment>
29
+ // type V_comments_store_F = GetValueAtPath<IComment, 'comments.data', false>; // Array<WritableSignal<IComment>>
30
+ // type V_comments_store_T = GetValueAtPath<IComment, 'comments.data', true>; // WritableSignal<Array<WritableSignal<IComment>>>
31
+ // export interface Test {
32
+ // specific_query?: WritableSignal<IAssignmentItemQuery>;
33
+ // data: WritableSignal<Array<WritableSignal<IAssignmentItem>>>;
34
+ // index: number;
35
+ // info: {
36
+ // name: string;
37
+ // age: number;
38
+ // };
39
+ // city: WritableSignal<{
40
+ // name: string;
41
+ // country: string;
42
+ // }>;
43
+ // address: WritableSignal<{
44
+ // ip: WritableSignal<string>;
45
+ // port: WritableSignal<number>;
46
+ // }>;
47
+ // owner: Array<string>;
48
+ // support: Array<WritableSignal<string>>;
49
+ // host: Array<{
50
+ // ip: WritableSignal<string>;
51
+ // port: number;
52
+ // }>;
53
+ // country: WritableSignal<
54
+ // Array<
55
+ // WritableSignal<{
56
+ // name: WritableSignal<{
57
+ // vi: string;
58
+ // en: string;
59
+ // }>;
60
+ // code: WritableSignal<{
61
+ // vi: WritableSignal<string>;
62
+ // en: WritableSignal<string>;
63
+ // }>;
64
+ // flag: WritableSignal<string>;
65
+ // phone_code: string;
66
+ // currency: {
67
+ // name: string;
68
+ // code: WritableSignal<string>;
69
+ // symbol: WritableSignal<{
70
+ // vi: string;
71
+ // en: string;
72
+ // cn: WritableSignal<Array<string>>;
73
+ // jp: WritableSignal<
74
+ // Array<
75
+ // WritableSignal<{
76
+ // vi: string;
77
+ // en: string;
78
+ // }>
79
+ // >
80
+ // >;
81
+ // }>;
82
+ // };
83
+ // }>
84
+ // >
85
+ // >;
86
+ // }
87
+ // interface IAssignmentItem {
88
+ // id: WritableSignal<string>;
89
+ // name: WritableSignal<string>;
90
+ // description: WritableSignal<string>;
91
+ // created_at: WritableSignal<string>;
92
+ // updated_at: WritableSignal<string>;
93
+ // assignees?: WritableSignal<Array<WritableSignal<IAssignee>>>;
94
+ // }
95
+ // export interface IAssignee {
96
+ // assignee_id?: WritableSignal<string>;
97
+ // conversation_id?: WritableSignal<string>;
98
+ // created_time?: WritableSignal<string>;
99
+ // created_user?: WritableSignal<string>;
100
+ // id?: WritableSignal<string>;
101
+ // note?: WritableSignal<string>;
102
+ // status?: WritableSignal<number>;
103
+ // assign_tag_activity_status?: WritableSignal<number>;
104
+ // comment_id?: WritableSignal<string>;
105
+ // rating_id?: WritableSignal<string>;
106
+ // }
107
+ // export interface IAssignmentItemQuery {
108
+ // per_page: WritableSignal<number>;
109
+ // after_token?: WritableSignal<string>;
110
+ // before_token?: WritableSignal<string>;
111
+ // search?: WritableSignal<string>;
112
+ // search_index?: WritableSignal<number>;
113
+ // }
114
+ // type V_index_F = GetValueAtPath<Test, 'index', false>; // number
115
+ // type V_index_T = GetValueAtPath<Test, 'index', true>; // number
116
+ // type V_info_F = GetValueAtPath<Test, 'info', false>; // { name: string; age: number }
117
+ // type V_info_T = GetValueAtPath<Test, 'info', true>; // { name: string; age: number }
118
+ // type V_info_name_F = GetValueAtPath<Test, 'info.name', false>; // string
119
+ // type V_info_name_T = GetValueAtPath<Test, 'info.name', true>; // string
120
+ // type V_info_age_F = GetValueAtPath<Test, 'info.age', false>; // number
121
+ // type V_info_age_T = GetValueAtPath<Test, 'info.age', true>; // number
122
+ // // City (signal-wrapped object with plain fields)
123
+ // type V_city_F = GetValueAtPath<Test, 'city', false>; // { name: string; country: string }
124
+ // type V_city_T = GetValueAtPath<Test, 'city', true>; // WritableSignal<{ name: string; country: string }>
125
+ // type V_city_name_F = GetValueAtPath<Test, 'city.name', false>; // string
126
+ // type V_city_name_T = GetValueAtPath<Test, 'city.name', true>; // string
127
+ // type V_city_country_F = GetValueAtPath<Test, 'city.country', false>; // string
128
+ // type V_city_country_T = GetValueAtPath<Test, 'city.country', true>; // string
129
+ // // Address (signal-wrapped object with signal leaves)
130
+ // type V_address_F = GetValueAtPath<Test, 'address', false>; // { ip: string; port: number }
131
+ // type V_address_T = GetValueAtPath<Test, 'address', true>; // WritableSignal<{ ip: WritableSignal<string>; port: WritableSignal<number> }>
132
+ // type V_address_ip_F = GetValueAtPath<Test, 'address.ip', false>; // string
133
+ // type V_address_ip_T = GetValueAtPath<Test, 'address.ip', true>; // WritableSignal<string>
134
+ // type V_address_port_F = GetValueAtPath<Test, 'address.port', false>; // number
135
+ // type V_address_port_T = GetValueAtPath<Test, 'address.port', true>; // WritableSignal<number>
136
+ // // Owner (array of primitives)
137
+ // type V_owner_F = GetValueAtPath<Test, 'owner', false>; // string[]
138
+ // type V_owner_T = GetValueAtPath<Test, 'owner', true>; // string[]
139
+ // type V_owner_idx_F = GetValueAtPath<Test, 'owner[0]', false>; // string
140
+ // type V_owner_idx_T = GetValueAtPath<Test, 'owner[0]', true>; // string
141
+ // // Support (array of signals)
142
+ // type V_support_F = GetValueAtPath<Test, 'support', false>; // string[]
143
+ // type V_support_T = GetValueAtPath<Test, 'support', true>; // WritableSignal<string>[]
144
+ // type V_support_idx_F = GetValueAtPath<Test, 'support[0]', false>; // string
145
+ // type V_support_idx_T = GetValueAtPath<Test, 'support[0]', true>; // WritableSignal<string>
146
+ // // Host (array of objects with mixed leaves)
147
+ // type V_host_F = GetValueAtPath<Test, 'host', false>; // { ip: string; port: number }[]
148
+ // type V_host_T = GetValueAtPath<Test, 'host', true>; // { ip: WritableSignal<string>; port: number }[]
149
+ // type V_host_idx_F = GetValueAtPath<Test, 'host[0]', false>; // { ip: string; port: number }
150
+ // type V_host_idx_T = GetValueAtPath<Test, 'host[0]', true>; // { ip: WritableSignal<string>; port: number }
151
+ // type V_host_ip_F = GetValueAtPath<Test, 'host[0].ip', false>; // string
152
+ // type V_host_ip_T = GetValueAtPath<Test, 'host[0].ip', true>; // WritableSignal<string>
153
+ // type V_host_port_F = GetValueAtPath<Test, 'host[0].port', false>; // number
154
+ // type V_host_port_T = GetValueAtPath<Test, 'host[0].port', true>; // number
155
+ // // currency
156
+ // type V_currency_F = GetValueAtPath<Test, 'country[0].currency', false>; // { name: string; code: string; symbol: { ... } }
157
+ // type V_currency_T = GetValueAtPath<Test, 'country[0].currency', true>; // { name: string; code: WritableSignal<string>; symbol: WritableSignal<{ ... }> }
158
+ // type V_currency_name_F = GetValueAtPath<Test, 'country[0].currency.name', false>; // string
159
+ // type V_currency_name_T = GetValueAtPath<Test, 'country[0].currency.name', true>; // string
160
+ // type V_currency_code_F = GetValueAtPath<Test, 'country[0].currency.code', false>; // string
161
+ // type V_currency_code_T = GetValueAtPath<Test, 'country[0].currency.code', true>; // WritableSignal<string>
162
+ // // currency.symbol
163
+ // type V_symbol_F = GetValueAtPath<Test, 'country[0].currency.symbol', false>; // { vi: string; en: string; cn: string[]; jp: { vi: string; en: string }[] }
164
+ // type V_symbol_T = GetValueAtPath<Test, 'country[0].currency.symbol', true>; // WritableSignal<{ vi: string; en: string; cn: WritableSignal<string[]>; jp: WritableSignal<{ vi: string; en: string }[]> }>
165
+ // type V_symbol_vi_F = GetValueAtPath<Test, 'country[0].currency.symbol.vi', false>; // string
166
+ // type V_symbol_vi_T = GetValueAtPath<Test, 'country[0].currency.symbol.vi', true>; // string
167
+ // type V_symbol_en_F = GetValueAtPath<Test, 'country[0].currency.symbol.en', false>; // string
168
+ // type V_symbol_en_T = GetValueAtPath<Test, 'country[0].currency.symbol.en', true>; // string
169
+ // type V_symbol_cn_F = GetValueAtPath<Test, 'country[0].currency.symbol.cn', false>; // string[]
170
+ // type V_symbol_cn_T = GetValueAtPath<Test, 'country[0].currency.symbol.cn', true>; // WritableSignal<string[]>
171
+ // type V_symbol_cn_idx_F = GetValueAtPath<Test, 'country[0].currency.symbol.cn[0]', false>; // string
172
+ // type V_symbol_cn_idx_T = GetValueAtPath<Test, 'country[0].currency.symbol.cn[0]', true>; // string
173
+ // type V_symbol_jp_F = GetValueAtPath<Test, 'country[0].currency.symbol.jp', false>; // { vi: string; en: string }[]
174
+ // type V_symbol_jp_T = GetValueAtPath<Test, 'country[0].currency.symbol.jp', true>; // WritableSignal<{ vi: string; en: string }[]>
175
+ // type V_symbol_jp_idx_F = GetValueAtPath<Test, 'country[0].currency.symbol.jp[0]', false>; // { vi: string; en: string }
176
+ // type V_symbol_jp_idx_T = GetValueAtPath<Test, 'country[0].currency.symbol.jp[0]', true>; // WritableSignal<{ vi: string; en: string }>
177
+ // type V_symbol_jp_vi_F = GetValueAtPath<Test, 'country[0].currency.symbol.jp[0].vi', false>; // string
178
+ // type V_symbol_jp_vi_T = GetValueAtPath<Test, 'country[0].currency.symbol.jp[0].vi', true>; // string
179
+ // type V_symbol_jp_en_F = GetValueAtPath<Test, 'country[0].currency.symbol.jp[0].en', false>; // string
180
+ // type V_symbol_jp_en_T = GetValueAtPath<Test, 'country[0].currency.symbol.jp[0].en', true>; // string
181
+ // type V_Array_symbol_cn_F = GetValueAtPath<Array<Test>, '[0].country[0].currency.symbol.cn', false>; // string[]
182
+ // type V_Array_symbol_cn_T = GetValueAtPath<Array<Test>, '[0].country[0].currency.symbol.cn', true>; // WritableSignal<string[]>
183
+ // type V_Array_symbol_cn_idx_F = GetValueAtPath<Array<Test>, '[0].country[0].currency.symbol.cn[0]', false>; // string
184
+ // type V_Array_symbol_cn_idx_T = GetValueAtPath<Array<Test>, '[0].country[0].currency.symbol.cn[0]', true>; // string
185
+ // type pathIAssignmentItem = PathOf<IAssignmentItem>;
186
+ // type pathIAssignmentItem = PathOf<unknown>; // string
187
+ // type V_assignees_F = GetValueAtPath<IAssignmentItem, 'assignees[0]', false>; // IAssignee
188
+
3
189
  // | "fr" // Tiếng Pháp
4
190
  // | "de" // Tiếng Đức
5
191
  // | "es" // Tiếng Tây Ban Nha
@@ -1 +1 @@
1
- {"version":3,"file":"libs-ui-interfaces-types.mjs","sources":["../../../../libs-ui/interfaces-types/src/event-browser.interface.ts","../../../../libs-ui/interfaces-types/src/language-support.type.ts","../../../../libs-ui/interfaces-types/src/libs-ui-interfaces-types.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n\nexport interface IEvent extends Event, MouseEvent, IEventCustom, KeyboardEvent, ErrorEvent {\n target: IEventTarget;\n keyCode: number;\n dataTransfer?: DataTransfer;\n clipboardData?: DataTransfer;\n which: number;\n}\n\nexport interface IEventTarget extends EventTarget {\n value: any;\n selectionStart: number;\n scrollHeight: number;\n scrollTop: number;\n offsetHeight: number;\n style: any;\n files?: any;\n src?: string;\n innerHTML: any;\n textContent: string;\n parentElement: any;\n getAttribute: (key: string) => any;\n setAttribute: (key: string, value: any) => void;\n className: string;\n}\nexport interface IEventCustom {\n target: IEventTarget;\n data: any;\n keyCode?: number;\n fakeEvent?: boolean;\n which?: number;\n inputType?: 'deleteContentBackward' | 'insertText' | 'insertFromPaste' | 'insertCompositionText';\n preventDefault: () => void;\n}\n","export type TYPE_LANGUAGE_SUPPORT =\n | 'vi' // Tiếng Việt\n | 'en'; // Tiếng Anh\n// | \"fr\" // Tiếng Pháp\n// | \"de\" // Tiếng Đức\n// | \"es\" // Tiếng Tây Ban Nha\n// | \"zh\" // Tiếng Trung (Giản thể)\n// | \"zh-TW\" // Tiếng Trung (Phồn thể)\n// | \"ja\" // Tiếng Nhật\n// | \"ko\" // Tiếng Hàn\n// | \"ru\" // Tiếng Nga\n// | \"it\" // Tiếng Ý\n// | \"pt\" // Tiếng Bồ Đào Nha\n// | \"th\" // Tiếng Thái\n// | \"id\" // Tiếng Indonesia\n// | \"ms\" // Tiếng Malaysia\n// | \"ar\" // Tiếng Ả Rập\n// | \"hi\" // Tiếng Hindi\n// | \"bn\" // Tiếng Bengal\n// | \"tr\" // Tiếng Thổ Nhĩ Kỳ\n// | \"nl\" // Tiếng Hà Lan\n// | \"km\" // Tiếng Khmer (Campuchia)\n// | \"lo\" // Tiếng Lào\n// | \"my\" // Tiếng Miến Điện (Myanmar)\n// | \"tl\" // Tiếng Tagalog (Philippines)\n// | \"ceb\" // Tiếng Cebuano (Philippines)\n// | \"jv\" // Tiếng Java (Indonesia)\n// | \"su\"; // Tiếng Sundanese (Indonesia)\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"AAAA;;ACGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3BA;;AAEG"}
1
+ {"version":3,"file":"libs-ui-interfaces-types.mjs","sources":["../../../../libs-ui/interfaces-types/src/event-browser.interface.ts","../../../../libs-ui/interfaces-types/src/generic-utilities-for-path-value.type.ts","../../../../libs-ui/interfaces-types/src/language-support.type.ts","../../../../libs-ui/interfaces-types/src/libs-ui-interfaces-types.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n\nexport interface IEvent extends Event, MouseEvent, IEventCustom, KeyboardEvent, ErrorEvent {\n target: IEventTarget;\n keyCode: number;\n dataTransfer?: DataTransfer;\n clipboardData?: DataTransfer;\n which: number;\n}\n\nexport interface IEventTarget extends EventTarget {\n value: any;\n selectionStart: number;\n scrollHeight: number;\n scrollTop: number;\n offsetHeight: number;\n style: any;\n files?: any;\n src?: string;\n innerHTML: any;\n textContent: string;\n parentElement: any;\n getAttribute: (key: string) => any;\n setAttribute: (key: string, value: any) => void;\n className: string;\n}\nexport interface IEventCustom {\n target: IEventTarget;\n data: any;\n keyCode?: number;\n fakeEvent?: boolean;\n which?: number;\n inputType?: 'deleteContentBackward' | 'insertText' | 'insertFromPaste' | 'insertCompositionText';\n preventDefault: () => void;\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Signal } from '@angular/core';\n\n/** ====================== Helpers: unwrap & shape ====================== **/\n\n// Unwrap một lớp Signal\ntype UnwrapSignal<T> = T extends Signal<infer U> ? U : T;\n\n// Unwrap toàn bộ Signal\ntype UnwrapAllSignals<T> = T extends Signal<infer U> ? UnwrapAllSignals<U> : T;\n\n// Loại bỏ undefined | null sau khi unwrap 1 lớp Signal để soi shape\ntype Clean<T> = Exclude<UnwrapSignal<T>, undefined | null>;\n\n// Key dạng string\ntype StrKeys<T> = Extract<keyof T, string>;\n\n// Base type sau khi unwrap toàn bộ Signal (tiện dùng nhiều nơi)\ntype Base<T> = UnwrapAllSignals<T>;\n\n/** ====================== Array helpers ====================== **/\n\n// Lấy element type của mảng, tự làm sạch (bỏ undefined/null, unwrap Signal trước khi kiểm tra)\ntype ArrayElementRaw<T> = Base<Clean<T>> extends ReadonlyArray<infer U> ? U : Base<Clean<T>> extends (infer U)[] ? U : never;\n\n// Kiểm tra array-like sau khi unwrap toàn bộ Signal và làm sạch optional\ntype IsArrayLike<T> = Base<Clean<T>> extends readonly unknown[] ? true : Base<Clean<T>> extends unknown[] ? true : false;\n\n// Kiểm tra object không phải array sau khi unwrap toàn bộ Signal và làm sạch optional\ntype IsNonArrayObject<T> = Base<Clean<T>> extends object ? (Base<Clean<T>> extends readonly unknown[] ? false : Base<Clean<T>> extends unknown[] ? false : true) : false;\n\n/** ====================== DOM/Evt guard ====================== **/\n\ntype IsDOMType<T> = Base<T> extends Event | Node | Document | Element | Window | CSSStyleDeclaration | CSSRule | CSSStyleSheet ? true : false;\n\n/** ====================== Finalize (giữ Signal nếu cần) ====================== **/\n\ntype Finalize<T, R extends boolean> = R extends true ? T : UnwrapAllSignals<T>;\n\n/** ====================== Depth limiter (hybrid, mặc định 6) ====================== **/\n\ntype Dec<N extends number> = N extends 6 ? 5 : N extends 5 ? 4 : N extends 4 ? 3 : N extends 3 ? 2 : N extends 2 ? 1 : N extends 1 ? 0 : 0;\n\n/** ====================== Path builders (Depth-limited) ====================== **/\n\n// Path cho array ở root/field\ntype PathForArray<T, Depth extends number> = [Depth] extends [0] ? never : `[${number}]` | (PathOf<ArrayElementRaw<T>, Dec<Depth>> extends never ? never : `[${number}].${PathOf<ArrayElementRaw<T>, Dec<Depth>>}`);\n\n// Path cho từng prop K tùy kiểu giá trị\ntype PathForProp<TProp, K extends string, Depth extends number> = [Depth] extends [0]\n ? K\n : IsArrayLike<TProp> extends true\n ? `${K}` | `${K}[${number}]` | (PathOf<ArrayElementRaw<TProp>, Dec<Depth>> extends never ? never : `${K}[${number}].${PathOf<ArrayElementRaw<TProp>, Dec<Depth>>}`)\n : IsNonArrayObject<TProp> extends true\n ? `${K}` | (PathOf<Clean<TProp>, Dec<Depth>> extends never ? never : `${K}.${PathOf<Clean<TProp>, Dec<Depth>>}`)\n : `${K}`;\n\n// Path cho object (map từng key)\ntype PathForObject<T, Depth extends number> = {\n [K in StrKeys<T>]: PathForProp<T[K], K, Depth>;\n}[StrKeys<T>];\n\n/** ====================== Public: PathOf (hybrid, Depth mặc định 6) ====================== **/\n\nexport type PathOf<TRaw, Depth extends number = 6> =\n IsDOMType<TRaw> extends true ? any : [Depth] extends [0] ? never : Base<TRaw> extends readonly unknown[] | unknown[] ? PathForArray<TRaw, Depth> : Base<TRaw> extends object ? PathForObject<Base<TRaw>, Depth> : string;\n\n/** ====================== Resolve giá trị theo path ====================== **/\n\n// GetInternal: đi theo string path để resolve type giá trị cuối cùng\ntype GetInternal<TRaw, P extends string, R extends boolean> =\n // [x].Rest (đánh index vào root array)\n P extends `[${infer I}].${infer Rest}`\n ? I extends `${number}`\n ? GetInternal<ArrayElementRaw<TRaw>, Rest, R>\n : any\n : // [x] (chỉ index)\n P extends `[${infer I}]`\n ? I extends `${number}`\n ? Finalize<ArrayElementRaw<TRaw>, R>\n : any\n : // K[x].Rest (đánh index vào field mảng)\n P extends `${infer K}[${infer I}].${infer Rest}`\n ? K extends StrKeys<Clean<Base<TRaw>>>\n ? I extends `${number}`\n ? GetInternal<ArrayElementRaw<Clean<Base<TRaw>>[K]>, Rest, R>\n : any\n : any\n : // K.Rest (đi sâu vào object)\n P extends `${infer K}.${infer Rest}`\n ? K extends StrKeys<Clean<Base<TRaw>>>\n ? IsArrayLike<Clean<Base<TRaw>>[K]> extends true\n ? any // không hỗ trợ dot vào phần tử mảng khi thiếu index\n : GetInternal<Clean<Base<TRaw>>[K], Rest, R>\n : any\n : // K[<number>] (kết thúc ở index)\n P extends `${infer K}[${infer I}]`\n ? K extends StrKeys<Clean<Base<TRaw>>>\n ? I extends `${number}`\n ? Finalize<ArrayElementRaw<Clean<Base<TRaw>>[K]>, R>\n : any\n : any\n : // K (kết thúc ở key)\n P extends `${infer K}`\n ? K extends StrKeys<Clean<Base<TRaw>>>\n ? Finalize<Clean<Base<TRaw>>[K], R>\n : any\n : any;\n\n/** ====================== Public: GetValueAtPath & GetReturnType ====================== **/\n\n// Resolve kiểu giá trị tại path P. Nếu R=true, giữ nguyên Signal; mặc định R=false sẽ unwrap toàn bộ Signal.\nexport type GetValueAtPath<TRaw, P extends PathOf<TRaw>, R extends boolean = false> = GetInternal<TRaw, P, R>;\n\n// Kiểu trả về của get() dựa trên defaultValue D\nexport type GetReturnType<O, P extends PathOf<O>, KS extends boolean, D> = D extends undefined ? GetValueAtPath<O, P, KS> : D;\n\n/** ====================== (Tuỳ chọn) Ví dụ nhanh ====================== **/\n\n// export interface IComment {\n// comments?: WritableSignal<ISubComment>;\n// }\n\n// export interface ISubComment {\n// store?: WritableSignal<Array<WritableSignal<IComment>>>;\n// data?: WritableSignal<Array<WritableSignal<IComment>>>;\n// specific_temp_data?: WritableSignal<Array<WritableSignal<IComment>>>;\n// paging?: WritableSignal<{\n// cursors?: WritableSignal<{\n// after?: WritableSignal<string>;\n// before?: WritableSignal<string>;\n// }>;\n// before?: WritableSignal<string>;\n// after?: WritableSignal<string>;\n// next?: WritableSignal<string>;\n// previous?: WritableSignal<string>;\n// }>;\n// summary?: WritableSignal<{\n// can_comment?: WritableSignal<boolean>;\n// canorder_comment?: WritableSignal<string>;\n// total_count?: WritableSignal<number>;\n// }>;\n// }\n\n// type V_comments_F = GetValueAtPath<IComment, 'comments', false>; // ISubComment\n// type V_comments_T = GetValueAtPath<IComment, 'comments', true>; // WritableSignal<ISubComment>\n\n// type V_comments_store_F = GetValueAtPath<IComment, 'comments.data', false>; // Array<WritableSignal<IComment>>\n// type V_comments_store_T = GetValueAtPath<IComment, 'comments.data', true>; // WritableSignal<Array<WritableSignal<IComment>>>\n\n// export interface Test {\n// specific_query?: WritableSignal<IAssignmentItemQuery>;\n\n// data: WritableSignal<Array<WritableSignal<IAssignmentItem>>>;\n\n// index: number;\n// info: {\n// name: string;\n// age: number;\n// };\n// city: WritableSignal<{\n// name: string;\n// country: string;\n// }>;\n// address: WritableSignal<{\n// ip: WritableSignal<string>;\n// port: WritableSignal<number>;\n// }>;\n// owner: Array<string>;\n// support: Array<WritableSignal<string>>;\n// host: Array<{\n// ip: WritableSignal<string>;\n// port: number;\n// }>;\n\n// country: WritableSignal<\n// Array<\n// WritableSignal<{\n// name: WritableSignal<{\n// vi: string;\n// en: string;\n// }>;\n// code: WritableSignal<{\n// vi: WritableSignal<string>;\n// en: WritableSignal<string>;\n// }>;\n// flag: WritableSignal<string>;\n// phone_code: string;\n// currency: {\n// name: string;\n// code: WritableSignal<string>;\n// symbol: WritableSignal<{\n// vi: string;\n// en: string;\n// cn: WritableSignal<Array<string>>;\n// jp: WritableSignal<\n// Array<\n// WritableSignal<{\n// vi: string;\n// en: string;\n// }>\n// >\n// >;\n// }>;\n// };\n// }>\n// >\n// >;\n// }\n\n// interface IAssignmentItem {\n// id: WritableSignal<string>;\n// name: WritableSignal<string>;\n// description: WritableSignal<string>;\n// created_at: WritableSignal<string>;\n// updated_at: WritableSignal<string>;\n// assignees?: WritableSignal<Array<WritableSignal<IAssignee>>>;\n// }\n\n// export interface IAssignee {\n// assignee_id?: WritableSignal<string>;\n// conversation_id?: WritableSignal<string>;\n// created_time?: WritableSignal<string>;\n// created_user?: WritableSignal<string>;\n// id?: WritableSignal<string>;\n// note?: WritableSignal<string>;\n// status?: WritableSignal<number>;\n// assign_tag_activity_status?: WritableSignal<number>;\n// comment_id?: WritableSignal<string>;\n// rating_id?: WritableSignal<string>;\n// }\n\n// export interface IAssignmentItemQuery {\n// per_page: WritableSignal<number>;\n// after_token?: WritableSignal<string>;\n// before_token?: WritableSignal<string>;\n// search?: WritableSignal<string>;\n// search_index?: WritableSignal<number>;\n// }\n\n// type V_index_F = GetValueAtPath<Test, 'index', false>; // number\n// type V_index_T = GetValueAtPath<Test, 'index', true>; // number\n\n// type V_info_F = GetValueAtPath<Test, 'info', false>; // { name: string; age: number }\n// type V_info_T = GetValueAtPath<Test, 'info', true>; // { name: string; age: number }\n// type V_info_name_F = GetValueAtPath<Test, 'info.name', false>; // string\n// type V_info_name_T = GetValueAtPath<Test, 'info.name', true>; // string\n// type V_info_age_F = GetValueAtPath<Test, 'info.age', false>; // number\n// type V_info_age_T = GetValueAtPath<Test, 'info.age', true>; // number\n\n// // City (signal-wrapped object with plain fields)\n// type V_city_F = GetValueAtPath<Test, 'city', false>; // { name: string; country: string }\n// type V_city_T = GetValueAtPath<Test, 'city', true>; // WritableSignal<{ name: string; country: string }>\n// type V_city_name_F = GetValueAtPath<Test, 'city.name', false>; // string\n// type V_city_name_T = GetValueAtPath<Test, 'city.name', true>; // string\n// type V_city_country_F = GetValueAtPath<Test, 'city.country', false>; // string\n// type V_city_country_T = GetValueAtPath<Test, 'city.country', true>; // string\n\n// // Address (signal-wrapped object with signal leaves)\n// type V_address_F = GetValueAtPath<Test, 'address', false>; // { ip: string; port: number }\n// type V_address_T = GetValueAtPath<Test, 'address', true>; // WritableSignal<{ ip: WritableSignal<string>; port: WritableSignal<number> }>\n// type V_address_ip_F = GetValueAtPath<Test, 'address.ip', false>; // string\n// type V_address_ip_T = GetValueAtPath<Test, 'address.ip', true>; // WritableSignal<string>\n// type V_address_port_F = GetValueAtPath<Test, 'address.port', false>; // number\n// type V_address_port_T = GetValueAtPath<Test, 'address.port', true>; // WritableSignal<number>\n\n// // Owner (array of primitives)\n// type V_owner_F = GetValueAtPath<Test, 'owner', false>; // string[]\n// type V_owner_T = GetValueAtPath<Test, 'owner', true>; // string[]\n// type V_owner_idx_F = GetValueAtPath<Test, 'owner[0]', false>; // string\n// type V_owner_idx_T = GetValueAtPath<Test, 'owner[0]', true>; // string\n\n// // Support (array of signals)\n// type V_support_F = GetValueAtPath<Test, 'support', false>; // string[]\n// type V_support_T = GetValueAtPath<Test, 'support', true>; // WritableSignal<string>[]\n// type V_support_idx_F = GetValueAtPath<Test, 'support[0]', false>; // string\n// type V_support_idx_T = GetValueAtPath<Test, 'support[0]', true>; // WritableSignal<string>\n\n// // Host (array of objects with mixed leaves)\n// type V_host_F = GetValueAtPath<Test, 'host', false>; // { ip: string; port: number }[]\n// type V_host_T = GetValueAtPath<Test, 'host', true>; // { ip: WritableSignal<string>; port: number }[]\n// type V_host_idx_F = GetValueAtPath<Test, 'host[0]', false>; // { ip: string; port: number }\n// type V_host_idx_T = GetValueAtPath<Test, 'host[0]', true>; // { ip: WritableSignal<string>; port: number }\n// type V_host_ip_F = GetValueAtPath<Test, 'host[0].ip', false>; // string\n// type V_host_ip_T = GetValueAtPath<Test, 'host[0].ip', true>; // WritableSignal<string>\n// type V_host_port_F = GetValueAtPath<Test, 'host[0].port', false>; // number\n// type V_host_port_T = GetValueAtPath<Test, 'host[0].port', true>; // number\n\n// // currency\n// type V_currency_F = GetValueAtPath<Test, 'country[0].currency', false>; // { name: string; code: string; symbol: { ... } }\n// type V_currency_T = GetValueAtPath<Test, 'country[0].currency', true>; // { name: string; code: WritableSignal<string>; symbol: WritableSignal<{ ... }> }\n// type V_currency_name_F = GetValueAtPath<Test, 'country[0].currency.name', false>; // string\n// type V_currency_name_T = GetValueAtPath<Test, 'country[0].currency.name', true>; // string\n// type V_currency_code_F = GetValueAtPath<Test, 'country[0].currency.code', false>; // string\n// type V_currency_code_T = GetValueAtPath<Test, 'country[0].currency.code', true>; // WritableSignal<string>\n\n// // currency.symbol\n// type V_symbol_F = GetValueAtPath<Test, 'country[0].currency.symbol', false>; // { vi: string; en: string; cn: string[]; jp: { vi: string; en: string }[] }\n// type V_symbol_T = GetValueAtPath<Test, 'country[0].currency.symbol', true>; // WritableSignal<{ vi: string; en: string; cn: WritableSignal<string[]>; jp: WritableSignal<{ vi: string; en: string }[]> }>\n// type V_symbol_vi_F = GetValueAtPath<Test, 'country[0].currency.symbol.vi', false>; // string\n// type V_symbol_vi_T = GetValueAtPath<Test, 'country[0].currency.symbol.vi', true>; // string\n// type V_symbol_en_F = GetValueAtPath<Test, 'country[0].currency.symbol.en', false>; // string\n// type V_symbol_en_T = GetValueAtPath<Test, 'country[0].currency.symbol.en', true>; // string\n// type V_symbol_cn_F = GetValueAtPath<Test, 'country[0].currency.symbol.cn', false>; // string[]\n// type V_symbol_cn_T = GetValueAtPath<Test, 'country[0].currency.symbol.cn', true>; // WritableSignal<string[]>\n// type V_symbol_cn_idx_F = GetValueAtPath<Test, 'country[0].currency.symbol.cn[0]', false>; // string\n// type V_symbol_cn_idx_T = GetValueAtPath<Test, 'country[0].currency.symbol.cn[0]', true>; // string\n// type V_symbol_jp_F = GetValueAtPath<Test, 'country[0].currency.symbol.jp', false>; // { vi: string; en: string }[]\n// type V_symbol_jp_T = GetValueAtPath<Test, 'country[0].currency.symbol.jp', true>; // WritableSignal<{ vi: string; en: string }[]>\n// type V_symbol_jp_idx_F = GetValueAtPath<Test, 'country[0].currency.symbol.jp[0]', false>; // { vi: string; en: string }\n// type V_symbol_jp_idx_T = GetValueAtPath<Test, 'country[0].currency.symbol.jp[0]', true>; // WritableSignal<{ vi: string; en: string }>\n// type V_symbol_jp_vi_F = GetValueAtPath<Test, 'country[0].currency.symbol.jp[0].vi', false>; // string\n// type V_symbol_jp_vi_T = GetValueAtPath<Test, 'country[0].currency.symbol.jp[0].vi', true>; // string\n// type V_symbol_jp_en_F = GetValueAtPath<Test, 'country[0].currency.symbol.jp[0].en', false>; // string\n// type V_symbol_jp_en_T = GetValueAtPath<Test, 'country[0].currency.symbol.jp[0].en', true>; // string\n\n// type V_Array_symbol_cn_F = GetValueAtPath<Array<Test>, '[0].country[0].currency.symbol.cn', false>; // string[]\n// type V_Array_symbol_cn_T = GetValueAtPath<Array<Test>, '[0].country[0].currency.symbol.cn', true>; // WritableSignal<string[]>\n// type V_Array_symbol_cn_idx_F = GetValueAtPath<Array<Test>, '[0].country[0].currency.symbol.cn[0]', false>; // string\n// type V_Array_symbol_cn_idx_T = GetValueAtPath<Array<Test>, '[0].country[0].currency.symbol.cn[0]', true>; // string\n\n// type pathIAssignmentItem = PathOf<IAssignmentItem>;\n// type pathIAssignmentItem = PathOf<unknown>; // string\n\n// type V_assignees_F = GetValueAtPath<IAssignmentItem, 'assignees[0]', false>; // IAssignee\n","export type TYPE_LANGUAGE_SUPPORT =\n | 'vi' // Tiếng Việt\n | 'en'; // Tiếng Anh\n// | \"fr\" // Tiếng Pháp\n// | \"de\" // Tiếng Đức\n// | \"es\" // Tiếng Tây Ban Nha\n// | \"zh\" // Tiếng Trung (Giản thể)\n// | \"zh-TW\" // Tiếng Trung (Phồn thể)\n// | \"ja\" // Tiếng Nhật\n// | \"ko\" // Tiếng Hàn\n// | \"ru\" // Tiếng Nga\n// | \"it\" // Tiếng Ý\n// | \"pt\" // Tiếng Bồ Đào Nha\n// | \"th\" // Tiếng Thái\n// | \"id\" // Tiếng Indonesia\n// | \"ms\" // Tiếng Malaysia\n// | \"ar\" // Tiếng Ả Rập\n// | \"hi\" // Tiếng Hindi\n// | \"bn\" // Tiếng Bengal\n// | \"tr\" // Tiếng Thổ Nhĩ Kỳ\n// | \"nl\" // Tiếng Hà Lan\n// | \"km\" // Tiếng Khmer (Campuchia)\n// | \"lo\" // Tiếng Lào\n// | \"my\" // Tiếng Miến Điện (Myanmar)\n// | \"tl\" // Tiếng Tagalog (Philippines)\n// | \"ceb\" // Tiếng Cebuano (Philippines)\n// | \"jv\" // Tiếng Java (Indonesia)\n// | \"su\"; // Tiếng Sundanese (Indonesia)\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"AAAA;;ACqHA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;;ACjUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3BA;;AAEG"}
@@ -0,0 +1,32 @@
1
+ import { Signal } from '@angular/core';
2
+ /** ====================== Helpers: unwrap & shape ====================== **/
3
+ type UnwrapSignal<T> = T extends Signal<infer U> ? U : T;
4
+ type UnwrapAllSignals<T> = T extends Signal<infer U> ? UnwrapAllSignals<U> : T;
5
+ type Clean<T> = Exclude<UnwrapSignal<T>, undefined | null>;
6
+ type StrKeys<T> = Extract<keyof T, string>;
7
+ type Base<T> = UnwrapAllSignals<T>;
8
+ /** ====================== Array helpers ====================== **/
9
+ type ArrayElementRaw<T> = Base<Clean<T>> extends ReadonlyArray<infer U> ? U : Base<Clean<T>> extends (infer U)[] ? U : never;
10
+ type IsArrayLike<T> = Base<Clean<T>> extends readonly unknown[] ? true : Base<Clean<T>> extends unknown[] ? true : false;
11
+ type IsNonArrayObject<T> = Base<Clean<T>> extends object ? (Base<Clean<T>> extends readonly unknown[] ? false : Base<Clean<T>> extends unknown[] ? false : true) : false;
12
+ /** ====================== DOM/Evt guard ====================== **/
13
+ type IsDOMType<T> = Base<T> extends Event | Node | Document | Element | Window | CSSStyleDeclaration | CSSRule | CSSStyleSheet ? true : false;
14
+ /** ====================== Finalize (giữ Signal nếu cần) ====================== **/
15
+ type Finalize<T, R extends boolean> = R extends true ? T : UnwrapAllSignals<T>;
16
+ /** ====================== Depth limiter (hybrid, mặc định 6) ====================== **/
17
+ type Dec<N extends number> = N extends 6 ? 5 : N extends 5 ? 4 : N extends 4 ? 3 : N extends 3 ? 2 : N extends 2 ? 1 : N extends 1 ? 0 : 0;
18
+ /** ====================== Path builders (Depth-limited) ====================== **/
19
+ type PathForArray<T, Depth extends number> = [Depth] extends [0] ? never : `[${number}]` | (PathOf<ArrayElementRaw<T>, Dec<Depth>> extends never ? never : `[${number}].${PathOf<ArrayElementRaw<T>, Dec<Depth>>}`);
20
+ type PathForProp<TProp, K extends string, Depth extends number> = [Depth] extends [0] ? K : IsArrayLike<TProp> extends true ? `${K}` | `${K}[${number}]` | (PathOf<ArrayElementRaw<TProp>, Dec<Depth>> extends never ? never : `${K}[${number}].${PathOf<ArrayElementRaw<TProp>, Dec<Depth>>}`) : IsNonArrayObject<TProp> extends true ? `${K}` | (PathOf<Clean<TProp>, Dec<Depth>> extends never ? never : `${K}.${PathOf<Clean<TProp>, Dec<Depth>>}`) : `${K}`;
21
+ type PathForObject<T, Depth extends number> = {
22
+ [K in StrKeys<T>]: PathForProp<T[K], K, Depth>;
23
+ }[StrKeys<T>];
24
+ /** ====================== Public: PathOf (hybrid, Depth mặc định 6) ====================== **/
25
+ export type PathOf<TRaw, Depth extends number = 6> = IsDOMType<TRaw> extends true ? any : [Depth] extends [0] ? never : Base<TRaw> extends readonly unknown[] | unknown[] ? PathForArray<TRaw, Depth> : Base<TRaw> extends object ? PathForObject<Base<TRaw>, Depth> : string;
26
+ /** ====================== Resolve giá trị theo path ====================== **/
27
+ type GetInternal<TRaw, P extends string, R extends boolean> = P extends `[${infer I}].${infer Rest}` ? I extends `${number}` ? GetInternal<ArrayElementRaw<TRaw>, Rest, R> : any : P extends `[${infer I}]` ? I extends `${number}` ? Finalize<ArrayElementRaw<TRaw>, R> : any : P extends `${infer K}[${infer I}].${infer Rest}` ? K extends StrKeys<Clean<Base<TRaw>>> ? I extends `${number}` ? GetInternal<ArrayElementRaw<Clean<Base<TRaw>>[K]>, Rest, R> : any : any : P extends `${infer K}.${infer Rest}` ? K extends StrKeys<Clean<Base<TRaw>>> ? IsArrayLike<Clean<Base<TRaw>>[K]> extends true ? any : GetInternal<Clean<Base<TRaw>>[K], Rest, R> : any : P extends `${infer K}[${infer I}]` ? K extends StrKeys<Clean<Base<TRaw>>> ? I extends `${number}` ? Finalize<ArrayElementRaw<Clean<Base<TRaw>>[K]>, R> : any : any : P extends `${infer K}` ? K extends StrKeys<Clean<Base<TRaw>>> ? Finalize<Clean<Base<TRaw>>[K], R> : any : any;
28
+ /** ====================== Public: GetValueAtPath & GetReturnType ====================== **/
29
+ export type GetValueAtPath<TRaw, P extends PathOf<TRaw>, R extends boolean = false> = GetInternal<TRaw, P, R>;
30
+ export type GetReturnType<O, P extends PathOf<O>, KS extends boolean, D> = D extends undefined ? GetValueAtPath<O, P, KS> : D;
31
+ export {};
32
+ /** ====================== (Tuỳ chọn) Ví dụ nhanh ====================== **/
package/index.d.ts CHANGED
@@ -1,14 +1,17 @@
1
+ export * from './aspect-ratio.interface';
1
2
  export * from './bounding-client-rect.interface';
2
- export * from './paging.interface';
3
- export * from './event-browser.interface';
4
- export * from './string.interface';
5
- export * from './template-ref.interface';
6
3
  export * from './communicate-micro.type';
7
- export * from './http-response.interface';
8
- export * from './http-process-upload.interface';
4
+ export * from './event-browser.interface';
5
+ export * from './extract-inputs.type';
6
+ export * from './file.interface';
9
7
  export * from './function.type';
10
- export * from './object.type';
8
+ export * from './generic-utilities-for-path-value.type';
9
+ export * from './http-process-upload.interface';
10
+ export * from './http-response.interface';
11
11
  export * from './language-support.type';
12
+ export * from './object.type';
13
+ export * from './paging.interface';
14
+ export * from './string.interface';
15
+ export * from './template-ref.interface';
12
16
  export * from './validator.interface';
13
- export * from './file.interface';
14
- export * from './aspect-ratio.interface';
17
+ export * from './date.type';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@libs-ui/interfaces-types",
3
- "version": "0.2.315-0",
3
+ "version": "0.2.317-0",
4
4
  "peerDependencies": {
5
5
  "rxjs": "~7.8.0"
6
6
  },