UNPKG

@loona/core

Version:

App State Management done with GraphQL (core package)

109 lines 9.5 kB
/** * @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=