Files
game-server-watcher/node_modules/@commonify/steno/lib/index.js
Smith a5f3794527 include prod deps in vcs with some exceptions
* cloudno.de has problems installing new dependencies lately..
2022-06-30 22:59:51 +02:00

114 lines
4.8 KiB
JavaScript

"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.Writer = void 0;
var _fs = _interopRequireDefault(require("fs"));
var _path = _interopRequireDefault(require("path"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var __classPrivateFieldSet = void 0 && (void 0).__classPrivateFieldSet || function (receiver, state, value, kind, f) {
if (kind === "m") throw new TypeError("Private method is not writable");
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
return kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value), value;
};
var __classPrivateFieldGet = void 0 && (void 0).__classPrivateFieldGet || function (receiver, state, kind, f) {
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
};
var _Writer_instances, _Writer_filename, _Writer_tempFilename, _Writer_locked, _Writer_prev, _Writer_next, _Writer_nextPromise, _Writer_nextData, _Writer_add, _Writer_write;
// Returns a temporary file
// Example: for /some/file will return /some/.file.tmp
function getTempFilename(file) {
return _path.default.join(_path.default.dirname(file), '.' + _path.default.basename(file) + '.tmp');
}
class Writer {
constructor(filename) {
_Writer_instances.add(this);
_Writer_filename.set(this, void 0);
_Writer_tempFilename.set(this, void 0);
_Writer_locked.set(this, false);
_Writer_prev.set(this, null);
_Writer_next.set(this, null);
_Writer_nextPromise.set(this, null);
_Writer_nextData.set(this, null // File is locked, add data for later
);
__classPrivateFieldSet(this, _Writer_filename, filename, "f");
__classPrivateFieldSet(this, _Writer_tempFilename, getTempFilename(filename), "f");
}
async write(data) {
return __classPrivateFieldGet(this, _Writer_locked, "f") ? __classPrivateFieldGet(this, _Writer_instances, "m", _Writer_add).call(this, data) : __classPrivateFieldGet(this, _Writer_instances, "m", _Writer_write).call(this, data);
}
}
exports.Writer = Writer;
_Writer_filename = new WeakMap(), _Writer_tempFilename = new WeakMap(), _Writer_locked = new WeakMap(), _Writer_prev = new WeakMap(), _Writer_next = new WeakMap(), _Writer_nextPromise = new WeakMap(), _Writer_nextData = new WeakMap(), _Writer_instances = new WeakSet(), _Writer_add = function _Writer_add(data) {
// Only keep most recent data
__classPrivateFieldSet(this, _Writer_nextData, data, "f"); // Create a singleton promise to resolve all next promises once next data is written
__classPrivateFieldSet(this, _Writer_nextPromise, __classPrivateFieldGet(this, _Writer_nextPromise, "f") || new Promise((resolve, reject) => {
__classPrivateFieldSet(this, _Writer_next, [resolve, reject], "f");
}), "f"); // Return a promise that will resolve at the same time as next promise
return new Promise((resolve, reject) => {
var _a;
(_a = __classPrivateFieldGet(this, _Writer_nextPromise, "f")) === null || _a === void 0 ? void 0 : _a.then(resolve).catch(reject);
});
}, _Writer_write = // File isn't locked, write data
async function _Writer_write(data) {
var _a, _b; // Lock file
__classPrivateFieldSet(this, _Writer_locked, true, "f");
try {
// Atomic write
await _fs.default.promises.writeFile(__classPrivateFieldGet(this, _Writer_tempFilename, "f"), data, 'utf-8');
await _fs.default.promises.rename(__classPrivateFieldGet(this, _Writer_tempFilename, "f"), __classPrivateFieldGet(this, _Writer_filename, "f")); // Call resolve
(_a = __classPrivateFieldGet(this, _Writer_prev, "f")) === null || _a === void 0 ? void 0 : _a[0]();
} catch (err) {
// Call reject
(_b = __classPrivateFieldGet(this, _Writer_prev, "f")) === null || _b === void 0 ? void 0 : _b[1](err);
throw err;
} finally {
// Unlock file
__classPrivateFieldSet(this, _Writer_locked, false, "f");
__classPrivateFieldSet(this, _Writer_prev, __classPrivateFieldGet(this, _Writer_next, "f"), "f");
__classPrivateFieldSet(this, _Writer_next, __classPrivateFieldSet(this, _Writer_nextPromise, null, "f"), "f");
if (__classPrivateFieldGet(this, _Writer_nextData, "f") !== null) {
const nextData = __classPrivateFieldGet(this, _Writer_nextData, "f");
__classPrivateFieldSet(this, _Writer_nextData, null, "f");
await this.write(nextData);
}
}
};