@loona/core
Version:
App State Management done with GraphQL (core package)
109 lines • 9.5 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,uselessCode} checked by tsc
*/
import produce from 'immer';
/**
* @param {?} context
* @param {?} client
* @return {?}
*/
export function buildContext(context, client) {
return Object.assign({}, context, { patchQuery: patchQuery(client), patchFragment: patchFragment(context, client), /**
* @param {?} options
* @return {?}
*/
writeData(options) {
return client.writeData(options);
} });
}
/**
* @param {?} cache
* @return {?}
*/
export function buildGetCacheKey(cache) {
return (obj) => {
if (((/** @type {?} */ (cache))).config) {
return ((/** @type {?} */ (cache))).config.dataIdFromObject(obj);
}
else {
throw new Error('To use context.getCacheKey, you need to use a cache that has a configurable dataIdFromObject, like apollo-cache-inmemory.');
}
};
}
/**
* @param {?} fragment
* @return {?}
*/
export function getFragmentTypename(fragment) {
/** @type {?} */
const def = (/** @type {?} */ (fragment.definitions.find(def => def.kind === 'FragmentDefinition')));
return def.typeCondition.name.value;
}
/**
* @param {?} client
* @return {?}
*/
export function patchQuery(client) {
return (query, patchFn) => {
/** @type {?} */
const options = isDocument(query) ? { query } : query;
/** @type {?} */
const obj = client.readQuery(options);
/** @type {?} */
const data = produce(obj, patchFn);
client.writeQuery(Object.assign({}, options, { data }));
return data;
};
}
/**
* @param {?} context
* @param {?} client
* @return {?}
*/
export function patchFragment(context, client) {
return (fragment, obj, patchFn) => {
/** @type {?} */
const __typename = getFragmentTypename(fragment);
/** @type {?} */
const id = context.getCacheKey(Object.assign({}, obj, { __typename }));
/** @type {?} */
const frgmt = client.readFragment({
fragment,
id,
});
/** @type {?} */
const data = produce(frgmt, patchFn);
client.writeFragment({
fragment,
id,
data: Object.assign({}, data, { __typename }),
});
return data;
};
}
/**
* @param {?} doc
* @return {?}
*/
export function isDocument(doc) {
return doc && doc.kind === 'Document';
}
/**
* @param {?} action
* @return {?}
*/
export function isMutationAsAction(action) {
return action.type === 'mutation';
}
/**
* @param {?} action
* @return {?}
*/
export function getActionType(action) {
if (action.constructor && action.constructor.type) {
return action.constructor.type;
}
return action.type;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0Bsb29uYS9jb3JlLyIsInNvdXJjZXMiOlsiaGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBR0EsT0FBTyxPQUFPLE1BQU0sT0FBTyxDQUFDOzs7Ozs7QUFLNUIsTUFBTSxVQUFVLFlBQVksQ0FDMUIsT0FBd0IsRUFDeEIsTUFBeUI7SUFFekIseUJBQ0ssT0FBTyxJQUNWLFVBQVUsRUFBRSxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQzlCLGFBQWEsRUFBRSxhQUFhLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQzs7OztRQUM3QyxTQUFTLENBQUMsT0FBd0M7WUFDaEQsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ25DLENBQUMsSUFDRDtBQUNKLENBQUM7Ozs7O0FBRUQsTUFBTSxVQUFVLGdCQUFnQixDQUFDLEtBQVU7SUFDekMsT0FBTyxDQUFDLEdBQThDLEVBQUUsRUFBRTtRQUN4RCxJQUFJLENBQUMsbUJBQUEsS0FBSyxFQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUU7WUFDekIsT0FBTyxDQUFDLG1CQUFBLEtBQUssRUFBTyxDQUFDLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3BEO2FBQU07WUFDTCxNQUFNLElBQUksS0FBSyxDQUNiLDJIQUEySCxDQUM1SCxDQUFDO1NBQ0g7SUFDSCxDQUFDLENBQUM7QUFDSixDQUFDOzs7OztBQUVELE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxRQUFzQjs7VUFDbEQsR0FBRyxHQUFHLG1CQUFBLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUNuQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssb0JBQW9CLENBQ3pDLEVBQTBCO0lBRTNCLE9BQU8sR0FBRyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ3RDLENBQUM7Ozs7O0FBRUQsTUFBTSxVQUFVLFVBQVUsQ0FBQyxNQUF5QjtJQUNsRCxPQUFPLENBQ0wsS0FPSyxFQUNMLE9BQXlCLEVBQ3RCLEVBQUU7O2NBQ0MsT0FBTyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxLQUFLLEVBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSzs7Y0FDN0MsR0FBRyxHQUFRLE1BQU0sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDOztjQUNwQyxJQUFJLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUM7UUFFbEMsTUFBTSxDQUFDLFVBQVUsbUJBQ1osT0FBTyxJQUNWLElBQUksSUFDSixDQUFDO1FBRUgsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDLENBQUM7QUFDSixDQUFDOzs7Ozs7QUFFRCxNQUFNLFVBQVUsYUFBYSxDQUMzQixPQUF3QixFQUN4QixNQUF5QjtJQUV6QixPQUFPLENBQ0wsUUFBc0IsRUFDdEIsR0FBUSxFQUNSLE9BQXlCLEVBQ3RCLEVBQUU7O2NBQ0MsVUFBVSxHQUFHLG1CQUFtQixDQUFDLFFBQVEsQ0FBQzs7Y0FDMUMsRUFBRSxHQUFHLE9BQU8sQ0FBQyxXQUFXLG1CQUN6QixHQUFHLElBQ04sVUFBVSxJQUNWOztjQUVJLEtBQUssR0FBUSxNQUFNLENBQUMsWUFBWSxDQUFDO1lBQ3JDLFFBQVE7WUFDUixFQUFFO1NBQ0gsQ0FBQzs7Y0FDSSxJQUFJLEdBQUcsT0FBTyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUM7UUFFcEMsTUFBTSxDQUFDLGFBQWEsQ0FBQztZQUNuQixRQUFRO1lBQ1IsRUFBRTtZQUNGLElBQUksb0JBQ0MsSUFBSSxJQUNQLFVBQVUsR0FDWDtTQUNGLENBQUMsQ0FBQztRQUVILE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQyxDQUFDO0FBQ0osQ0FBQzs7Ozs7QUFFRCxNQUFNLFVBQVUsVUFBVSxDQUFDLEdBQVE7SUFDakMsT0FBTyxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxVQUFVLENBQUM7QUFDeEMsQ0FBQzs7Ozs7QUFFRCxNQUFNLFVBQVUsa0JBQWtCLENBQUMsTUFBYztJQUMvQyxPQUFPLE1BQU0sQ0FBQyxJQUFJLEtBQUssVUFBVSxDQUFDO0FBQ3BDLENBQUM7Ozs7O0FBRUQsTUFBTSxVQUFVLGFBQWEsQ0FBQyxNQUFXO0lBQ3ZDLElBQUksTUFBTSxDQUFDLFdBQVcsSUFBSSxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRTtRQUNqRCxPQUFPLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO0tBQ2hDO0lBRUQsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDO0FBQ3JCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0RvY3VtZW50Tm9kZSwgRnJhZ21lbnREZWZpbml0aW9uTm9kZX0gZnJvbSAnZ3JhcGhxbCc7XG5pbXBvcnQge0Fwb2xsb0NsaWVudH0gZnJvbSAnYXBvbGxvLWNsaWVudCc7XG5pbXBvcnQge0RhdGFQcm94eX0gZnJvbSAnYXBvbGxvLWNhY2hlJztcbmltcG9ydCBwcm9kdWNlIGZyb20gJ2ltbWVyJztcblxuaW1wb3J0IHtSZWNlaXZlZENvbnRleHQsIENvbnRleHR9IGZyb20gJy4vdHlwZXMvY29tbW9uJztcbmltcG9ydCB7QWN0aW9uLCBNdXRhdGlvbkFzQWN0aW9ufSBmcm9tICcuL3R5cGVzL2VmZmVjdCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZENvbnRleHQoXG4gIGNvbnRleHQ6IFJlY2VpdmVkQ29udGV4dCxcbiAgY2xpZW50OiBBcG9sbG9DbGllbnQ8YW55Pixcbik6IENvbnRleHQge1xuICByZXR1cm4ge1xuICAgIC4uLmNvbnRleHQsXG4gICAgcGF0Y2hRdWVyeTogcGF0Y2hRdWVyeShjbGllbnQpLFxuICAgIHBhdGNoRnJhZ21lbnQ6IHBhdGNoRnJhZ21lbnQoY29udGV4dCwgY2xpZW50KSxcbiAgICB3cml0ZURhdGEob3B0aW9uczogRGF0YVByb3h5LldyaXRlRGF0YU9wdGlvbnM8YW55Pikge1xuICAgICAgcmV0dXJuIGNsaWVudC53cml0ZURhdGEob3B0aW9ucyk7XG4gICAgfSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkR2V0Q2FjaGVLZXkoY2FjaGU6IGFueSkge1xuICByZXR1cm4gKG9iajoge19fdHlwZW5hbWU6IHN0cmluZzsgaWQ6IHN0cmluZyB8IG51bWJlcn0pID0+IHtcbiAgICBpZiAoKGNhY2hlIGFzIGFueSkuY29uZmlnKSB7XG4gICAgICByZXR1cm4gKGNhY2hlIGFzIGFueSkuY29uZmlnLmRhdGFJZEZyb21PYmplY3Qob2JqKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnVG8gdXNlIGNvbnRleHQuZ2V0Q2FjaGVLZXksIHlvdSBuZWVkIHRvIHVzZSBhIGNhY2hlIHRoYXQgaGFzIGEgY29uZmlndXJhYmxlIGRhdGFJZEZyb21PYmplY3QsIGxpa2UgYXBvbGxvLWNhY2hlLWlubWVtb3J5LicsXG4gICAgICApO1xuICAgIH1cbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZyYWdtZW50VHlwZW5hbWUoZnJhZ21lbnQ6IERvY3VtZW50Tm9kZSk6IHN0cmluZyB7XG4gIGNvbnN0IGRlZiA9IGZyYWdtZW50LmRlZmluaXRpb25zLmZpbmQoXG4gICAgZGVmID0+IGRlZi5raW5kID09PSAnRnJhZ21lbnREZWZpbml0aW9uJyxcbiAgKSBhcyBGcmFnbWVudERlZmluaXRpb25Ob2RlO1xuXG4gIHJldHVybiBkZWYudHlwZUNvbmRpdGlvbi5uYW1lLnZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGF0Y2hRdWVyeShjbGllbnQ6IEFwb2xsb0NsaWVudDxhbnk+KSB7XG4gIHJldHVybiA8UiA9IGFueT4oXG4gICAgcXVlcnk6XG4gICAgICB8IERvY3VtZW50Tm9kZVxuICAgICAgfCB7XG4gICAgICAgICAgcXVlcnk6IERvY3VtZW50Tm9kZTtcbiAgICAgICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgICB9O1xuICAgICAgICB9LFxuICAgIHBhdGNoRm46IChkYXRhOiBSKSA9PiBhbnksXG4gICk6IFIgPT4ge1xuICAgIGNvbnN0IG9wdGlvbnMgPSBpc0RvY3VtZW50KHF1ZXJ5KSA/IHtxdWVyeX0gOiBxdWVyeTtcbiAgICBjb25zdCBvYmo6IGFueSA9IGNsaWVudC5yZWFkUXVlcnkob3B0aW9ucyk7XG4gICAgY29uc3QgZGF0YSA9IHByb2R1Y2Uob2JqLCBwYXRjaEZuKTtcblxuICAgIGNsaWVudC53cml0ZVF1ZXJ5KHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBkYXRhLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXRjaEZyYWdtZW50KFxuICBjb250ZXh0OiBSZWNlaXZlZENvbnRleHQsXG4gIGNsaWVudDogQXBvbGxvQ2xpZW50PGFueT4sXG4pIHtcbiAgcmV0dXJuIDxSID0gYW55PihcbiAgICBmcmFnbWVudDogRG9jdW1lbnROb2RlLFxuICAgIG9iajogYW55LFxuICAgIHBhdGNoRm46IChkYXRhOiBSKSA9PiBhbnksXG4gICk6IFIgPT4ge1xuICAgIGNvbnN0IF9fdHlwZW5hbWUgPSBnZXRGcmFnbWVudFR5cGVuYW1lKGZyYWdtZW50KTtcbiAgICBjb25zdCBpZCA9IGNvbnRleHQuZ2V0Q2FjaGVLZXkoe1xuICAgICAgLi4ub2JqLFxuICAgICAgX190eXBlbmFtZSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGZyZ210OiBhbnkgPSBjbGllbnQucmVhZEZyYWdtZW50KHtcbiAgICAgIGZyYWdtZW50LFxuICAgICAgaWQsXG4gICAgfSk7XG4gICAgY29uc3QgZGF0YSA9IHByb2R1Y2UoZnJnbXQsIHBhdGNoRm4pO1xuXG4gICAgY2xpZW50LndyaXRlRnJhZ21lbnQoe1xuICAgICAgZnJhZ21lbnQsXG4gICAgICBpZCxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgLi4uZGF0YSxcbiAgICAgICAgX190eXBlbmFtZSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRG9jdW1lbnQoZG9jOiBhbnkpOiBkb2MgaXMgRG9jdW1lbnROb2RlIHtcbiAgcmV0dXJuIGRvYyAmJiBkb2Mua2luZCA9PT0gJ0RvY3VtZW50Jztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTXV0YXRpb25Bc0FjdGlvbihhY3Rpb246IEFjdGlvbik6IGFjdGlvbiBpcyBNdXRhdGlvbkFzQWN0aW9uIHtcbiAgcmV0dXJuIGFjdGlvbi50eXBlID09PSAnbXV0YXRpb24nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWN0aW9uVHlwZShhY3Rpb246IGFueSk6IHN0cmluZyB7XG4gIGlmIChhY3Rpb24uY29uc3RydWN0b3IgJiYgYWN0aW9uLmNvbnN0cnVjdG9yLnR5cGUpIHtcbiAgICByZXR1cm4gYWN0aW9uLmNvbnN0cnVjdG9yLnR5cGU7XG4gIH1cblxuICByZXR1cm4gYWN0aW9uLnR5cGU7XG59XG4iXX0=