UNPKG

php-wasm

Version:

Run PHP right in the browser or anywhere else JS can run

86 lines (85 loc) 3.35 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.commitTransaction = commitTransaction; exports.startTransaction = startTransaction; function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); } function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; } /** * @typedef {object} PersistentPhpRuntime * @property {boolean} [persist] Indicates whether the runtime has persistent storage enabled. * @property {{syncfs?: (populate: boolean, callback: (error?: Error) => void) => void}} [FS] Filesystem bridge exposed by the runtime. */ /** * @typedef {object} TransactionalWrapper * @property {Promise<PersistentPhpRuntime>} binary Deferred runtime instance used for transaction work. * @property {boolean|Promise<void>} transactionStarted Tracks the currently active transaction, if any. */ /** * Starts a persisted filesystem transaction for a runtime wrapper. * @param {TransactionalWrapper} wrapper Runtime wrapper coordinating FS transactions. * @returns {Promise<void>} Resolves when the transaction has been started. */ function startTransaction(_x) { return _startTransaction.apply(this, arguments); } /** * Commits a persisted filesystem transaction for a runtime wrapper. * @param {TransactionalWrapper} wrapper Runtime wrapper coordinating FS transactions. * @param {boolean} readOnly Indicates whether the transaction only performed reads. * @returns {Promise<void>} Resolves when the transaction has been committed. */ function _startTransaction() { _startTransaction = _asyncToGenerator(function* (wrapper) { var php = yield wrapper.binary; if (!php.persist) { return; } if (wrapper.transactionStarted) { yield wrapper.transactionStarted; return; } wrapper.transactionStarted = new Promise(function (accept, reject) { return php.FS.syncfs(true, function (error) { if (error) { reject(error); } else { accept(); } }); }); return yield wrapper.transactionStarted; }); return _startTransaction.apply(this, arguments); } function commitTransaction(_x2) { return _commitTransaction.apply(this, arguments); } function _commitTransaction() { _commitTransaction = _asyncToGenerator(function* (wrapper) { var readOnly = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; var php = yield wrapper.binary; if (!php.persist) { return; } if (!wrapper.transactionStarted) { throw new Error('No transaction initialized.'); } if (readOnly) { wrapper.transactionStarted = false; return Promise.resolve(); } return yield new Promise(function (accept, reject) { return php.FS.syncfs(false, function (error) { if (error) { reject(error); } else { wrapper.transactionStarted = false; accept(); } }); }); }); return _commitTransaction.apply(this, arguments); }