UNPKG

@wordpress/core-data

Version:
69 lines (67 loc) 1.58 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = createLocks; var _reducer = _interopRequireDefault(require("./reducer")); var _selectors = require("./selectors"); /** * Internal dependencies */ function createLocks() { let state = (0, _reducer.default)(undefined, { type: '@@INIT' }); function processPendingLockRequests() { for (const request of (0, _selectors.getPendingLockRequests)(state)) { const { store, path, exclusive, notifyAcquired } = request; if ((0, _selectors.isLockAvailable)(state, store, path, { exclusive })) { const lock = { store, path, exclusive }; state = (0, _reducer.default)(state, { type: 'GRANT_LOCK_REQUEST', lock, request }); notifyAcquired(lock); } } } function acquire(store, path, exclusive) { return new Promise(resolve => { state = (0, _reducer.default)(state, { type: 'ENQUEUE_LOCK_REQUEST', request: { store, path, exclusive, notifyAcquired: resolve } }); processPendingLockRequests(); }); } function release(lock) { state = (0, _reducer.default)(state, { type: 'RELEASE_LOCK', lock }); processPendingLockRequests(); } return { acquire, release }; } //# sourceMappingURL=engine.js.map