mirror of
https://github.com/whyour/qinglong.git
synced 2026-09-21 00:17:47 +08:00
80 lines
2.3 KiB
TypeScript
80 lines
2.3 KiB
TypeScript
export const MIN_LOCAL_ARTIFACT_MAXIMUM_BYTES = 64 * 1024;
|
|
export const MAX_LOCAL_ARTIFACT_MAXIMUM_BYTES = 1024 * 1024 * 1024;
|
|
export const MAX_LOCAL_ARTIFACT_MINIMUM_FREE_BYTES = 1024 * 1024 * 1024 * 1024;
|
|
|
|
export interface LocalArtifactCapacityPolicy {
|
|
maximumAttemptBytes: number;
|
|
minimumFreeBytes: number;
|
|
}
|
|
|
|
export class LocalArtifactCapacityUnavailableError extends Error {
|
|
readonly code = 'LOCAL_ARTIFACT_CAPACITY_UNAVAILABLE';
|
|
|
|
constructor() {
|
|
super('Local Artifact capacity is unavailable');
|
|
this.name = 'LocalArtifactCapacityUnavailableError';
|
|
}
|
|
}
|
|
|
|
export class LocalArtifactQuotaExceededError extends Error {
|
|
readonly code = 'LOCAL_ARTIFACT_QUOTA_EXCEEDED';
|
|
|
|
constructor() {
|
|
super('Local Artifact reached its byte quota');
|
|
this.name = 'LocalArtifactQuotaExceededError';
|
|
}
|
|
}
|
|
|
|
function assertIntegerBetween(
|
|
name: string,
|
|
value: number,
|
|
minimum: number,
|
|
maximum: number,
|
|
): void {
|
|
if (!Number.isSafeInteger(value) || value < minimum || value > maximum) {
|
|
throw new RangeError(`${name} must be between ${minimum} and ${maximum}`);
|
|
}
|
|
}
|
|
|
|
export function normalizeLocalArtifactCapacityPolicy(
|
|
policy: LocalArtifactCapacityPolicy,
|
|
): Readonly<LocalArtifactCapacityPolicy> {
|
|
if (!policy || typeof policy !== 'object' || Array.isArray(policy)) {
|
|
throw new TypeError('Local Artifact capacity policy must be an object');
|
|
}
|
|
assertIntegerBetween(
|
|
'maximumAttemptBytes',
|
|
policy.maximumAttemptBytes,
|
|
MIN_LOCAL_ARTIFACT_MAXIMUM_BYTES,
|
|
MAX_LOCAL_ARTIFACT_MAXIMUM_BYTES,
|
|
);
|
|
assertIntegerBetween(
|
|
'minimumFreeBytes',
|
|
policy.minimumFreeBytes,
|
|
0,
|
|
MAX_LOCAL_ARTIFACT_MINIMUM_FREE_BYTES,
|
|
);
|
|
return Object.freeze({
|
|
maximumAttemptBytes: policy.maximumAttemptBytes,
|
|
minimumFreeBytes: policy.minimumFreeBytes,
|
|
});
|
|
}
|
|
|
|
export function localArtifactCapacityPolicyForProfile(
|
|
profile: 'edge' | 'standalone',
|
|
): Readonly<LocalArtifactCapacityPolicy> {
|
|
if (profile === 'edge') {
|
|
return Object.freeze({
|
|
maximumAttemptBytes: 4 * 1024 * 1024,
|
|
minimumFreeBytes: 32 * 1024 * 1024,
|
|
});
|
|
}
|
|
if (profile === 'standalone') {
|
|
return Object.freeze({
|
|
maximumAttemptBytes: 64 * 1024 * 1024,
|
|
minimumFreeBytes: 256 * 1024 * 1024,
|
|
});
|
|
}
|
|
throw new TypeError('Local Artifact capacity profile is invalid');
|
|
}
|