@libs-ui/interfaces-types 0.2.306-5 → 0.2.306-6

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
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXh0cmFjdC1pbnB1dHMudHlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnMtdWkvaW50ZXJmYWNlcy10eXBlcy9zcmMvZXh0cmFjdC1pbnB1dHMudHlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5wdXRTaWduYWwsIFNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG4vLyBVdGlsaXR5IHR5cGUgxJHhu4MgdW53cmFwIElucHV0U2lnbmFsIHR5cGVcbnR5cGUgVW53cmFwSW5wdXRTaWduYWw8VCwgSyBleHRlbmRzIGtleW9mIFQ+ID0gVFtLXSBleHRlbmRzIElucHV0U2lnbmFsPGluZmVyIFU+ID8gVSA6IG5ldmVyO1xuXG4vLyBVdGlsaXR5IHR5cGUgxJHhu4MgdOG6oW8gbWFwcGVkIHR5cGUgduG7m2kgU2lnbmFsIHVud3JhcHBpbmdcbnR5cGUgVW53cmFwU2lnbmFsczxUPiA9IHtcbiAgW0sgaW4ga2V5b2YgVF06IFRbS10gZXh0ZW5kcyBTaWduYWw8aW5mZXIgVT4gPyBVIDogVFtLXTtcbn07XG5cbi8vIFV0aWxpdHkgdHlwZSDEkeG7gyBmaWx0ZXIgdsOgIHThuqFvIHJlcXVpcmVkIHByb3BlcnRpZXNcbnR5cGUgUmVxdWlyZWRJbnB1dFByb3BlcnRpZXM8VD4gPSB7XG4gIFtLIGluIGtleW9mIFQgYXMgVFtLXSBleHRlbmRzIElucHV0U2lnbmFsPGluZmVyIFU+ID8gKHVuZGVmaW5lZCBleHRlbmRzIFUgPyBuZXZlciA6IEspIDogbmV2ZXJdOiBVbndyYXBJbnB1dFNpZ25hbDxULCBLPjtcbn07XG5cbi8vIFV0aWxpdHkgdHlwZSDEkeG7gyBmaWx0ZXIgdsOgIHThuqFvIG9wdGlvbmFsIHByb3BlcnRpZXNcbnR5cGUgT3B0aW9uYWxJbnB1dFByb3BlcnRpZXM8VD4gPSB7XG4gIFtLIGluIGtleW9mIFQgYXMgVFtLXSBleHRlbmRzIElucHV0U2lnbmFsPGluZmVyIFU+ID8gKHVuZGVmaW5lZCBleHRlbmRzIFUgPyBLIDogbmV2ZXIpIDogbmV2ZXJdPzogVW53cmFwSW5wdXRTaWduYWw8VCwgSz47XG59O1xuXG4vLyBNYWluIHR5cGUgxJHhu4MgZXh0cmFjdCB04bqldCBj4bqjIGlucHV0cyB04burIGNvbXBvbmVudFxuZXhwb3J0IHR5cGUgRXh0cmFjdElucHV0czxUPiA9IFJlcXVpcmVkSW5wdXRQcm9wZXJ0aWVzPFQ+ICYgT3B0aW9uYWxJbnB1dFByb3BlcnRpZXM8VD47XG5leHBvcnQgdHlwZSBJbnB1dHM8VD4gPSBQYXJ0aWFsPFVud3JhcFNpZ25hbHM8VD4+ICYgRXh0cmFjdElucHV0czxUPjtcbiJdfQ==
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXh0cmFjdC1pbnB1dHMudHlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnMtdWkvaW50ZXJmYWNlcy10eXBlcy9zcmMvZXh0cmFjdC1pbnB1dHMudHlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5wdXRTaWduYWwsIFNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG4vLyBVdGlsaXR5IHR5cGUgxJHhu4MgdW53cmFwIElucHV0U2lnbmFsIHR5cGVcbnR5cGUgVW53cmFwSW5wdXRTaWduYWw8VCwgSyBleHRlbmRzIGtleW9mIFQ+ID0gVFtLXSBleHRlbmRzIElucHV0U2lnbmFsPGluZmVyIFU+ID8gVSA6IG5ldmVyO1xuXG4vLyBVdGlsaXR5IHR5cGUgxJHhu4MgdOG6oW8gbWFwcGVkIHR5cGUgduG7m2kgU2lnbmFsIHVud3JhcHBpbmdcbnR5cGUgVW53cmFwU2lnbmFsczxUPiA9IHtcbiAgW0sgaW4ga2V5b2YgVF06IFRbS10gZXh0ZW5kcyBTaWduYWw8aW5mZXIgVT4gPyBVIDogVFtLXTtcbn07XG5cbi8vIFV0aWxpdHkgdHlwZSDEkeG7gyBmaWx0ZXIgdsOgIHThuqFvIHJlcXVpcmVkIHByb3BlcnRpZXNcbnR5cGUgUmVxdWlyZWRJbnB1dFByb3BlcnRpZXM8VD4gPSB7XG4gIFtLIGluIGtleW9mIFQgYXMgVFtLXSBleHRlbmRzIElucHV0U2lnbmFsPGluZmVyIFU+ID8gKHVuZGVmaW5lZCBleHRlbmRzIFUgPyBuZXZlciA6IEspIDogbmV2ZXJdOiBVbndyYXBJbnB1dFNpZ25hbDxULCBLPjtcbn07XG5cbi8vIFV0aWxpdHkgdHlwZSDEkeG7gyBmaWx0ZXIgdsOgIHThuqFvIG9wdGlvbmFsIHByb3BlcnRpZXNcbnR5cGUgT3B0aW9uYWxJbnB1dFByb3BlcnRpZXM8VD4gPSB7XG4gIFtLIGluIGtleW9mIFQgYXMgVFtLXSBleHRlbmRzIElucHV0U2lnbmFsPGluZmVyIFU+ID8gKHVuZGVmaW5lZCBleHRlbmRzIFUgPyBLIDogbmV2ZXIpIDogbmV2ZXJdPzogVW53cmFwSW5wdXRTaWduYWw8VCwgSz47XG59O1xuXG4vLyBNYWluIHR5cGUgxJHhu4MgZXh0cmFjdCB04bqldCBj4bqjIGlucHV0cyB04burIGNvbXBvbmVudFxuZXhwb3J0IHR5cGUgRXh0cmFjdElucHV0czxULCBSIGV4dGVuZHMgYm9vbGVhbiA9IHRydWU+ID0gKFIgZXh0ZW5kcyB0cnVlID8gUmVxdWlyZWRJbnB1dFByb3BlcnRpZXM8VD4gOiBQYXJ0aWFsPFJlcXVpcmVkSW5wdXRQcm9wZXJ0aWVzPFQ+PikgJiBPcHRpb25hbElucHV0UHJvcGVydGllczxUPjtcbmV4cG9ydCB0eXBlIElucHV0czxULCBSIGV4dGVuZHMgYm9vbGVhbiA9IHRydWU+ID0gUGFydGlhbDxVbndyYXBTaWduYWxzPFQ+PiAmIEV4dHJhY3RJbnB1dHM8VCwgUj47XG4iXX0=
@@ -1,2 +1,145 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy11dGlsaXRpZXMtZm9yLXBhdGgtdmFsdWUudHlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnMtdWkvaW50ZXJmYWNlcy10eXBlcy9zcmMvZ2VuZXJpYy11dGlsaXRpZXMtZm9yLXBhdGgtdmFsdWUudHlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuaW1wb3J0IHsgU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbi8vIC0tLS0tLS0tLS0gR2VuZXJpYyB1dGlsaXRpZXMgZm9yIHBhdGggYW5kIHZhbHVlIHJlc29sdXRpb24gLS0tLS0tLS0tLVxuXG4vLyBVbndyYXAgYSBzaW5nbGUgbGV2ZWwgb2YgU2lnbmFsXG50eXBlIFVud3JhcFNpZ25hbDxUPiA9IFQgZXh0ZW5kcyBTaWduYWw8aW5mZXIgVT4gPyBVIDogVDtcblxuLy8gVW53cmFwIGFsbCBsZXZlbHMgb2YgU2lnbmFsXG50eXBlIFVud3JhcEFsbFNpZ25hbHM8VD4gPSBUIGV4dGVuZHMgU2lnbmFsPGluZmVyIFU+ID8gVW53cmFwQWxsU2lnbmFsczxVPiA6IFQ7XG5cbi8vIFJlbW92ZSB1bmRlZmluZWQvbnVsbCBhZnRlciBvbmUtbGV2ZWwgdW53cmFwIHRvIGluc3BlY3Qgc2hhcGVcbnR5cGUgQ2xlYW48VD4gPSBFeGNsdWRlPFVud3JhcFNpZ25hbDxUPiwgdW5kZWZpbmVkIHwgbnVsbD47XG50eXBlIFN0cktleXM8VD4gPSBFeHRyYWN0PGtleW9mIFQsIHN0cmluZz47XG5cbi8vIEdldCByYXcgYXJyYXkgZWxlbWVudCB0eXBlLCBldmVuIGlmIHRoZSBhcnJheSBpdHNlbGYgaXMgd3JhcHBlZCBpbiBhIHNpZ25hbFxudHlwZSBBcnJheUVsZW1lbnRSYXc8VD4gPSBUIGV4dGVuZHMgKGluZmVyIEEpW10gPyBBIDogVCBleHRlbmRzIFJlYWRvbmx5QXJyYXk8aW5mZXIgQj4gPyBCIDogVCBleHRlbmRzIFNpZ25hbDxpbmZlciBVPiA/IChVIGV4dGVuZHMgKGluZmVyIEMpW10gPyBDIDogVSBleHRlbmRzIFJlYWRvbmx5QXJyYXk8aW5mZXIgRD4gPyBEIDogYW55KSA6IGFueTtcblxuLy8gQ2hlY2sgaWYgYSB0eXBlIChhZnRlciB1bndyYXBwaW5nIHNpZ25hbCBhbmQgY2xlYW5pbmcpIGlzIGFycmF5LWxpa2VcbnR5cGUgSXNBcnJheUxpa2U8VD4gPSBDbGVhbjxUPiBleHRlbmRzIHJlYWRvbmx5IHVua25vd25bXSA/IHRydWUgOiBmYWxzZTtcblxuLy8gRGV0ZXJtaW5lIGlmIGEgdHlwZSAoYWZ0ZXIgdW53cmFwcGluZyBzaWduYWwgYW5kIGNsZWFuaW5nKSBpcyBhIG5vbi1hcnJheSBvYmplY3RcbnR5cGUgSXNOb25BcnJheU9iamVjdDxUPiA9IENsZWFuPFQ+IGV4dGVuZHMgb2JqZWN0ID8gKENsZWFuPFQ+IGV4dGVuZHMgcmVhZG9ubHkgdW5rbm93bltdID8gZmFsc2UgOiB0cnVlKSA6IGZhbHNlO1xuXG4vLyBGaW5hbGl6ZSB0aGUgcmV0dXJuZWQgdHlwZSBkZXBlbmRpbmcgb24gUlxudHlwZSBGaW5hbGl6ZTxULCBSIGV4dGVuZHMgYm9vbGVhbj4gPSBSIGV4dGVuZHMgdHJ1ZSA/IFQgOiBVbndyYXBBbGxTaWduYWxzPFQ+O1xuXG50eXBlIFBhdGhGb3JQcm9wPFByb3BSYXcsIEsgZXh0ZW5kcyBzdHJpbmc+ID1cbiAgSXNBcnJheUxpa2U8UHJvcFJhdz4gZXh0ZW5kcyB0cnVlXG4gICAgPyBgJHtLfWAgfCBgJHtLfVske251bWJlcn1dYCB8IChQYXRoT2Y8QXJyYXlFbGVtZW50UmF3PFByb3BSYXc+PiBleHRlbmRzIGFueSA/IGFueSA6IGAke0t9WyR7bnVtYmVyfV0uJHtQYXRoT2Y8QXJyYXlFbGVtZW50UmF3PFByb3BSYXc+Pn1gKVxuICAgIDogSXNOb25BcnJheU9iamVjdDxQcm9wUmF3PiBleHRlbmRzIHRydWVcbiAgICAgID8gYCR7S31gIHwgKFBhdGhPZjxDbGVhbjxQcm9wUmF3Pj4gZXh0ZW5kcyBhbnkgPyBhbnkgOiBgJHtLfS4ke1BhdGhPZjxDbGVhbjxQcm9wUmF3Pj59YClcbiAgICAgIDogYCR7S31gO1xuXG50eXBlIEdldEludGVybmFsPFRSYXcsIFAgZXh0ZW5kcyBzdHJpbmcsIFIgZXh0ZW5kcyBib29sZWFuPiA9XG4gIC8vIENhc2U6IGtleSB3aXRoIGV4cGxpY2l0IGluZGV4IHRoZW4gcmVzdCAtPiBLW3hdLlJlc3RcbiAgUCBleHRlbmRzIGAke2luZmVyIEt9WyR7aW5mZXIgSX1dLiR7aW5mZXIgUmVzdH1gXG4gICAgPyBLIGV4dGVuZHMgU3RyS2V5czxDbGVhbjxUUmF3Pj5cbiAgICAgID8gSSBleHRlbmRzIGAke251bWJlcn1gXG4gICAgICAgID8gR2V0SW50ZXJuYWw8QXJyYXlFbGVtZW50UmF3PENsZWFuPFRSYXc+W0tdPiwgUmVzdCwgUj5cbiAgICAgICAgOiBhbnlcbiAgICAgIDogYW55XG4gICAgOiAvLyBDYXNlOiBrZXkgd2l0aCBkb3QgdGhlbiByZXN0IC0+IEsuUmVzdCAoc3VwcG9ydHMgYXJyYXkgZG90IGFjY2VzcyBpbnRvIGVsZW1lbnQpXG4gICAgICBQIGV4dGVuZHMgYCR7aW5mZXIgS30uJHtpbmZlciBSZXN0fWBcbiAgICAgID8gSyBleHRlbmRzIFN0cktleXM8Q2xlYW48VFJhdz4+XG4gICAgICAgID8gSXNBcnJheUxpa2U8Q2xlYW48VFJhdz5bS10+IGV4dGVuZHMgdHJ1ZVxuICAgICAgICAgID8gYW55XG4gICAgICAgICAgOiBHZXRJbnRlcm5hbDxDbGVhbjxUUmF3PltLXSwgUmVzdCwgUj5cbiAgICAgICAgOiBhbnlcbiAgICAgIDogLy8gQ2FzZToga2V5IHdpdGggZXhwbGljaXQgbnVtZXJpYyBpbmRleCBlbmQgLT4gS1s8bnVtYmVyPl1cbiAgICAgICAgUCBleHRlbmRzIGAke2luZmVyIEt9WyR7aW5mZXIgSX1dYFxuICAgICAgICA/IEsgZXh0ZW5kcyBTdHJLZXlzPENsZWFuPFRSYXc+PlxuICAgICAgICAgID8gSSBleHRlbmRzIGAke251bWJlcn1gXG4gICAgICAgICAgICA/IEZpbmFsaXplPEFycmF5RWxlbWVudFJhdzxDbGVhbjxUUmF3PltLXT4sIFI+XG4gICAgICAgICAgICA6IGFueVxuICAgICAgICAgIDogYW55XG4gICAgICAgIDogLy8gQ2FzZTogdGVybWluYWwga2V5IC0+IEtcbiAgICAgICAgICBQIGV4dGVuZHMgYCR7aW5mZXIgS31gXG4gICAgICAgICAgPyBLIGV4dGVuZHMgU3RyS2V5czxDbGVhbjxUUmF3Pj5cbiAgICAgICAgICAgID8gRmluYWxpemU8Q2xlYW48VFJhdz5bS10sIFI+XG4gICAgICAgICAgICA6IGFueVxuICAgICAgICAgIDogYW55O1xuXG4vLyBVdGlsaXR5IHR5cGUgdG8gZGV0ZWN0IERPTS9FdmVudCB0eXBlcyB0aGF0IGNhdXNlIGNpcmN1bGFyIHJlZmVyZW5jZXNcbnR5cGUgSXNET01UeXBlPFQ+ID0gVCBleHRlbmRzIEV2ZW50IHwgTm9kZSB8IERvY3VtZW50IHwgRWxlbWVudCB8IFdpbmRvdyB8IENTU1N0eWxlRGVjbGFyYXRpb24gfCBDU1NSdWxlIHwgQ1NTU3R5bGVTaGVldCA/IHRydWUgOiBmYWxzZTtcblxuLy8gQnVpbGQgcGF0aCBzdHJpbmdzIGZvciBhIGdpdmVuIHJhdyB0eXBlIFRSYXdcbmV4cG9ydCB0eXBlIFBhdGhPZjxUUmF3PiA9IElzRE9NVHlwZTxUUmF3PiBleHRlbmRzIHRydWUgPyBhbnkgOiBUUmF3IGV4dGVuZHMgdW5rbm93biA/IHN0cmluZyA6IENsZWFuPFRSYXc+IGV4dGVuZHMgb2JqZWN0ID8geyBbSyBpbiBTdHJLZXlzPENsZWFuPFRSYXc+Pl06IFBhdGhGb3JQcm9wPENsZWFuPFRSYXc+W0tdLCBLPiB9W1N0cktleXM8Q2xlYW48VFJhdz4+XSA6IGFueTtcblxuLy8gUmVzb2x2ZSB0aGUgdmFsdWUgdHlwZSBhdCBhIGdpdmVuIHBhdGggUC4gSWYgUj10cnVlLCBrZWVwIGZpbmFsIFNpZ25hbDsgZWxzZSB1bndyYXAgc2lnbmFscy5cbmV4cG9ydCB0eXBlIEdldFZhbHVlQXRQYXRoPFRSYXcsIFAgZXh0ZW5kcyBQYXRoT2Y8VFJhdz4sIFIgZXh0ZW5kcyBib29sZWFuID0gZmFsc2U+ID0gR2V0SW50ZXJuYWw8VFJhdywgUCwgUj47XG5cbi8vIEhlbHBlciB0eXBlIGNobyBraeG7g3UgdHLhuqMgduG7gSBj4bunYSBnZXQoKSBk4buxYSB0csOqbiBkZWZhdWx0VmFsdWVcbmV4cG9ydCB0eXBlIEdldFJldHVyblR5cGU8TywgUCBleHRlbmRzIFBhdGhPZjxPPiwgS1MgZXh0ZW5kcyBib29sZWFuLCBEPiA9IEQgZXh0ZW5kcyB1bmRlZmluZWQgPyBHZXRWYWx1ZUF0UGF0aDxPLCBQLCBLUz4gOiBEO1xuIl19
2
+ /** ====================== (Tuỳ chọn) Ví dụ nhanh ====================== **/
3
+ // import { WritableSignal } from '@angular/core';
4
+ // export interface Test {
5
+ // specific_query?: WritableSignal<IAssignmentItemQuery>;
6
+ // data: WritableSignal<Array<WritableSignal<IAssignmentItem>>>;
7
+ // index: number;
8
+ // info: {
9
+ // name: string;
10
+ // age: number;
11
+ // };
12
+ // city: WritableSignal<{
13
+ // name: string;
14
+ // country: string;
15
+ // }>;
16
+ // address: WritableSignal<{
17
+ // ip: WritableSignal<string>;
18
+ // port: WritableSignal<number>;
19
+ // }>;
20
+ // owner: Array<string>;
21
+ // support: Array<WritableSignal<string>>;
22
+ // host: Array<{
23
+ // ip: WritableSignal<string>;
24
+ // port: number;
25
+ // }>;
26
+ // country: WritableSignal<
27
+ // Array<
28
+ // WritableSignal<{
29
+ // name: WritableSignal<{
30
+ // vi: string;
31
+ // en: string;
32
+ // }>;
33
+ // code: WritableSignal<{
34
+ // vi: WritableSignal<string>;
35
+ // en: WritableSignal<string>;
36
+ // }>;
37
+ // flag: WritableSignal<string>;
38
+ // phone_code: string;
39
+ // currency: {
40
+ // name: string;
41
+ // code: WritableSignal<string>;
42
+ // symbol: WritableSignal<{
43
+ // vi: string;
44
+ // en: string;
45
+ // cn: WritableSignal<Array<string>>;
46
+ // jp: WritableSignal<
47
+ // Array<
48
+ // WritableSignal<{
49
+ // vi: string;
50
+ // en: string;
51
+ // }>
52
+ // >
53
+ // >;
54
+ // }>;
55
+ // };
56
+ // }>
57
+ // >
58
+ // >;
59
+ // }
60
+ // interface IAssignmentItem {
61
+ // id: WritableSignal<string>;
62
+ // name: WritableSignal<string>;
63
+ // description: WritableSignal<string>;
64
+ // created_at: WritableSignal<string>;
65
+ // updated_at: WritableSignal<string>;
66
+ // }
67
+ // export interface IAssignmentItemQuery {
68
+ // per_page: WritableSignal<number>;
69
+ // after_token?: WritableSignal<string>;
70
+ // before_token?: WritableSignal<string>;
71
+ // search?: WritableSignal<string>;
72
+ // search_index?: WritableSignal<number>;
73
+ // }
74
+ // type V_index_F = GetValueAtPath<Test, 'index', false>; // number
75
+ // type V_index_T = GetValueAtPath<Test, 'index', true>; // number
76
+ // type V_info_F = GetValueAtPath<Test, 'info', false>; // { name: string; age: number }
77
+ // type V_info_T = GetValueAtPath<Test, 'info', true>; // { name: string; age: number }
78
+ // type V_info_name_F = GetValueAtPath<Test, 'info.name', false>; // string
79
+ // type V_info_name_T = GetValueAtPath<Test, 'info.name', true>; // string
80
+ // type V_info_age_F = GetValueAtPath<Test, 'info.age', false>; // number
81
+ // type V_info_age_T = GetValueAtPath<Test, 'info.age', true>; // number
82
+ // // City (signal-wrapped object with plain fields)
83
+ // type V_city_F = GetValueAtPath<Test, 'city', false>; // { name: string; country: string }
84
+ // type V_city_T = GetValueAtPath<Test, 'city', true>; // WritableSignal<{ name: string; country: string }>
85
+ // type V_city_name_F = GetValueAtPath<Test, 'city.name', false>; // string
86
+ // type V_city_name_T = GetValueAtPath<Test, 'city.name', true>; // string
87
+ // type V_city_country_F = GetValueAtPath<Test, 'city.country', false>; // string
88
+ // type V_city_country_T = GetValueAtPath<Test, 'city.country', true>; // string
89
+ // // Address (signal-wrapped object with signal leaves)
90
+ // type V_address_F = GetValueAtPath<Test, 'address', false>; // { ip: string; port: number }
91
+ // type V_address_T = GetValueAtPath<Test, 'address', true>; // WritableSignal<{ ip: WritableSignal<string>; port: WritableSignal<number> }>
92
+ // type V_address_ip_F = GetValueAtPath<Test, 'address.ip', false>; // string
93
+ // type V_address_ip_T = GetValueAtPath<Test, 'address.ip', true>; // WritableSignal<string>
94
+ // type V_address_port_F = GetValueAtPath<Test, 'address.port', false>; // number
95
+ // type V_address_port_T = GetValueAtPath<Test, 'address.port', true>; // WritableSignal<number>
96
+ // // Owner (array of primitives)
97
+ // type V_owner_F = GetValueAtPath<Test, 'owner', false>; // string[]
98
+ // type V_owner_T = GetValueAtPath<Test, 'owner', true>; // string[]
99
+ // type V_owner_idx_F = GetValueAtPath<Test, 'owner[0]', false>; // string
100
+ // type V_owner_idx_T = GetValueAtPath<Test, 'owner[0]', true>; // string
101
+ // // Support (array of signals)
102
+ // type V_support_F = GetValueAtPath<Test, 'support', false>; // string[]
103
+ // type V_support_T = GetValueAtPath<Test, 'support', true>; // WritableSignal<string>[]
104
+ // type V_support_idx_F = GetValueAtPath<Test, 'support[0]', false>; // string
105
+ // type V_support_idx_T = GetValueAtPath<Test, 'support[0]', true>; // WritableSignal<string>
106
+ // // Host (array of objects with mixed leaves)
107
+ // type V_host_F = GetValueAtPath<Test, 'host', false>; // { ip: string; port: number }[]
108
+ // type V_host_T = GetValueAtPath<Test, 'host', true>; // { ip: WritableSignal<string>; port: number }[]
109
+ // type V_host_idx_F = GetValueAtPath<Test, 'host[0]', false>; // { ip: string; port: number }
110
+ // type V_host_idx_T = GetValueAtPath<Test, 'host[0]', true>; // { ip: WritableSignal<string>; port: number }
111
+ // type V_host_ip_F = GetValueAtPath<Test, 'host[0].ip', false>; // string
112
+ // type V_host_ip_T = GetValueAtPath<Test, 'host[0].ip', true>; // WritableSignal<string>
113
+ // type V_host_port_F = GetValueAtPath<Test, 'host[0].port', false>; // number
114
+ // type V_host_port_T = GetValueAtPath<Test, 'host[0].port', true>; // number
115
+ // // currency
116
+ // type V_currency_F = GetValueAtPath<Test, 'country[0].currency', false>; // { name: string; code: string; symbol: { ... } }
117
+ // type V_currency_T = GetValueAtPath<Test, 'country[0].currency', true>; // { name: string; code: WritableSignal<string>; symbol: WritableSignal<{ ... }> }
118
+ // type V_currency_name_F = GetValueAtPath<Test, 'country[0].currency.name', false>; // string
119
+ // type V_currency_name_T = GetValueAtPath<Test, 'country[0].currency.name', true>; // string
120
+ // type V_currency_code_F = GetValueAtPath<Test, 'country[0].currency.code', false>; // string
121
+ // type V_currency_code_T = GetValueAtPath<Test, 'country[0].currency.code', true>; // WritableSignal<string>
122
+ // // currency.symbol
123
+ // type V_symbol_F = GetValueAtPath<Test, 'country[0].currency.symbol', false>; // { vi: string; en: string; cn: string[]; jp: { vi: string; en: string }[] }
124
+ // 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 }[]> }>
125
+ // type V_symbol_vi_F = GetValueAtPath<Test, 'country[0].currency.symbol.vi', false>; // string
126
+ // type V_symbol_vi_T = GetValueAtPath<Test, 'country[0].currency.symbol.vi', true>; // string
127
+ // type V_symbol_en_F = GetValueAtPath<Test, 'country[0].currency.symbol.en', false>; // string
128
+ // type V_symbol_en_T = GetValueAtPath<Test, 'country[0].currency.symbol.en', true>; // string
129
+ // type V_symbol_cn_F = GetValueAtPath<Test, 'country[0].currency.symbol.cn', false>; // string[]
130
+ // type V_symbol_cn_T = GetValueAtPath<Test, 'country[0].currency.symbol.cn', true>; // WritableSignal<string[]>
131
+ // type V_symbol_cn_idx_F = GetValueAtPath<Test, 'country[0].currency.symbol.cn[0]', false>; // string
132
+ // type V_symbol_cn_idx_T = GetValueAtPath<Test, 'country[0].currency.symbol.cn[0]', true>; // string
133
+ // type V_symbol_jp_F = GetValueAtPath<Test, 'country[0].currency.symbol.jp', false>; // { vi: string; en: string }[]
134
+ // type V_symbol_jp_T = GetValueAtPath<Test, 'country[0].currency.symbol.jp', true>; // WritableSignal<{ vi: string; en: string }[]>
135
+ // type V_symbol_jp_idx_F = GetValueAtPath<Test, 'country[0].currency.symbol.jp[0]', false>; // { vi: string; en: string }
136
+ // type V_symbol_jp_idx_T = GetValueAtPath<Test, 'country[0].currency.symbol.jp[0]', true>; // WritableSignal<{ vi: string; en: string }>
137
+ // type V_symbol_jp_vi_F = GetValueAtPath<Test, 'country[0].currency.symbol.jp[0].vi', false>; // string
138
+ // type V_symbol_jp_vi_T = GetValueAtPath<Test, 'country[0].currency.symbol.jp[0].vi', true>; // string
139
+ // type V_symbol_jp_en_F = GetValueAtPath<Test, 'country[0].currency.symbol.jp[0].en', false>; // string
140
+ // type V_symbol_jp_en_T = GetValueAtPath<Test, 'country[0].currency.symbol.jp[0].en', true>; // string
141
+ // type V_Array_symbol_cn_F = GetValueAtPath<Array<Test>, '[0].country[0].currency.symbol.cn', false>; // string[]
142
+ // type V_Array_symbol_cn_T = GetValueAtPath<Array<Test>, '[0].country[0].currency.symbol.cn', true>; // WritableSignal<string[]>
143
+ // type V_Array_symbol_cn_idx_F = GetValueAtPath<Array<Test>, '[0].country[0].currency.symbol.cn[0]', false>; // string
144
+ // type V_Array_symbol_cn_idx_T = GetValueAtPath<Array<Test>, '[0].country[0].currency.symbol.cn[0]', true>; // string
145
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy11dGlsaXRpZXMtZm9yLXBhdGgtdmFsdWUudHlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnMtdWkvaW50ZXJmYWNlcy10eXBlcy9zcmMvZ2VuZXJpYy11dGlsaXRpZXMtZm9yLXBhdGgtdmFsdWUudHlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBK0hBLDRFQUE0RTtBQUU1RSxrREFBa0Q7QUFFbEQsMEJBQTBCO0FBQzFCLDJEQUEyRDtBQUUzRCxrRUFBa0U7QUFFbEUsbUJBQW1CO0FBQ25CLFlBQVk7QUFDWixvQkFBb0I7QUFDcEIsbUJBQW1CO0FBQ25CLE9BQU87QUFDUCwyQkFBMkI7QUFDM0Isb0JBQW9CO0FBQ3BCLHVCQUF1QjtBQUN2QixRQUFRO0FBQ1IsOEJBQThCO0FBQzlCLGtDQUFrQztBQUNsQyxvQ0FBb0M7QUFDcEMsUUFBUTtBQUNSLDBCQUEwQjtBQUMxQiw0Q0FBNEM7QUFDNUMsa0JBQWtCO0FBQ2xCLGtDQUFrQztBQUNsQyxvQkFBb0I7QUFDcEIsUUFBUTtBQUVSLDZCQUE2QjtBQUM3QixhQUFhO0FBQ2IseUJBQXlCO0FBQ3pCLGlDQUFpQztBQUNqQyx3QkFBd0I7QUFDeEIsd0JBQXdCO0FBQ3hCLGNBQWM7QUFDZCxpQ0FBaUM7QUFDakMsd0NBQXdDO0FBQ3hDLHdDQUF3QztBQUN4QyxjQUFjO0FBQ2Qsd0NBQXdDO0FBQ3hDLDhCQUE4QjtBQUM5QixzQkFBc0I7QUFDdEIsMEJBQTBCO0FBQzFCLDBDQUEwQztBQUMxQyxxQ0FBcUM7QUFDckMsMEJBQTBCO0FBQzFCLDBCQUEwQjtBQUMxQixpREFBaUQ7QUFDakQsa0NBQWtDO0FBQ2xDLHVCQUF1QjtBQUN2QixtQ0FBbUM7QUFDbkMsZ0NBQWdDO0FBQ2hDLGdDQUFnQztBQUNoQyxxQkFBcUI7QUFDckIsa0JBQWtCO0FBQ2xCLGlCQUFpQjtBQUNqQixnQkFBZ0I7QUFDaEIsYUFBYTtBQUNiLFdBQVc7QUFDWCxRQUFRO0FBQ1IsT0FBTztBQUNQLElBQUk7QUFFSiw4QkFBOEI7QUFDOUIsZ0NBQWdDO0FBQ2hDLGtDQUFrQztBQUNsQyx5Q0FBeUM7QUFDekMsd0NBQXdDO0FBQ3hDLHdDQUF3QztBQUN4QyxJQUFJO0FBRUosMENBQTBDO0FBQzFDLHNDQUFzQztBQUN0QywwQ0FBMEM7QUFDMUMsMkNBQTJDO0FBQzNDLHFDQUFxQztBQUNyQywyQ0FBMkM7QUFDM0MsSUFBSTtBQUVKLG1FQUFtRTtBQUNuRSxrRUFBa0U7QUFFbEUsd0ZBQXdGO0FBQ3hGLHVGQUF1RjtBQUN2RiwyRUFBMkU7QUFDM0UsMEVBQTBFO0FBQzFFLHlFQUF5RTtBQUN6RSx3RUFBd0U7QUFFeEUsb0RBQW9EO0FBQ3BELDRGQUE0RjtBQUM1RiwyR0FBMkc7QUFDM0csMkVBQTJFO0FBQzNFLDBFQUEwRTtBQUMxRSxpRkFBaUY7QUFDakYsZ0ZBQWdGO0FBRWhGLHdEQUF3RDtBQUN4RCw2RkFBNkY7QUFDN0YsNElBQTRJO0FBQzVJLDZFQUE2RTtBQUM3RSw0RkFBNEY7QUFDNUYsaUZBQWlGO0FBQ2pGLGdHQUFnRztBQUVoRyxpQ0FBaUM7QUFDakMscUVBQXFFO0FBQ3JFLG9FQUFvRTtBQUNwRSwwRUFBMEU7QUFDMUUseUVBQXlFO0FBRXpFLGdDQUFnQztBQUNoQyx5RUFBeUU7QUFDekUsd0ZBQXdGO0FBQ3hGLDhFQUE4RTtBQUM5RSw2RkFBNkY7QUFFN0YsK0NBQStDO0FBQy9DLHlGQUF5RjtBQUN6Rix3R0FBd0c7QUFDeEcsOEZBQThGO0FBQzlGLDZHQUE2RztBQUM3RywwRUFBMEU7QUFDMUUseUZBQXlGO0FBQ3pGLDhFQUE4RTtBQUM5RSw2RUFBNkU7QUFFN0UsY0FBYztBQUNkLDZIQUE2SDtBQUM3SCw0SkFBNEo7QUFDNUosOEZBQThGO0FBQzlGLDZGQUE2RjtBQUM3Riw4RkFBOEY7QUFDOUYsNkdBQTZHO0FBRTdHLHFCQUFxQjtBQUNyQiw2SkFBNko7QUFDN0osNE1BQTRNO0FBQzVNLCtGQUErRjtBQUMvRiw4RkFBOEY7QUFDOUYsK0ZBQStGO0FBQy9GLDhGQUE4RjtBQUM5RixpR0FBaUc7QUFDakcsZ0hBQWdIO0FBQ2hILHNHQUFzRztBQUN0RyxxR0FBcUc7QUFDckcscUhBQXFIO0FBQ3JILG9JQUFvSTtBQUNwSSwwSEFBMEg7QUFDMUgseUlBQXlJO0FBQ3pJLHdHQUF3RztBQUN4Ryx1R0FBdUc7QUFDdkcsd0dBQXdHO0FBQ3hHLHVHQUF1RztBQUV2RyxrSEFBa0g7QUFDbEgsaUlBQWlJO0FBQ2pJLHVIQUF1SDtBQUN2SCxzSEFBc0giLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyBTaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLyoqID09PT09PT09PT09PT09PT09PT09PT0gSGVscGVyczogdW53cmFwICYgc2hhcGUgPT09PT09PT09PT09PT09PT09PT09PSAqKi9cblxuLy8gVW53cmFwIG3hu5l0IGzhu5twIFNpZ25hbFxudHlwZSBVbndyYXBTaWduYWw8VD4gPSBUIGV4dGVuZHMgU2lnbmFsPGluZmVyIFU+ID8gVSA6IFQ7XG5cbi8vIFVud3JhcCB0b8OgbiBi4buZIFNpZ25hbFxudHlwZSBVbndyYXBBbGxTaWduYWxzPFQ+ID0gVCBleHRlbmRzIFNpZ25hbDxpbmZlciBVPiA/IFVud3JhcEFsbFNpZ25hbHM8VT4gOiBUO1xuXG4vLyBMb+G6oWkgYuG7jyB1bmRlZmluZWQgfCBudWxsIHNhdSBraGkgdW53cmFwIDEgbOG7m3AgU2lnbmFsIMSR4buDIHNvaSBzaGFwZVxudHlwZSBDbGVhbjxUPiA9IEV4Y2x1ZGU8VW53cmFwU2lnbmFsPFQ+LCB1bmRlZmluZWQgfCBudWxsPjtcblxuLy8gS2V5IGThuqFuZyBzdHJpbmdcbnR5cGUgU3RyS2V5czxUPiA9IEV4dHJhY3Q8a2V5b2YgVCwgc3RyaW5nPjtcblxuLy8gQmFzZSB0eXBlIHNhdSBraGkgdW53cmFwIHRvw6BuIGLhu5kgU2lnbmFsICh0aeG7h24gZMO5bmcgbmhp4buBdSBuxqFpKVxudHlwZSBCYXNlPFQ+ID0gVW53cmFwQWxsU2lnbmFsczxUPjtcblxuLyoqID09PT09PT09PT09PT09PT09PT09PT0gQXJyYXkgaGVscGVycyA9PT09PT09PT09PT09PT09PT09PT09ICoqL1xuXG4vLyBM4bqleSBlbGVtZW50IHR5cGUgY+G7p2EgbeG6o25nIHNhdSBraGkgdW53cmFwIHRvw6BuIGLhu5kgU2lnbmFsXG50eXBlIEFycmF5RWxlbWVudFJhdzxUPiA9IEJhc2U8VD4gZXh0ZW5kcyBSZWFkb25seUFycmF5PGluZmVyIFU+ID8gVSA6IEJhc2U8VD4gZXh0ZW5kcyAoaW5mZXIgVSlbXSA/IFUgOiBuZXZlcjtcblxuLy8gS2nhu4NtIHRyYSBhcnJheS1saWtlIHNhdSBraGkgdW53cmFwIHRvw6BuIGLhu5kgU2lnbmFsXG50eXBlIElzQXJyYXlMaWtlPFQ+ID0gQmFzZTxUPiBleHRlbmRzIHJlYWRvbmx5IHVua25vd25bXSA/IHRydWUgOiBCYXNlPFQ+IGV4dGVuZHMgdW5rbm93bltdID8gdHJ1ZSA6IGZhbHNlO1xuXG4vLyBLaeG7g20gdHJhIG9iamVjdCBraMO0bmcgcGjhuqNpIGFycmF5IHNhdSBraGkgdW53cmFwIHRvw6BuIGLhu5kgU2lnbmFsXG50eXBlIElzTm9uQXJyYXlPYmplY3Q8VD4gPSBCYXNlPFQ+IGV4dGVuZHMgb2JqZWN0ID8gKEJhc2U8VD4gZXh0ZW5kcyByZWFkb25seSB1bmtub3duW10gPyBmYWxzZSA6IEJhc2U8VD4gZXh0ZW5kcyB1bmtub3duW10gPyBmYWxzZSA6IHRydWUpIDogZmFsc2U7XG5cbi8qKiA9PT09PT09PT09PT09PT09PT09PT09IERPTS9FdnQgZ3VhcmQgPT09PT09PT09PT09PT09PT09PT09PSAqKi9cblxudHlwZSBJc0RPTVR5cGU8VD4gPSBCYXNlPFQ+IGV4dGVuZHMgRXZlbnQgfCBOb2RlIHwgRG9jdW1lbnQgfCBFbGVtZW50IHwgV2luZG93IHwgQ1NTU3R5bGVEZWNsYXJhdGlvbiB8IENTU1J1bGUgfCBDU1NTdHlsZVNoZWV0ID8gdHJ1ZSA6IGZhbHNlO1xuXG4vKiogPT09PT09PT09PT09PT09PT09PT09PSBGaW5hbGl6ZSAoZ2nhu68gU2lnbmFsIG7hur91IGPhuqduKSA9PT09PT09PT09PT09PT09PT09PT09ICoqL1xuXG50eXBlIEZpbmFsaXplPFQsIFIgZXh0ZW5kcyBib29sZWFuPiA9IFIgZXh0ZW5kcyB0cnVlID8gVCA6IFVud3JhcEFsbFNpZ25hbHM8VD47XG5cbi8qKiA9PT09PT09PT09PT09PT09PT09PT09IERlcHRoIGxpbWl0ZXIgKGh5YnJpZCwgbeG6t2MgxJHhu4tuaCA2KSA9PT09PT09PT09PT09PT09PT09PT09ICoqL1xuXG50eXBlIERlYzxOIGV4dGVuZHMgbnVtYmVyPiA9IE4gZXh0ZW5kcyA2ID8gNSA6IE4gZXh0ZW5kcyA1ID8gNCA6IE4gZXh0ZW5kcyA0ID8gMyA6IE4gZXh0ZW5kcyAzID8gMiA6IE4gZXh0ZW5kcyAyID8gMSA6IE4gZXh0ZW5kcyAxID8gMCA6IDA7XG5cbi8qKiA9PT09PT09PT09PT09PT09PT09PT09IFBhdGggYnVpbGRlcnMgKERlcHRoLWxpbWl0ZWQpID09PT09PT09PT09PT09PT09PT09PT0gKiovXG5cbi8vIFBhdGggY2hvIGFycmF5IOG7nyByb290L2ZpZWxkXG50eXBlIFBhdGhGb3JBcnJheTxULCBEZXB0aCBleHRlbmRzIG51bWJlcj4gPSBbRGVwdGhdIGV4dGVuZHMgWzBdID8gbmV2ZXIgOiBgWyR7bnVtYmVyfV1gIHwgKFBhdGhPZjxBcnJheUVsZW1lbnRSYXc8VD4sIERlYzxEZXB0aD4+IGV4dGVuZHMgbmV2ZXIgPyBuZXZlciA6IGBbJHtudW1iZXJ9XS4ke1BhdGhPZjxBcnJheUVsZW1lbnRSYXc8VD4sIERlYzxEZXB0aD4+fWApO1xuXG4vLyBQYXRoIGNobyB04burbmcgcHJvcCBLIHTDuXkga2nhu4N1IGdpw6EgdHLhu4tcbnR5cGUgUGF0aEZvclByb3A8VFByb3AsIEsgZXh0ZW5kcyBzdHJpbmcsIERlcHRoIGV4dGVuZHMgbnVtYmVyPiA9IFtEZXB0aF0gZXh0ZW5kcyBbMF1cbiAgPyBLXG4gIDogSXNBcnJheUxpa2U8VFByb3A+IGV4dGVuZHMgdHJ1ZVxuICAgID8gYCR7S31gIHwgYCR7S31bJHtudW1iZXJ9XWAgfCAoUGF0aE9mPEFycmF5RWxlbWVudFJhdzxUUHJvcD4sIERlYzxEZXB0aD4+IGV4dGVuZHMgbmV2ZXIgPyBuZXZlciA6IGAke0t9WyR7bnVtYmVyfV0uJHtQYXRoT2Y8QXJyYXlFbGVtZW50UmF3PFRQcm9wPiwgRGVjPERlcHRoPj59YClcbiAgICA6IElzTm9uQXJyYXlPYmplY3Q8VFByb3A+IGV4dGVuZHMgdHJ1ZVxuICAgICAgPyBgJHtLfWAgfCAoUGF0aE9mPENsZWFuPFRQcm9wPiwgRGVjPERlcHRoPj4gZXh0ZW5kcyBuZXZlciA/IG5ldmVyIDogYCR7S30uJHtQYXRoT2Y8Q2xlYW48VFByb3A+LCBEZWM8RGVwdGg+Pn1gKVxuICAgICAgOiBgJHtLfWA7XG5cbi8vIFBhdGggY2hvIG9iamVjdCAobWFwIHThu6tuZyBrZXkpXG50eXBlIFBhdGhGb3JPYmplY3Q8VCwgRGVwdGggZXh0ZW5kcyBudW1iZXI+ID0ge1xuICBbSyBpbiBTdHJLZXlzPFQ+XTogUGF0aEZvclByb3A8VFtLXSwgSywgRGVwdGg+O1xufVtTdHJLZXlzPFQ+XTtcblxuLyoqID09PT09PT09PT09PT09PT09PT09PT0gUHVibGljOiBQYXRoT2YgKGh5YnJpZCwgRGVwdGggbeG6t2MgxJHhu4tuaCA2KSA9PT09PT09PT09PT09PT09PT09PT09ICoqL1xuXG5leHBvcnQgdHlwZSBQYXRoT2Y8VFJhdywgRGVwdGggZXh0ZW5kcyBudW1iZXIgPSA2PiA9XG4gIElzRE9NVHlwZTxUUmF3PiBleHRlbmRzIHRydWVcbiAgICA/IGFueVxuICAgIDogVFJhdyBleHRlbmRzIHVua25vd25cbiAgICAgID8gc3RyaW5nXG4gICAgICA6IFtEZXB0aF0gZXh0ZW5kcyBbMF1cbiAgICAgICAgPyBuZXZlclxuICAgICAgICA6IEJhc2U8VFJhdz4gZXh0ZW5kcyByZWFkb25seSB1bmtub3duW10gfCB1bmtub3duW11cbiAgICAgICAgICA/IFBhdGhGb3JBcnJheTxUUmF3LCBEZXB0aD5cbiAgICAgICAgICA6IEJhc2U8VFJhdz4gZXh0ZW5kcyBvYmplY3RcbiAgICAgICAgICAgID8gUGF0aEZvck9iamVjdDxCYXNlPFRSYXc+LCBEZXB0aD5cbiAgICAgICAgICAgIDogc3RyaW5nO1xuXG4vKiogPT09PT09PT09PT09PT09PT09PT09PSBSZXNvbHZlIGdpw6EgdHLhu4sgdGhlbyBwYXRoID09PT09PT09PT09PT09PT09PT09PT0gKiovXG5cbi8vIEdldEludGVybmFsOiDEkWkgdGhlbyBzdHJpbmcgcGF0aCDEkeG7gyByZXNvbHZlIHR5cGUgZ2nDoSB0cuG7iyBjdeG7kWkgY8O5bmdcbnR5cGUgR2V0SW50ZXJuYWw8VFJhdywgUCBleHRlbmRzIHN0cmluZywgUiBleHRlbmRzIGJvb2xlYW4+ID1cbiAgLy8gW3hdLlJlc3QgKMSRw6FuaCBpbmRleCB2w6BvIHJvb3QgYXJyYXkpXG4gIFAgZXh0ZW5kcyBgWyR7aW5mZXIgSX1dLiR7aW5mZXIgUmVzdH1gXG4gICAgPyBJIGV4dGVuZHMgYCR7bnVtYmVyfWBcbiAgICAgID8gR2V0SW50ZXJuYWw8QXJyYXlFbGVtZW50UmF3PFRSYXc+LCBSZXN0LCBSPlxuICAgICAgOiBhbnlcbiAgICA6IC8vIFt4XSAoY2jhu4kgaW5kZXgpXG4gICAgICBQIGV4dGVuZHMgYFske2luZmVyIEl9XWBcbiAgICAgID8gSSBleHRlbmRzIGAke251bWJlcn1gXG4gICAgICAgID8gRmluYWxpemU8QXJyYXlFbGVtZW50UmF3PFRSYXc+LCBSPlxuICAgICAgICA6IGFueVxuICAgICAgOiAvLyBLW3hdLlJlc3QgKMSRw6FuaCBpbmRleCB2w6BvIGZpZWxkIG3huqNuZylcbiAgICAgICAgUCBleHRlbmRzIGAke2luZmVyIEt9WyR7aW5mZXIgSX1dLiR7aW5mZXIgUmVzdH1gXG4gICAgICAgID8gSyBleHRlbmRzIFN0cktleXM8QmFzZTxUUmF3Pj5cbiAgICAgICAgICA/IEkgZXh0ZW5kcyBgJHtudW1iZXJ9YFxuICAgICAgICAgICAgPyBHZXRJbnRlcm5hbDxBcnJheUVsZW1lbnRSYXc8QmFzZTxUUmF3PltLXT4sIFJlc3QsIFI+XG4gICAgICAgICAgICA6IGFueVxuICAgICAgICAgIDogYW55XG4gICAgICAgIDogLy8gSy5SZXN0ICjEkWkgc8OidSB2w6BvIG9iamVjdClcbiAgICAgICAgICBQIGV4dGVuZHMgYCR7aW5mZXIgS30uJHtpbmZlciBSZXN0fWBcbiAgICAgICAgICA/IEsgZXh0ZW5kcyBTdHJLZXlzPEJhc2U8VFJhdz4+XG4gICAgICAgICAgICA/IElzQXJyYXlMaWtlPEJhc2U8VFJhdz5bS10+IGV4dGVuZHMgdHJ1ZVxuICAgICAgICAgICAgICA/IGFueSAvLyBraMO0bmcgaOG7lyB0cuG7oyBkb3QgdsOgbyBwaOG6p24gdOG7rSBt4bqjbmcga2hpIHRoaeG6v3UgaW5kZXhcbiAgICAgICAgICAgICAgOiBHZXRJbnRlcm5hbDxCYXNlPFRSYXc+W0tdLCBSZXN0LCBSPlxuICAgICAgICAgICAgOiBhbnlcbiAgICAgICAgICA6IC8vIEtbPG51bWJlcj5dIChr4bq/dCB0aMO6YyDhu58gaW5kZXgpXG4gICAgICAgICAgICBQIGV4dGVuZHMgYCR7aW5mZXIgS31bJHtpbmZlciBJfV1gXG4gICAgICAgICAgICA/IEsgZXh0ZW5kcyBTdHJLZXlzPEJhc2U8VFJhdz4+XG4gICAgICAgICAgICAgID8gSSBleHRlbmRzIGAke251bWJlcn1gXG4gICAgICAgICAgICAgICAgPyBGaW5hbGl6ZTxBcnJheUVsZW1lbnRSYXc8QmFzZTxUUmF3PltLXT4sIFI+XG4gICAgICAgICAgICAgICAgOiBhbnlcbiAgICAgICAgICAgICAgOiBhbnlcbiAgICAgICAgICAgIDogLy8gSyAoa+G6v3QgdGjDumMg4bufIGtleSlcbiAgICAgICAgICAgICAgUCBleHRlbmRzIGAke2luZmVyIEt9YFxuICAgICAgICAgICAgICA/IEsgZXh0ZW5kcyBTdHJLZXlzPEJhc2U8VFJhdz4+XG4gICAgICAgICAgICAgICAgPyBGaW5hbGl6ZTxCYXNlPFRSYXc+W0tdLCBSPlxuICAgICAgICAgICAgICAgIDogYW55XG4gICAgICAgICAgICAgIDogYW55O1xuXG4vKiogPT09PT09PT09PT09PT09PT09PT09PSBQdWJsaWM6IEdldFZhbHVlQXRQYXRoICYgR2V0UmV0dXJuVHlwZSA9PT09PT09PT09PT09PT09PT09PT09ICoqL1xuXG4vLyBSZXNvbHZlIGtp4buDdSBnacOhIHRy4buLIHThuqFpIHBhdGggUC4gTuG6v3UgUj10cnVlLCBnaeG7ryBuZ3V5w6puIFNpZ25hbDsgbeG6t2MgxJHhu4tuaCBSPWZhbHNlIHPhur0gdW53cmFwIHRvw6BuIGLhu5kgU2lnbmFsLlxuZXhwb3J0IHR5cGUgR2V0VmFsdWVBdFBhdGg8VFJhdywgUCBleHRlbmRzIFBhdGhPZjxUUmF3PiwgUiBleHRlbmRzIGJvb2xlYW4gPSBmYWxzZT4gPSBHZXRJbnRlcm5hbDxUUmF3LCBQLCBSPjtcblxuLy8gS2nhu4N1IHRy4bqjIHbhu4EgY+G7p2EgZ2V0KCkgZOG7sWEgdHLDqm4gZGVmYXVsdFZhbHVlIERcbmV4cG9ydCB0eXBlIEdldFJldHVyblR5cGU8TywgUCBleHRlbmRzIFBhdGhPZjxPPiwgS2VlcFNpZ25hbCBleHRlbmRzIGJvb2xlYW4sIEQ+ID0gRCBleHRlbmRzIHVuZGVmaW5lZCA/IEdldFZhbHVlQXRQYXRoPE8sIFAsIEtlZXBTaWduYWw+IDogRDtcblxuLyoqID09PT09PT09PT09PT09PT09PT09PT0gKFR14buzIGNo4buNbikgVsOtIGThu6UgbmhhbmggPT09PT09PT09PT09PT09PT09PT09PSAqKi9cblxuLy8gaW1wb3J0IHsgV3JpdGFibGVTaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLy8gZXhwb3J0IGludGVyZmFjZSBUZXN0IHtcbi8vICAgc3BlY2lmaWNfcXVlcnk/OiBXcml0YWJsZVNpZ25hbDxJQXNzaWdubWVudEl0ZW1RdWVyeT47XG5cbi8vICAgZGF0YTogV3JpdGFibGVTaWduYWw8QXJyYXk8V3JpdGFibGVTaWduYWw8SUFzc2lnbm1lbnRJdGVtPj4+O1xuXG4vLyAgIGluZGV4OiBudW1iZXI7XG4vLyAgIGluZm86IHtcbi8vICAgICBuYW1lOiBzdHJpbmc7XG4vLyAgICAgYWdlOiBudW1iZXI7XG4vLyAgIH07XG4vLyAgIGNpdHk6IFdyaXRhYmxlU2lnbmFsPHtcbi8vICAgICBuYW1lOiBzdHJpbmc7XG4vLyAgICAgY291bnRyeTogc3RyaW5nO1xuLy8gICB9Pjtcbi8vICAgYWRkcmVzczogV3JpdGFibGVTaWduYWw8e1xuLy8gICAgIGlwOiBXcml0YWJsZVNpZ25hbDxzdHJpbmc+O1xuLy8gICAgIHBvcnQ6IFdyaXRhYmxlU2lnbmFsPG51bWJlcj47XG4vLyAgIH0+O1xuLy8gICBvd25lcjogQXJyYXk8c3RyaW5nPjtcbi8vICAgc3VwcG9ydDogQXJyYXk8V3JpdGFibGVTaWduYWw8c3RyaW5nPj47XG4vLyAgIGhvc3Q6IEFycmF5PHtcbi8vICAgICBpcDogV3JpdGFibGVTaWduYWw8c3RyaW5nPjtcbi8vICAgICBwb3J0OiBudW1iZXI7XG4vLyAgIH0+O1xuXG4vLyAgIGNvdW50cnk6IFdyaXRhYmxlU2lnbmFsPFxuLy8gICAgIEFycmF5PFxuLy8gICAgICAgV3JpdGFibGVTaWduYWw8e1xuLy8gICAgICAgICBuYW1lOiBXcml0YWJsZVNpZ25hbDx7XG4vLyAgICAgICAgICAgdmk6IHN0cmluZztcbi8vICAgICAgICAgICBlbjogc3RyaW5nO1xuLy8gICAgICAgICB9Pjtcbi8vICAgICAgICAgY29kZTogV3JpdGFibGVTaWduYWw8e1xuLy8gICAgICAgICAgIHZpOiBXcml0YWJsZVNpZ25hbDxzdHJpbmc+O1xuLy8gICAgICAgICAgIGVuOiBXcml0YWJsZVNpZ25hbDxzdHJpbmc+O1xuLy8gICAgICAgICB9Pjtcbi8vICAgICAgICAgZmxhZzogV3JpdGFibGVTaWduYWw8c3RyaW5nPjtcbi8vICAgICAgICAgcGhvbmVfY29kZTogc3RyaW5nO1xuLy8gICAgICAgICBjdXJyZW5jeToge1xuLy8gICAgICAgICAgIG5hbWU6IHN0cmluZztcbi8vICAgICAgICAgICBjb2RlOiBXcml0YWJsZVNpZ25hbDxzdHJpbmc+O1xuLy8gICAgICAgICAgIHN5bWJvbDogV3JpdGFibGVTaWduYWw8e1xuLy8gICAgICAgICAgICAgdmk6IHN0cmluZztcbi8vICAgICAgICAgICAgIGVuOiBzdHJpbmc7XG4vLyAgICAgICAgICAgICBjbjogV3JpdGFibGVTaWduYWw8QXJyYXk8c3RyaW5nPj47XG4vLyAgICAgICAgICAgICBqcDogV3JpdGFibGVTaWduYWw8XG4vLyAgICAgICAgICAgICAgIEFycmF5PFxuLy8gICAgICAgICAgICAgICAgIFdyaXRhYmxlU2lnbmFsPHtcbi8vICAgICAgICAgICAgICAgICAgIHZpOiBzdHJpbmc7XG4vLyAgICAgICAgICAgICAgICAgICBlbjogc3RyaW5nO1xuLy8gICAgICAgICAgICAgICAgIH0+XG4vLyAgICAgICAgICAgICAgID5cbi8vICAgICAgICAgICAgID47XG4vLyAgICAgICAgICAgfT47XG4vLyAgICAgICAgIH07XG4vLyAgICAgICB9PlxuLy8gICAgID5cbi8vICAgPjtcbi8vIH1cblxuLy8gaW50ZXJmYWNlIElBc3NpZ25tZW50SXRlbSB7XG4vLyAgIGlkOiBXcml0YWJsZVNpZ25hbDxzdHJpbmc+O1xuLy8gICBuYW1lOiBXcml0YWJsZVNpZ25hbDxzdHJpbmc+O1xuLy8gICBkZXNjcmlwdGlvbjogV3JpdGFibGVTaWduYWw8c3RyaW5nPjtcbi8vICAgY3JlYXRlZF9hdDogV3JpdGFibGVTaWduYWw8c3RyaW5nPjtcbi8vICAgdXBkYXRlZF9hdDogV3JpdGFibGVTaWduYWw8c3RyaW5nPjtcbi8vIH1cblxuLy8gZXhwb3J0IGludGVyZmFjZSBJQXNzaWdubWVudEl0ZW1RdWVyeSB7XG4vLyAgIHBlcl9wYWdlOiBXcml0YWJsZVNpZ25hbDxudW1iZXI+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+LCAnWzBdLmNvdW50cnlbMF0uY3VycmVuY3kuc3ltYm9sLmNuWzBdJywgdHJ1ZT47IC8vIHN0cmluZ1xuIl19
package/esm2022/index.mjs CHANGED
@@ -14,4 +14,5 @@ export * from './paging.interface';
14
14
  export * from './string.interface';
15
15
  export * from './template-ref.interface';
16
16
  export * from './validator.interface';
17
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzLXVpL2ludGVyZmFjZXMtdHlwZXMvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYyxrQ0FBa0MsQ0FBQztBQUNqRCxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYyx5Q0FBeUMsQ0FBQztBQUN4RCxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLHVCQUF1QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9hc3BlY3QtcmF0aW8uaW50ZXJmYWNlJztcbmV4cG9ydCAqIGZyb20gJy4vYm91bmRpbmctY2xpZW50LXJlY3QuaW50ZXJmYWNlJztcbmV4cG9ydCAqIGZyb20gJy4vY29tbXVuaWNhdGUtbWljcm8udHlwZSc7XG5leHBvcnQgKiBmcm9tICcuL2V2ZW50LWJyb3dzZXIuaW50ZXJmYWNlJztcbmV4cG9ydCAqIGZyb20gJy4vZXh0cmFjdC1pbnB1dHMudHlwZSc7XG5leHBvcnQgKiBmcm9tICcuL2ZpbGUuaW50ZXJmYWNlJztcbmV4cG9ydCAqIGZyb20gJy4vZnVuY3Rpb24udHlwZSc7XG5leHBvcnQgKiBmcm9tICcuL2dlbmVyaWMtdXRpbGl0aWVzLWZvci1wYXRoLXZhbHVlLnR5cGUnO1xuZXhwb3J0ICogZnJvbSAnLi9odHRwLXByb2Nlc3MtdXBsb2FkLmludGVyZmFjZSc7XG5leHBvcnQgKiBmcm9tICcuL2h0dHAtcmVzcG9uc2UuaW50ZXJmYWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGFuZ3VhZ2Utc3VwcG9ydC50eXBlJztcbmV4cG9ydCAqIGZyb20gJy4vb2JqZWN0LnR5cGUnO1xuZXhwb3J0ICogZnJvbSAnLi9wYWdpbmcuaW50ZXJmYWNlJztcbmV4cG9ydCAqIGZyb20gJy4vc3RyaW5nLmludGVyZmFjZSc7XG5leHBvcnQgKiBmcm9tICcuL3RlbXBsYXRlLXJlZi5pbnRlcmZhY2UnO1xuZXhwb3J0ICogZnJvbSAnLi92YWxpZGF0b3IuaW50ZXJmYWNlJztcbiJdfQ==
17
+ export * from './date.type';
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzLXVpL2ludGVyZmFjZXMtdHlwZXMvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYyxrQ0FBa0MsQ0FBQztBQUNqRCxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYyx5Q0FBeUMsQ0FBQztBQUN4RCxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsYUFBYSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9hc3BlY3QtcmF0aW8uaW50ZXJmYWNlJztcbmV4cG9ydCAqIGZyb20gJy4vYm91bmRpbmctY2xpZW50LXJlY3QuaW50ZXJmYWNlJztcbmV4cG9ydCAqIGZyb20gJy4vY29tbXVuaWNhdGUtbWljcm8udHlwZSc7XG5leHBvcnQgKiBmcm9tICcuL2V2ZW50LWJyb3dzZXIuaW50ZXJmYWNlJztcbmV4cG9ydCAqIGZyb20gJy4vZXh0cmFjdC1pbnB1dHMudHlwZSc7XG5leHBvcnQgKiBmcm9tICcuL2ZpbGUuaW50ZXJmYWNlJztcbmV4cG9ydCAqIGZyb20gJy4vZnVuY3Rpb24udHlwZSc7XG5leHBvcnQgKiBmcm9tICcuL2dlbmVyaWMtdXRpbGl0aWVzLWZvci1wYXRoLXZhbHVlLnR5cGUnO1xuZXhwb3J0ICogZnJvbSAnLi9odHRwLXByb2Nlc3MtdXBsb2FkLmludGVyZmFjZSc7XG5leHBvcnQgKiBmcm9tICcuL2h0dHAtcmVzcG9uc2UuaW50ZXJmYWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGFuZ3VhZ2Utc3VwcG9ydC50eXBlJztcbmV4cG9ydCAqIGZyb20gJy4vb2JqZWN0LnR5cGUnO1xuZXhwb3J0ICogZnJvbSAnLi9wYWdpbmcuaW50ZXJmYWNlJztcbmV4cG9ydCAqIGZyb20gJy4vc3RyaW5nLmludGVyZmFjZSc7XG5leHBvcnQgKiBmcm9tICcuL3RlbXBsYXRlLXJlZi5pbnRlcmZhY2UnO1xuZXhwb3J0ICogZnJvbSAnLi92YWxpZGF0b3IuaW50ZXJmYWNlJztcbmV4cG9ydCAqIGZyb20gJy4vZGF0ZS50eXBlJztcbiJdfQ==
@@ -9,6 +9,6 @@ type RequiredInputProperties<T> = {
9
9
  type OptionalInputProperties<T> = {
10
10
  [K in keyof T as T[K] extends InputSignal<infer U> ? (undefined extends U ? K : never) : never]?: UnwrapInputSignal<T, K>;
11
11
  };
12
- export type ExtractInputs<T> = RequiredInputProperties<T> & OptionalInputProperties<T>;
13
- export type Inputs<T> = Partial<UnwrapSignals<T>> & ExtractInputs<T>;
12
+ export type ExtractInputs<T, R extends boolean = true> = (R extends true ? RequiredInputProperties<T> : Partial<RequiredInputProperties<T>>) & OptionalInputProperties<T>;
13
+ export type Inputs<T, R extends boolean = true> = Partial<UnwrapSignals<T>> & ExtractInputs<T, R>;
14
14
  export {};
@@ -1,5 +1,149 @@
1
1
  /* eslint-disable @typescript-eslint/no-explicit-any */
2
2
 
3
+ /** ====================== (Tuỳ chọn) Ví dụ nhanh ====================== **/
4
+ // import { WritableSignal } from '@angular/core';
5
+ // export interface Test {
6
+ // specific_query?: WritableSignal<IAssignmentItemQuery>;
7
+ // data: WritableSignal<Array<WritableSignal<IAssignmentItem>>>;
8
+ // index: number;
9
+ // info: {
10
+ // name: string;
11
+ // age: number;
12
+ // };
13
+ // city: WritableSignal<{
14
+ // name: string;
15
+ // country: string;
16
+ // }>;
17
+ // address: WritableSignal<{
18
+ // ip: WritableSignal<string>;
19
+ // port: WritableSignal<number>;
20
+ // }>;
21
+ // owner: Array<string>;
22
+ // support: Array<WritableSignal<string>>;
23
+ // host: Array<{
24
+ // ip: WritableSignal<string>;
25
+ // port: number;
26
+ // }>;
27
+ // country: WritableSignal<
28
+ // Array<
29
+ // WritableSignal<{
30
+ // name: WritableSignal<{
31
+ // vi: string;
32
+ // en: string;
33
+ // }>;
34
+ // code: WritableSignal<{
35
+ // vi: WritableSignal<string>;
36
+ // en: WritableSignal<string>;
37
+ // }>;
38
+ // flag: WritableSignal<string>;
39
+ // phone_code: string;
40
+ // currency: {
41
+ // name: string;
42
+ // code: WritableSignal<string>;
43
+ // symbol: WritableSignal<{
44
+ // vi: string;
45
+ // en: string;
46
+ // cn: WritableSignal<Array<string>>;
47
+ // jp: WritableSignal<
48
+ // Array<
49
+ // WritableSignal<{
50
+ // vi: string;
51
+ // en: string;
52
+ // }>
53
+ // >
54
+ // >;
55
+ // }>;
56
+ // };
57
+ // }>
58
+ // >
59
+ // >;
60
+ // }
61
+ // interface IAssignmentItem {
62
+ // id: WritableSignal<string>;
63
+ // name: WritableSignal<string>;
64
+ // description: WritableSignal<string>;
65
+ // created_at: WritableSignal<string>;
66
+ // updated_at: WritableSignal<string>;
67
+ // }
68
+ // export interface IAssignmentItemQuery {
69
+ // per_page: WritableSignal<number>;
70
+ // after_token?: WritableSignal<string>;
71
+ // before_token?: WritableSignal<string>;
72
+ // search?: WritableSignal<string>;
73
+ // search_index?: WritableSignal<number>;
74
+ // }
75
+ // type V_index_F = GetValueAtPath<Test, 'index', false>; // number
76
+ // type V_index_T = GetValueAtPath<Test, 'index', true>; // number
77
+ // type V_info_F = GetValueAtPath<Test, 'info', false>; // { name: string; age: number }
78
+ // type V_info_T = GetValueAtPath<Test, 'info', true>; // { name: string; age: number }
79
+ // type V_info_name_F = GetValueAtPath<Test, 'info.name', false>; // string
80
+ // type V_info_name_T = GetValueAtPath<Test, 'info.name', true>; // string
81
+ // type V_info_age_F = GetValueAtPath<Test, 'info.age', false>; // number
82
+ // type V_info_age_T = GetValueAtPath<Test, 'info.age', true>; // number
83
+ // // City (signal-wrapped object with plain fields)
84
+ // type V_city_F = GetValueAtPath<Test, 'city', false>; // { name: string; country: string }
85
+ // type V_city_T = GetValueAtPath<Test, 'city', true>; // WritableSignal<{ name: string; country: string }>
86
+ // type V_city_name_F = GetValueAtPath<Test, 'city.name', false>; // string
87
+ // type V_city_name_T = GetValueAtPath<Test, 'city.name', true>; // string
88
+ // type V_city_country_F = GetValueAtPath<Test, 'city.country', false>; // string
89
+ // type V_city_country_T = GetValueAtPath<Test, 'city.country', true>; // string
90
+ // // Address (signal-wrapped object with signal leaves)
91
+ // type V_address_F = GetValueAtPath<Test, 'address', false>; // { ip: string; port: number }
92
+ // type V_address_T = GetValueAtPath<Test, 'address', true>; // WritableSignal<{ ip: WritableSignal<string>; port: WritableSignal<number> }>
93
+ // type V_address_ip_F = GetValueAtPath<Test, 'address.ip', false>; // string
94
+ // type V_address_ip_T = GetValueAtPath<Test, 'address.ip', true>; // WritableSignal<string>
95
+ // type V_address_port_F = GetValueAtPath<Test, 'address.port', false>; // number
96
+ // type V_address_port_T = GetValueAtPath<Test, 'address.port', true>; // WritableSignal<number>
97
+ // // Owner (array of primitives)
98
+ // type V_owner_F = GetValueAtPath<Test, 'owner', false>; // string[]
99
+ // type V_owner_T = GetValueAtPath<Test, 'owner', true>; // string[]
100
+ // type V_owner_idx_F = GetValueAtPath<Test, 'owner[0]', false>; // string
101
+ // type V_owner_idx_T = GetValueAtPath<Test, 'owner[0]', true>; // string
102
+ // // Support (array of signals)
103
+ // type V_support_F = GetValueAtPath<Test, 'support', false>; // string[]
104
+ // type V_support_T = GetValueAtPath<Test, 'support', true>; // WritableSignal<string>[]
105
+ // type V_support_idx_F = GetValueAtPath<Test, 'support[0]', false>; // string
106
+ // type V_support_idx_T = GetValueAtPath<Test, 'support[0]', true>; // WritableSignal<string>
107
+ // // Host (array of objects with mixed leaves)
108
+ // type V_host_F = GetValueAtPath<Test, 'host', false>; // { ip: string; port: number }[]
109
+ // type V_host_T = GetValueAtPath<Test, 'host', true>; // { ip: WritableSignal<string>; port: number }[]
110
+ // type V_host_idx_F = GetValueAtPath<Test, 'host[0]', false>; // { ip: string; port: number }
111
+ // type V_host_idx_T = GetValueAtPath<Test, 'host[0]', true>; // { ip: WritableSignal<string>; port: number }
112
+ // type V_host_ip_F = GetValueAtPath<Test, 'host[0].ip', false>; // string
113
+ // type V_host_ip_T = GetValueAtPath<Test, 'host[0].ip', true>; // WritableSignal<string>
114
+ // type V_host_port_F = GetValueAtPath<Test, 'host[0].port', false>; // number
115
+ // type V_host_port_T = GetValueAtPath<Test, 'host[0].port', true>; // number
116
+ // // currency
117
+ // type V_currency_F = GetValueAtPath<Test, 'country[0].currency', false>; // { name: string; code: string; symbol: { ... } }
118
+ // type V_currency_T = GetValueAtPath<Test, 'country[0].currency', true>; // { name: string; code: WritableSignal<string>; symbol: WritableSignal<{ ... }> }
119
+ // type V_currency_name_F = GetValueAtPath<Test, 'country[0].currency.name', false>; // string
120
+ // type V_currency_name_T = GetValueAtPath<Test, 'country[0].currency.name', true>; // string
121
+ // type V_currency_code_F = GetValueAtPath<Test, 'country[0].currency.code', false>; // string
122
+ // type V_currency_code_T = GetValueAtPath<Test, 'country[0].currency.code', true>; // WritableSignal<string>
123
+ // // currency.symbol
124
+ // type V_symbol_F = GetValueAtPath<Test, 'country[0].currency.symbol', false>; // { vi: string; en: string; cn: string[]; jp: { vi: string; en: string }[] }
125
+ // 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 }[]> }>
126
+ // type V_symbol_vi_F = GetValueAtPath<Test, 'country[0].currency.symbol.vi', false>; // string
127
+ // type V_symbol_vi_T = GetValueAtPath<Test, 'country[0].currency.symbol.vi', true>; // string
128
+ // type V_symbol_en_F = GetValueAtPath<Test, 'country[0].currency.symbol.en', false>; // string
129
+ // type V_symbol_en_T = GetValueAtPath<Test, 'country[0].currency.symbol.en', true>; // string
130
+ // type V_symbol_cn_F = GetValueAtPath<Test, 'country[0].currency.symbol.cn', false>; // string[]
131
+ // type V_symbol_cn_T = GetValueAtPath<Test, 'country[0].currency.symbol.cn', true>; // WritableSignal<string[]>
132
+ // type V_symbol_cn_idx_F = GetValueAtPath<Test, 'country[0].currency.symbol.cn[0]', false>; // string
133
+ // type V_symbol_cn_idx_T = GetValueAtPath<Test, 'country[0].currency.symbol.cn[0]', true>; // string
134
+ // type V_symbol_jp_F = GetValueAtPath<Test, 'country[0].currency.symbol.jp', false>; // { vi: string; en: string }[]
135
+ // type V_symbol_jp_T = GetValueAtPath<Test, 'country[0].currency.symbol.jp', true>; // WritableSignal<{ vi: string; en: string }[]>
136
+ // type V_symbol_jp_idx_F = GetValueAtPath<Test, 'country[0].currency.symbol.jp[0]', false>; // { vi: string; en: string }
137
+ // type V_symbol_jp_idx_T = GetValueAtPath<Test, 'country[0].currency.symbol.jp[0]', true>; // WritableSignal<{ vi: string; en: string }>
138
+ // type V_symbol_jp_vi_F = GetValueAtPath<Test, 'country[0].currency.symbol.jp[0].vi', false>; // string
139
+ // type V_symbol_jp_vi_T = GetValueAtPath<Test, 'country[0].currency.symbol.jp[0].vi', true>; // string
140
+ // type V_symbol_jp_en_F = GetValueAtPath<Test, 'country[0].currency.symbol.jp[0].en', false>; // string
141
+ // type V_symbol_jp_en_T = GetValueAtPath<Test, 'country[0].currency.symbol.jp[0].en', true>; // string
142
+ // type V_Array_symbol_cn_F = GetValueAtPath<Array<Test>, '[0].country[0].currency.symbol.cn', false>; // string[]
143
+ // type V_Array_symbol_cn_T = GetValueAtPath<Array<Test>, '[0].country[0].currency.symbol.cn', true>; // WritableSignal<string[]>
144
+ // type V_Array_symbol_cn_idx_F = GetValueAtPath<Array<Test>, '[0].country[0].currency.symbol.cn[0]', false>; // string
145
+ // type V_Array_symbol_cn_idx_T = GetValueAtPath<Array<Test>, '[0].country[0].currency.symbol.cn[0]', true>; // string
146
+
3
147
  // | "fr" // Tiếng Pháp
4
148
  // | "de" // Tiếng Đức
5
149
  // | "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 sau khi unwrap toàn bộ Signal\ntype ArrayElementRaw<T> = Base<T> extends ReadonlyArray<infer U> ? U : Base<T> extends (infer U)[] ? U : never;\n\n// Kiểm tra array-like sau khi unwrap toàn bộ Signal\ntype IsArrayLike<T> = Base<T> extends readonly unknown[] ? true : Base<T> extends unknown[] ? true : false;\n\n// Kiểm tra object không phải array sau khi unwrap toàn bộ Signal\ntype IsNonArrayObject<T> = Base<T> extends object ? (Base<T> extends readonly unknown[] ? false : Base<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\n ? any\n : TRaw extends unknown\n ? string\n : [Depth] extends [0]\n ? never\n : Base<TRaw> extends readonly unknown[] | unknown[]\n ? PathForArray<TRaw, Depth>\n : Base<TRaw> extends object\n ? PathForObject<Base<TRaw>, Depth>\n : 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<Base<TRaw>>\n ? I extends `${number}`\n ? GetInternal<ArrayElementRaw<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<Base<TRaw>>\n ? IsArrayLike<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<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<Base<TRaw>>\n ? I extends `${number}`\n ? Finalize<ArrayElementRaw<Base<TRaw>[K]>, R>\n : any\n : any\n : // K (kết thúc ở key)\n P extends `${infer K}`\n ? K extends StrKeys<Base<TRaw>>\n ? Finalize<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>, KeepSignal extends boolean, D> = D extends undefined ? GetValueAtPath<O, P, KeepSignal> : D;\n\n/** ====================== (Tuỳ chọn) Ví dụ nhanh ====================== **/\n\n// import { WritableSignal } from '@angular/core';\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// }\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","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;;AC+HA;AAEA;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;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;;AC3RA;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,18 +1,32 @@
1
1
  import { Signal } from '@angular/core';
2
+ /** ====================== Helpers: unwrap & shape ====================== **/
2
3
  type UnwrapSignal<T> = T extends Signal<infer U> ? U : T;
3
4
  type UnwrapAllSignals<T> = T extends Signal<infer U> ? UnwrapAllSignals<U> : T;
4
5
  type Clean<T> = Exclude<UnwrapSignal<T>, undefined | null>;
5
6
  type StrKeys<T> = Extract<keyof T, string>;
6
- type ArrayElementRaw<T> = T extends (infer A)[] ? A : T extends ReadonlyArray<infer B> ? B : T extends Signal<infer U> ? (U extends (infer C)[] ? C : U extends ReadonlyArray<infer D> ? D : any) : any;
7
- type IsArrayLike<T> = Clean<T> extends readonly unknown[] ? true : false;
8
- type IsNonArrayObject<T> = Clean<T> extends object ? (Clean<T> extends readonly unknown[] ? false : true) : false;
7
+ type Base<T> = UnwrapAllSignals<T>;
8
+ /** ====================== Array helpers ====================== **/
9
+ type ArrayElementRaw<T> = Base<T> extends ReadonlyArray<infer U> ? U : Base<T> extends (infer U)[] ? U : never;
10
+ type IsArrayLike<T> = Base<T> extends readonly unknown[] ? true : Base<T> extends unknown[] ? true : false;
11
+ type IsNonArrayObject<T> = Base<T> extends object ? (Base<T> extends readonly unknown[] ? false : Base<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) ====================== **/
9
15
  type Finalize<T, R extends boolean> = R extends true ? T : UnwrapAllSignals<T>;
10
- type PathForProp<PropRaw, K extends string> = IsArrayLike<PropRaw> extends true ? `${K}` | `${K}[${number}]` | (PathOf<ArrayElementRaw<PropRaw>> extends any ? any : `${K}[${number}].${PathOf<ArrayElementRaw<PropRaw>>}`) : IsNonArrayObject<PropRaw> extends true ? `${K}` | (PathOf<Clean<PropRaw>> extends any ? any : `${K}.${PathOf<Clean<PropRaw>>}`) : `${K}`;
11
- type GetInternal<TRaw, P extends string, R extends boolean> = P extends `${infer K}[${infer I}].${infer Rest}` ? K extends StrKeys<Clean<TRaw>> ? I extends `${number}` ? GetInternal<ArrayElementRaw<Clean<TRaw>[K]>, Rest, R> : any : any : P extends `${infer K}.${infer Rest}` ? K extends StrKeys<Clean<TRaw>> ? IsArrayLike<Clean<TRaw>[K]> extends true ? any : GetInternal<Clean<TRaw>[K], Rest, R> : any : P extends `${infer K}[${infer I}]` ? K extends StrKeys<Clean<TRaw>> ? I extends `${number}` ? Finalize<ArrayElementRaw<Clean<TRaw>[K]>, R> : any : any : P extends `${infer K}` ? K extends StrKeys<Clean<TRaw>> ? Finalize<Clean<TRaw>[K], R> : any : any;
12
- type IsDOMType<T> = T extends Event | Node | Document | Element | Window | CSSStyleDeclaration | CSSRule | CSSStyleSheet ? true : false;
13
- export type PathOf<TRaw> = IsDOMType<TRaw> extends true ? any : TRaw extends unknown ? string : Clean<TRaw> extends object ? {
14
- [K in StrKeys<Clean<TRaw>>]: PathForProp<Clean<TRaw>[K], K>;
15
- }[StrKeys<Clean<TRaw>>] : any;
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 : TRaw extends unknown ? string : [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<Base<TRaw>> ? I extends `${number}` ? GetInternal<ArrayElementRaw<Base<TRaw>[K]>, Rest, R> : any : any : P extends `${infer K}.${infer Rest}` ? K extends StrKeys<Base<TRaw>> ? IsArrayLike<Base<TRaw>[K]> extends true ? any : GetInternal<Base<TRaw>[K], Rest, R> : any : P extends `${infer K}[${infer I}]` ? K extends StrKeys<Base<TRaw>> ? I extends `${number}` ? Finalize<ArrayElementRaw<Base<TRaw>[K]>, R> : any : any : P extends `${infer K}` ? K extends StrKeys<Base<TRaw>> ? Finalize<Base<TRaw>[K], R> : any : any;
28
+ /** ====================== Public: GetValueAtPath & GetReturnType ====================== **/
16
29
  export type GetValueAtPath<TRaw, P extends PathOf<TRaw>, R extends boolean = false> = GetInternal<TRaw, P, R>;
17
- export type GetReturnType<O, P extends PathOf<O>, KS extends boolean, D> = D extends undefined ? GetValueAtPath<O, P, KS> : D;
30
+ export type GetReturnType<O, P extends PathOf<O>, KeepSignal extends boolean, D> = D extends undefined ? GetValueAtPath<O, P, KeepSignal> : D;
18
31
  export {};
32
+ /** ====================== (Tuỳ chọn) Ví dụ nhanh ====================== **/
package/index.d.ts CHANGED
@@ -14,3 +14,4 @@ export * from './paging.interface';
14
14
  export * from './string.interface';
15
15
  export * from './template-ref.interface';
16
16
  export * from './validator.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.306-5",
3
+ "version": "0.2.306-6",
4
4
  "peerDependencies": {
5
5
  "rxjs": "~7.8.0"
6
6
  },