UNPKG

@loona/core

Version:

App State Management done with GraphQL (core package)

129 lines 10.4 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,uselessCode} checked by tsc */ import { Store } from './internal/store'; import { getMutationDefinition, getFirstField } from './internal/utils'; import { buildContext, buildGetCacheKey } from './helpers'; export class MutationManager extends Store { /** * @param {?=} defs */ constructor(defs) { super(); if (defs) { defs.forEach(def => { this.set(def.mutation, def); }); } } /** * @param {?} defs * @return {?} */ add(defs) { defs.forEach(def => { this.set(def.mutation, def); }); } } /** * @param {?} action * @return {?} */ export function mutationToType(action) { /** @type {?} */ const mutation = getMutation(action); /** @type {?} */ const name = getNameOfMutation(mutation); return name; } /** * @param {?} action * @return {?} */ export function getMutation(action) { if (action.constructor && action.constructor.mutation) { return action.constructor.mutation; } return action.mutation; } /** * @param {?} action * @return {?} */ export function isMutation(action) { return typeof getMutation(action) !== 'undefined'; } /** * @param {?} mutation * @return {?} */ export function getNameOfMutation(mutation) { /** @type {?} */ const def = getMutationDefinition(mutation); /** @type {?} */ const field = getFirstField(def); return field.name.value; } /** * @template T, V * @param {?} config * @param {?} manager * @return {?} */ export function withUpdates(config, manager) { /** @type {?} */ const orgUpdate = config.update; return Object.assign({}, config, { update: (proxy, mutationResult) => { /** @type {?} */ const name = getNameOfMutation(config.mutation); /** @type {?} */ const result = mutationResult.data && mutationResult.data[name]; /** @type {?} */ const cache = manager.cache; /** @type {?} */ const context = buildContext({ cache: proxy, getCacheKey: buildGetCacheKey(cache), }, manager.getClient()); /** @type {?} */ const updates = manager.updates.get(name); if (updates) { /** @type {?} */ const info = { name, variables: config.variables, result, }; updates.forEach(def => def.resolve(info, context)); } if (orgUpdate) { orgUpdate(proxy, mutationResult); } } }); } /** * @template T, V * @param {?} config * @param {?} result * @return {?} */ export function buildActionFromResult(config, result) { return Object.assign({ type: 'mutation', options: config, ok: true }, result); } /** * @template T, V * @param {?} config * @param {?} error * @return {?} */ export function buildActionFromError(config, error) { return { type: 'mutation', options: config, ok: false, error, }; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXV0YXRpb24uanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AbG9vbmEvY29yZS8iLCJzb3VyY2VzIjpbIm11dGF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFLQSxPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDdkMsT0FBTyxFQUFDLHFCQUFxQixFQUFFLGFBQWEsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBRXRFLE9BQU8sRUFBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFFekQsTUFBTSxPQUFPLGVBQWdCLFNBQVEsS0FBa0I7Ozs7SUFDckQsWUFBWSxJQUFvQjtRQUM5QixLQUFLLEVBQUUsQ0FBQztRQUVSLElBQUksSUFBSSxFQUFFO1lBQ1IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDakIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQzlCLENBQUMsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDOzs7OztJQUVELEdBQUcsQ0FBQyxJQUFtQjtRQUNyQixJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ2pCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUM5QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjs7Ozs7QUFFRCxNQUFNLFVBQVUsY0FBYyxDQUFDLE1BQXNCOztVQUM3QyxRQUFRLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQzs7VUFDOUIsSUFBSSxHQUFHLGlCQUFpQixDQUFDLFFBQVEsQ0FBQztJQUV4QyxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7Ozs7O0FBRUQsTUFBTSxVQUFVLFdBQVcsQ0FBQyxNQUFXO0lBQ3JDLElBQUksTUFBTSxDQUFDLFdBQVcsSUFBSSxNQUFNLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRTtRQUNyRCxPQUFPLE1BQU0sQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDO0tBQ3BDO0lBRUQsT0FBTyxNQUFNLENBQUMsUUFBUSxDQUFDO0FBQ3pCLENBQUM7Ozs7O0FBRUQsTUFBTSxVQUFVLFVBQVUsQ0FBQyxNQUFXO0lBQ3BDLE9BQU8sT0FBTyxXQUFXLENBQUMsTUFBTSxDQUFDLEtBQUssV0FBVyxDQUFDO0FBQ3BELENBQUM7Ozs7O0FBRUQsTUFBTSxVQUFVLGlCQUFpQixDQUFDLFFBQXNCOztVQUNoRCxHQUFHLEdBQUcscUJBQXFCLENBQUMsUUFBUSxDQUFDOztVQUNyQyxLQUFLLEdBQUcsYUFBYSxDQUFDLEdBQUcsQ0FBQztJQUVoQyxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzFCLENBQUM7Ozs7Ozs7QUFFRCxNQUFNLFVBQVUsV0FBVyxDQUN6QixNQUErQixFQUMvQixPQUFnQjs7VUFFVixTQUFTLEdBQUcsTUFBTSxDQUFDLE1BQU07SUFFL0IseUJBQ0ssTUFBTSxJQUNULE1BQU0sRUFBRSxDQUFDLEtBQUssRUFBRSxjQUE4QixFQUFFLEVBQUU7O2tCQUMxQyxJQUFJLEdBQUcsaUJBQWlCLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQzs7a0JBQ3pDLE1BQU0sR0FBTSxjQUFjLENBQUMsSUFBSSxJQUFJLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDOztrQkFDNUQsS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLOztrQkFFckIsT0FBTyxHQUFHLFlBQVksQ0FDMUI7Z0JBQ0UsS0FBSyxFQUFFLEtBQUs7Z0JBQ1osV0FBVyxFQUFFLGdCQUFnQixDQUFDLEtBQUssQ0FBQzthQUNyQyxFQUNELE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FDcEI7O2tCQUVLLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7WUFFekMsSUFBSSxPQUFPLEVBQUU7O3NCQUNMLElBQUksR0FBRztvQkFDWCxJQUFJO29CQUNKLFNBQVMsRUFBRSxNQUFNLENBQUMsU0FBUztvQkFDM0IsTUFBTTtpQkFDUDtnQkFFRCxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQzthQUNwRDtZQUVELElBQUksU0FBUyxFQUFFO2dCQUNiLFNBQVMsQ0FBQyxLQUFLLEVBQUUsY0FBYyxDQUFDLENBQUM7YUFDbEM7UUFDSCxDQUFDLElBQ0Q7QUFDSixDQUFDOzs7Ozs7O0FBRUQsTUFBTSxVQUFVLHFCQUFxQixDQUNuQyxNQUE2QixFQUM3QixNQUFzQjtJQVV0Qix1QkFDRSxJQUFJLEVBQUUsVUFBVSxFQUNoQixPQUFPLEVBQUUsTUFBTSxFQUNmLEVBQUUsRUFBRSxJQUFJLElBQ0wsTUFBTSxFQUNUO0FBQ0osQ0FBQzs7Ozs7OztBQUVELE1BQU0sVUFBVSxvQkFBb0IsQ0FDbEMsTUFBNkIsRUFDN0IsS0FBVTtJQUVWLE9BQU87UUFDTCxJQUFJLEVBQUUsVUFBVTtRQUNoQixPQUFPLEVBQUUsTUFBTTtRQUNmLEVBQUUsRUFBRSxLQUFLO1FBQ1QsS0FBSztLQUNOLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtEb2N1bWVudE5vZGUsIEdyYXBoUUxFcnJvcn0gZnJvbSAnZ3JhcGhxbCc7XG5pbXBvcnQge011dGF0aW9uT3B0aW9uc30gZnJvbSAnYXBvbGxvLWNsaWVudCc7XG5pbXBvcnQge0ZldGNoUmVzdWx0fSBmcm9tICdhcG9sbG8tbGluayc7XG5cbmltcG9ydCB7TXV0YXRpb25EZWYsIE11dGF0aW9uT2JqZWN0fSBmcm9tICcuL3R5cGVzL211dGF0aW9uJztcbmltcG9ydCB7U3RvcmV9IGZyb20gJy4vaW50ZXJuYWwvc3RvcmUnO1xuaW1wb3J0IHtnZXRNdXRhdGlvbkRlZmluaXRpb24sIGdldEZpcnN0RmllbGR9IGZyb20gJy4vaW50ZXJuYWwvdXRpbHMnO1xuaW1wb3J0IHtNYW5hZ2VyfSBmcm9tICcuL21hbmFnZXInO1xuaW1wb3J0IHtidWlsZENvbnRleHQsIGJ1aWxkR2V0Q2FjaGVLZXl9IGZyb20gJy4vaGVscGVycyc7XG5cbmV4cG9ydCBjbGFzcyBNdXRhdGlvbk1hbmFnZXIgZXh0ZW5kcyBTdG9yZTxNdXRhdGlvbkRlZj4ge1xuICBjb25zdHJ1Y3RvcihkZWZzPzogTXV0YXRpb25EZWZbXSkge1xuICAgIHN1cGVyKCk7XG5cbiAgICBpZiAoZGVmcykge1xuICAgICAgZGVmcy5mb3JFYWNoKGRlZiA9PiB7XG4gICAgICAgIHRoaXMuc2V0KGRlZi5tdXRhdGlvbiwgZGVmKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGFkZChkZWZzOiBNdXRhdGlvbkRlZltdKTogdm9pZCB7XG4gICAgZGVmcy5mb3JFYWNoKGRlZiA9PiB7XG4gICAgICB0aGlzLnNldChkZWYubXV0YXRpb24sIGRlZik7XG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG11dGF0aW9uVG9UeXBlKGFjdGlvbjogTXV0YXRpb25PYmplY3QpOiBzdHJpbmcge1xuICBjb25zdCBtdXRhdGlvbiA9IGdldE11dGF0aW9uKGFjdGlvbik7XG4gIGNvbnN0IG5hbWUgPSBnZXROYW1lT2ZNdXRhdGlvbihtdXRhdGlvbik7XG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNdXRhdGlvbihhY3Rpb246IGFueSk6IERvY3VtZW50Tm9kZSB7XG4gIGlmIChhY3Rpb24uY29uc3RydWN0b3IgJiYgYWN0aW9uLmNvbnN0cnVjdG9yLm11dGF0aW9uKSB7XG4gICAgcmV0dXJuIGFjdGlvbi5jb25zdHJ1Y3Rvci5tdXRhdGlvbjtcbiAgfVxuXG4gIHJldHVybiBhY3Rpb24ubXV0YXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc011dGF0aW9uKGFjdGlvbjogYW55KTogYWN0aW9uIGlzIE11dGF0aW9uT2JqZWN0IHtcbiAgcmV0dXJuIHR5cGVvZiBnZXRNdXRhdGlvbihhY3Rpb24pICE9PSAndW5kZWZpbmVkJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE5hbWVPZk11dGF0aW9uKG11dGF0aW9uOiBEb2N1bWVudE5vZGUpOiBzdHJpbmcge1xuICBjb25zdCBkZWYgPSBnZXRNdXRhdGlvbkRlZmluaXRpb24obXV0YXRpb24pO1xuICBjb25zdCBmaWVsZCA9IGdldEZpcnN0RmllbGQoZGVmKTtcblxuICByZXR1cm4gZmllbGQubmFtZS52YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhVcGRhdGVzPFQsIFY+KFxuICBjb25maWc6IE11dGF0aW9uT3B0aW9uczxhbnksIFY+LFxuICBtYW5hZ2VyOiBNYW5hZ2VyLFxuKTogTXV0YXRpb25PcHRpb25zPGFueSwgVj4ge1xuICBjb25zdCBvcmdVcGRhdGUgPSBjb25maWcudXBkYXRlO1xuXG4gIHJldHVybiB7XG4gICAgLi4uY29uZmlnLFxuICAgIHVwZGF0ZTogKHByb3h5LCBtdXRhdGlvblJlc3VsdDogRmV0Y2hSZXN1bHQ8VD4pID0+IHtcbiAgICAgIGNvbnN0IG5hbWUgPSBnZXROYW1lT2ZNdXRhdGlvbihjb25maWcubXV0YXRpb24pO1xuICAgICAgY29uc3QgcmVzdWx0OiBUID0gbXV0YXRpb25SZXN1bHQuZGF0YSAmJiBtdXRhdGlvblJlc3VsdC5kYXRhW25hbWVdO1xuICAgICAgY29uc3QgY2FjaGUgPSBtYW5hZ2VyLmNhY2hlO1xuXG4gICAgICBjb25zdCBjb250ZXh0ID0gYnVpbGRDb250ZXh0KFxuICAgICAgICB7XG4gICAgICAgICAgY2FjaGU6IHByb3h5LFxuICAgICAgICAgIGdldENhY2hlS2V5OiBidWlsZEdldENhY2hlS2V5KGNhY2hlKSxcbiAgICAgICAgfSxcbiAgICAgICAgbWFuYWdlci5nZXRDbGllbnQoKSxcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHVwZGF0ZXMgPSBtYW5hZ2VyLnVwZGF0ZXMuZ2V0KG5hbWUpO1xuXG4gICAgICBpZiAodXBkYXRlcykge1xuICAgICAgICBjb25zdCBpbmZvID0ge1xuICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgdmFyaWFibGVzOiBjb25maWcudmFyaWFibGVzLFxuICAgICAgICAgIHJlc3VsdCxcbiAgICAgICAgfTtcblxuICAgICAgICB1cGRhdGVzLmZvckVhY2goZGVmID0+IGRlZi5yZXNvbHZlKGluZm8sIGNvbnRleHQpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9yZ1VwZGF0ZSkge1xuICAgICAgICBvcmdVcGRhdGUocHJveHksIG11dGF0aW9uUmVzdWx0KTtcbiAgICAgIH1cbiAgICB9LFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRBY3Rpb25Gcm9tUmVzdWx0PFQsIFY+KFxuICBjb25maWc6IE11dGF0aW9uT3B0aW9uczxULCBWPixcbiAgcmVzdWx0OiBGZXRjaFJlc3VsdDxUPixcbik6IHtcbiAgdHlwZTogc3RyaW5nO1xuICBvcHRpb25zOiBNdXRhdGlvbk9wdGlvbnM8VCwgVj47XG4gIG9rOiBib29sZWFuO1xuICBlcnJvcnM/OiBSZWFkb25seUFycmF5PEdyYXBoUUxFcnJvcj47XG4gIGRhdGE/OiBUIHwge1trZXk6IHN0cmluZ106IGFueX07XG4gIGV4dGVuc2lvbnM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBjb250ZXh0PzogYW55O1xufSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogJ211dGF0aW9uJyxcbiAgICBvcHRpb25zOiBjb25maWcsXG4gICAgb2s6IHRydWUsXG4gICAgLi4ucmVzdWx0LFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRBY3Rpb25Gcm9tRXJyb3I8VCwgVj4oXG4gIGNvbmZpZzogTXV0YXRpb25PcHRpb25zPFQsIFY+LFxuICBlcnJvcjogYW55LFxuKSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogJ211dGF0aW9uJyxcbiAgICBvcHRpb25zOiBjb25maWcsXG4gICAgb2s6IGZhbHNlLFxuICAgIGVycm9yLFxuICB9O1xufVxuIl19