mirror of
https://github.com/RayLabsHQ/gitea-mirror.git
synced 2025-12-09 13:06:45 +03:00
fix: sync metadata after config toggles
This commit is contained in:
75
src/lib/metadata-state.ts
Normal file
75
src/lib/metadata-state.ts
Normal file
@@ -0,0 +1,75 @@
|
||||
interface MetadataComponentsState {
|
||||
releases: boolean;
|
||||
issues: boolean;
|
||||
pullRequests: boolean;
|
||||
labels: boolean;
|
||||
milestones: boolean;
|
||||
}
|
||||
|
||||
export interface RepositoryMetadataState {
|
||||
components: MetadataComponentsState;
|
||||
lastSyncedAt?: string;
|
||||
}
|
||||
|
||||
const defaultComponents: MetadataComponentsState = {
|
||||
releases: false,
|
||||
issues: false,
|
||||
pullRequests: false,
|
||||
labels: false,
|
||||
milestones: false,
|
||||
};
|
||||
|
||||
export function createDefaultMetadataState(): RepositoryMetadataState {
|
||||
return {
|
||||
components: { ...defaultComponents },
|
||||
};
|
||||
}
|
||||
|
||||
export function parseRepositoryMetadataState(
|
||||
raw: unknown
|
||||
): RepositoryMetadataState {
|
||||
const base = createDefaultMetadataState();
|
||||
|
||||
if (!raw) {
|
||||
return base;
|
||||
}
|
||||
|
||||
let parsed: any = raw;
|
||||
|
||||
if (typeof raw === "string") {
|
||||
try {
|
||||
parsed = JSON.parse(raw);
|
||||
} catch {
|
||||
return base;
|
||||
}
|
||||
}
|
||||
|
||||
if (!parsed || typeof parsed !== "object") {
|
||||
return base;
|
||||
}
|
||||
|
||||
if (parsed.components && typeof parsed.components === "object") {
|
||||
base.components = {
|
||||
...base.components,
|
||||
releases: Boolean(parsed.components.releases),
|
||||
issues: Boolean(parsed.components.issues),
|
||||
pullRequests: Boolean(parsed.components.pullRequests),
|
||||
labels: Boolean(parsed.components.labels),
|
||||
milestones: Boolean(parsed.components.milestones),
|
||||
};
|
||||
}
|
||||
|
||||
if (typeof parsed.lastSyncedAt === "string") {
|
||||
base.lastSyncedAt = parsed.lastSyncedAt;
|
||||
} else if (typeof parsed.lastMetadataSync === "string") {
|
||||
base.lastSyncedAt = parsed.lastMetadataSync;
|
||||
}
|
||||
|
||||
return base;
|
||||
}
|
||||
|
||||
export function serializeRepositoryMetadataState(
|
||||
state: RepositoryMetadataState
|
||||
): string {
|
||||
return JSON.stringify(state);
|
||||
}
|
||||
Reference in New Issue
Block a user