push neon reactor
This commit is contained in:
Generated
Vendored
+24
@@ -0,0 +1,24 @@
|
||||
import { CrossPlatformLockOptions } from "./CrossPlatformLockOptions.js";
|
||||
import { Logger } from "@azure/msal-common/node";
|
||||
/**
|
||||
* Cross-process lock that works on all platforms.
|
||||
*/
|
||||
export declare class CrossPlatformLock {
|
||||
private readonly lockFilePath;
|
||||
private lockFileHandle;
|
||||
private readonly retryNumber;
|
||||
private readonly retryDelay;
|
||||
private logger;
|
||||
constructor(lockFilePath: string, logger: Logger, lockOptions?: CrossPlatformLockOptions);
|
||||
/**
|
||||
* Locks cache from read or writes by creating file with same path and name as
|
||||
* cache file but with .lockfile extension. If another process has already created
|
||||
* the lockfile, will back off and retry based on configuration settings set by CrossPlatformLockOptions
|
||||
*/
|
||||
lock(): Promise<void>;
|
||||
/**
|
||||
* unlocks cache file by deleting .lockfile.
|
||||
*/
|
||||
unlock(): Promise<void>;
|
||||
private sleep;
|
||||
}
|
||||
Generated
Vendored
+95
@@ -0,0 +1,95 @@
|
||||
/*! @azure/msal-node-extensions v1.5.17 2025-07-08 */
|
||||
'use strict';
|
||||
import { promises } from 'fs';
|
||||
import { pid } from 'process';
|
||||
import { Constants } from '../utils/Constants.mjs';
|
||||
import { PersistenceError } from '../error/PersistenceError.mjs';
|
||||
import { isNodeError } from '../utils/TypeGuards.mjs';
|
||||
|
||||
/*
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the MIT License.
|
||||
*/
|
||||
/**
|
||||
* Cross-process lock that works on all platforms.
|
||||
*/
|
||||
class CrossPlatformLock {
|
||||
constructor(lockFilePath, logger, lockOptions) {
|
||||
this.lockFilePath = lockFilePath;
|
||||
this.retryNumber = lockOptions ? lockOptions.retryNumber : 500;
|
||||
this.retryDelay = lockOptions ? lockOptions.retryDelay : 100;
|
||||
this.logger = logger;
|
||||
}
|
||||
/**
|
||||
* Locks cache from read or writes by creating file with same path and name as
|
||||
* cache file but with .lockfile extension. If another process has already created
|
||||
* the lockfile, will back off and retry based on configuration settings set by CrossPlatformLockOptions
|
||||
*/
|
||||
async lock() {
|
||||
for (let tryCount = 0; tryCount < this.retryNumber; tryCount++) {
|
||||
try {
|
||||
this.logger.info(`Pid ${pid} trying to acquire lock`);
|
||||
this.lockFileHandle = await promises.open(this.lockFilePath, "wx+");
|
||||
this.logger.info(`Pid ${pid} acquired lock`);
|
||||
await this.lockFileHandle.write(pid.toString());
|
||||
return;
|
||||
}
|
||||
catch (err) {
|
||||
if (isNodeError(err)) {
|
||||
if (err.code === Constants.EEXIST_ERROR ||
|
||||
err.code === Constants.EPERM_ERROR) {
|
||||
this.logger.info(err.message);
|
||||
await this.sleep(this.retryDelay);
|
||||
}
|
||||
else {
|
||||
this.logger.error(`${pid} was not able to acquire lock. Ran into error: ${err.message}`);
|
||||
throw PersistenceError.createCrossPlatformLockError(err.message);
|
||||
}
|
||||
}
|
||||
else {
|
||||
throw err;
|
||||
}
|
||||
}
|
||||
}
|
||||
this.logger.error(`${pid} was not able to acquire lock. Exceeded amount of retries set in the options`);
|
||||
throw PersistenceError.createCrossPlatformLockError("Not able to acquire lock. Exceeded amount of retries set in options");
|
||||
}
|
||||
/**
|
||||
* unlocks cache file by deleting .lockfile.
|
||||
*/
|
||||
async unlock() {
|
||||
try {
|
||||
if (this.lockFileHandle) {
|
||||
// if we have a file handle to the .lockfile, delete lock file
|
||||
await promises.unlink(this.lockFilePath);
|
||||
await this.lockFileHandle.close();
|
||||
this.logger.info("lockfile deleted");
|
||||
}
|
||||
else {
|
||||
this.logger.warning("lockfile handle does not exist, so lockfile could not be deleted");
|
||||
}
|
||||
}
|
||||
catch (err) {
|
||||
if (isNodeError(err)) {
|
||||
if (err.code === Constants.ENOENT_ERROR) {
|
||||
this.logger.info("Tried to unlock but lockfile does not exist");
|
||||
}
|
||||
else {
|
||||
this.logger.error(`${pid} was not able to release lock. Ran into error: ${err.message}`);
|
||||
throw PersistenceError.createCrossPlatformLockError(err.message);
|
||||
}
|
||||
}
|
||||
else {
|
||||
throw err;
|
||||
}
|
||||
}
|
||||
}
|
||||
sleep(ms) {
|
||||
return new Promise((resolve) => {
|
||||
setTimeout(resolve, ms);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
export { CrossPlatformLock };
|
||||
//# sourceMappingURL=CrossPlatformLock.mjs.map
|
||||
Generated
Vendored
+1
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"CrossPlatformLock.mjs","sources":["../../src/lock/CrossPlatformLock.ts"],"sourcesContent":[null],"names":["fs"],"mappings":"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"}
|
||||
CodeApp_NeonReactor/node_modules/@azure/msal-node-extensions/dist/lock/CrossPlatformLockOptions.d.ts
Generated
Vendored
+10
@@ -0,0 +1,10 @@
|
||||
/**
|
||||
* Options for CrossPlatform lock.
|
||||
*
|
||||
* retryNumber: Numbers of times we should try to acquire a lock. Defaults to 500.
|
||||
* retryDelay: Time to wait before trying to retry a lock acquisition. Defaults to 100 ms.
|
||||
*/
|
||||
export type CrossPlatformLockOptions = {
|
||||
retryNumber: number;
|
||||
retryDelay: number;
|
||||
};
|
||||
Reference in New Issue
Block a user