UNPKG

ngrx-rtk-query

Version:
52 lines 6.24 kB
/** * The code in this file is adapted from TanStack/query * * TanStack/query is an open-source project licensed under the MIT license. * * For more information about the original code, see * https://github.com/TanStack/query */ import { computed, untracked } from '@angular/core'; /** * Exposes fields of an object passed via an Angular `Signal` as `Computed` signals. * * Functions on the object are passed through as-is. * * @param signal - `Signal` that must return an object. * */ export function signalProxy(signal) { const internalState = {}; return new Proxy(internalState, { get(target, prop) { // first check if we have it in our internal state and return it const computedField = target[prop]; if (computedField) return computedField; // then, check if it's a function on the resultState and return it const targetField = untracked(signal)[prop]; if (typeof targetField === 'function') return targetField; // finally, create a computed field, store it and return it // @ts-expect-error bypass return (target[prop] = computed(() => signal()[prop])); }, has(_, prop) { return !!untracked(signal)[prop]; }, ownKeys() { return Reflect.ownKeys(untracked(signal)); }, getOwnPropertyDescriptor() { return { enumerable: true, configurable: true, }; }, }); } export function toDeepSignal(signal) { const deepSignal = signalProxy(signal); return Object.assign(signal, deepSignal); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbmFsLXByb3h5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbmdyeC1ydGstcXVlcnkvY29yZS9zcmMvdXRpbHMvc2lnbmFsLXByb3h5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O0dBT0c7QUFDSCxPQUFPLEVBQTJCLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFlN0U7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSxXQUFXLENBQXlDLE1BQWlCO0lBQ25GLE1BQU0sYUFBYSxHQUFHLEVBQW1CLENBQUM7SUFFMUMsT0FBTyxJQUFJLEtBQUssQ0FBZ0IsYUFBYSxFQUFFO1FBQzdDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsSUFBSTtZQUNkLGdFQUFnRTtZQUNoRSxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbkMsSUFBSSxhQUFhO2dCQUFFLE9BQU8sYUFBYSxDQUFDO1lBRXhDLGtFQUFrRTtZQUNsRSxNQUFNLFdBQVcsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDNUMsSUFBSSxPQUFPLFdBQVcsS0FBSyxVQUFVO2dCQUFFLE9BQU8sV0FBVyxDQUFDO1lBRTFELDJEQUEyRDtZQUMzRCwwQkFBMEI7WUFDMUIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pELENBQUM7UUFDRCxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUk7WUFDVCxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkMsQ0FBQztRQUNELE9BQU87WUFDTCxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDNUMsQ0FBQztRQUNELHdCQUF3QjtZQUN0QixPQUFPO2dCQUNMLFVBQVUsRUFBRSxJQUFJO2dCQUNoQixZQUFZLEVBQUUsSUFBSTthQUNuQixDQUFDO1FBQ0osQ0FBQztLQUNGLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxNQUFNLFVBQVUsWUFBWSxDQUF5QyxNQUFpQjtJQUNwRixNQUFNLFVBQVUsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdkMsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQztBQUMzQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUaGUgY29kZSBpbiB0aGlzIGZpbGUgaXMgYWRhcHRlZCBmcm9tIFRhblN0YWNrL3F1ZXJ5XG4gKlxuICogVGFuU3RhY2svcXVlcnkgaXMgYW4gb3Blbi1zb3VyY2UgcHJvamVjdCBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4gKlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG9yaWdpbmFsIGNvZGUsIHNlZVxuICogaHR0cHM6Ly9naXRodWIuY29tL1RhblN0YWNrL3F1ZXJ5XG4gKi9cbmltcG9ydCB7IHR5cGUgU2lnbmFsIGFzIE5nU2lnbmFsLCBjb21wdXRlZCwgdW50cmFja2VkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbi8vIEFuIGV4dGVuZGVkIFNpZ25hbCB0eXBlIHRoYXQgZW5hYmxlcyB0aGUgY29ycmVjdCB0eXBpbmdcbi8vIG9mIG5lc3RlZCBzaWduYWxzIHdpdGggdGhlIGBuYW1lYCBvciBgbGVuZ3RoYCBrZXkuXG5leHBvcnQgaW50ZXJmYWNlIFNpZ25hbDxUPiBleHRlbmRzIE5nU2lnbmFsPFQ+IHtcbiAgbmFtZTogdW5rbm93bjtcbiAgbGVuZ3RoOiB1bmtub3duO1xufVxuXG5leHBvcnQgdHlwZSBTaWduYWxzTWFwPFQ+ID0gUmVxdWlyZWQ8e1xuICBbSyBpbiBrZXlvZiBUXTogVFtLXSBleHRlbmRzIEZ1bmN0aW9uID8gVFtLXSA6IFNpZ25hbDxUW0tdPjtcbn0+O1xuXG5leHBvcnQgdHlwZSBEZWVwU2lnbmFsPFQ+ID0gU2lnbmFsPFQ+ICYgU2lnbmFsc01hcDxUPjtcblxuLyoqXG4gKiBFeHBvc2VzIGZpZWxkcyBvZiBhbiBvYmplY3QgcGFzc2VkIHZpYSBhbiBBbmd1bGFyIGBTaWduYWxgIGFzIGBDb21wdXRlZGAgc2lnbmFscy5cbiAqXG4gKiBGdW5jdGlvbnMgb24gdGhlIG9iamVjdCBhcmUgcGFzc2VkIHRocm91Z2ggYXMtaXMuXG4gKlxuICogQHBhcmFtIHNpZ25hbCAtIGBTaWduYWxgIHRoYXQgbXVzdCByZXR1cm4gYW4gb2JqZWN0LlxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNpZ25hbFByb3h5PFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nIHwgc3ltYm9sLCBhbnk+PihzaWduYWw6IFNpZ25hbDxUPik6IFNpZ25hbHNNYXA8VD4ge1xuICBjb25zdCBpbnRlcm5hbFN0YXRlID0ge30gYXMgU2lnbmFsc01hcDxUPjtcblxuICByZXR1cm4gbmV3IFByb3h5PFNpZ25hbHNNYXA8VD4+KGludGVybmFsU3RhdGUsIHtcbiAgICBnZXQodGFyZ2V0LCBwcm9wKSB7XG4gICAgICAvLyBmaXJzdCBjaGVjayBpZiB3ZSBoYXZlIGl0IGluIG91ciBpbnRlcm5hbCBzdGF0ZSBhbmQgcmV0dXJuIGl0XG4gICAgICBjb25zdCBjb21wdXRlZEZpZWxkID0gdGFyZ2V0W3Byb3BdO1xuICAgICAgaWYgKGNvbXB1dGVkRmllbGQpIHJldHVybiBjb21wdXRlZEZpZWxkO1xuXG4gICAgICAvLyB0aGVuLCBjaGVjayBpZiBpdCdzIGEgZnVuY3Rpb24gb24gdGhlIHJlc3VsdFN0YXRlIGFuZCByZXR1cm4gaXRcbiAgICAgIGNvbnN0IHRhcmdldEZpZWxkID0gdW50cmFja2VkKHNpZ25hbClbcHJvcF07XG4gICAgICBpZiAodHlwZW9mIHRhcmdldEZpZWxkID09PSAnZnVuY3Rpb24nKSByZXR1cm4gdGFyZ2V0RmllbGQ7XG5cbiAgICAgIC8vIGZpbmFsbHksIGNyZWF0ZSBhIGNvbXB1dGVkIGZpZWxkLCBzdG9yZSBpdCBhbmQgcmV0dXJuIGl0XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGJ5cGFzc1xuICAgICAgcmV0dXJuICh0YXJnZXRbcHJvcF0gPSBjb21wdXRlZCgoKSA9PiBzaWduYWwoKVtwcm9wXSkpO1xuICAgIH0sXG4gICAgaGFzKF8sIHByb3ApIHtcbiAgICAgIHJldHVybiAhIXVudHJhY2tlZChzaWduYWwpW3Byb3BdO1xuICAgIH0sXG4gICAgb3duS2V5cygpIHtcbiAgICAgIHJldHVybiBSZWZsZWN0Lm93bktleXModW50cmFja2VkKHNpZ25hbCkpO1xuICAgIH0sXG4gICAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgfTtcbiAgICB9LFxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvRGVlcFNpZ25hbDxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZyB8IHN5bWJvbCwgYW55Pj4oc2lnbmFsOiBTaWduYWw8VD4pOiBEZWVwU2lnbmFsPFQ+IHtcbiAgY29uc3QgZGVlcFNpZ25hbCA9IHNpZ25hbFByb3h5KHNpZ25hbCk7XG4gIHJldHVybiBPYmplY3QuYXNzaWduKHNpZ25hbCwgZGVlcFNpZ25hbCk7XG59XG4iXX0=