move parseUri from ApDbResolverService to UtilityService

This commit is contained in:
Hazelnoot 2025-09-15 17:56:26 -04:00
parent fb65fcf890
commit f37614b751
2 changed files with 40 additions and 31 deletions

View file

@ -16,6 +16,22 @@ import type { MiInstance } from '@/models/Instance.js';
import { IdentifiableError } from '@/misc/identifiable-error.js';
import { EnvService } from '@/global/EnvService.js';
export type UriParseResult = {
/** wether the URI was generated by us */
local: true;
/** id in DB */
id: string;
/** hint of type, e.g. "notes", "users" */
type: string;
/** any remaining text after type and id, not including the slash after id. undefined if empty */
rest?: string;
} | {
/** wether the URI was generated by us */
local: false;
/** uri in DB */
uri: string;
};
@Injectable()
export class UtilityService {
constructor(
@ -302,4 +318,24 @@ export class UtilityService {
return false;
}
}
// Moved from ApPersonService to avoid circular dependency
@bindThis
public parseUri(value: string | IObject | [string | IObject]): UriParseResult {
const separator = '/';
const apId = getApId(value);
const uri = new URL(apId);
if (this.toPuny(uri.host) !== this.toPuny(this.config.host)) {
return { local: false, uri: apId };
}
const [, type, id, ...rest] = uri.pathname.split(separator);
return {
local: true,
type,
id,
rest: rest.length === 0 ? undefined : rest.join(separator),
};
}
}

View file

@ -19,21 +19,7 @@ import { getApId } from './type.js';
import { ApPersonService } from './models/ApPersonService.js';
import type { IObject } from './type.js';
export type UriParseResult = {
/** wether the URI was generated by us */
local: true;
/** id in DB */
id: string;
/** hint of type, e.g. "notes", "users" */
type: string;
/** any remaining text after type and id, not including the slash after id. undefined if empty */
rest?: string;
} | {
/** wether the URI was generated by us */
local: false;
/** uri in DB */
uri: string;
};
export type { UriParseResult } from '@/core/UtilityService.js';
@Injectable()
export class ApDbResolverService implements OnApplicationShutdown {
@ -58,23 +44,10 @@ export class ApDbResolverService implements OnApplicationShutdown {
// Caches moved to ApPersonService to avoid circular dependency
}
// Moved to UtilityService to avoid circular dependency
@bindThis
public parseUri(value: string | IObject | [string | IObject]): UriParseResult {
const separator = '/';
const apId = getApId(value);
const uri = new URL(apId);
if (this.utilityService.toPuny(uri.host) !== this.utilityService.toPuny(this.config.host)) {
return { local: false, uri: apId };
}
const [, type, id, ...rest] = uri.pathname.split(separator);
return {
local: true,
type,
id,
rest: rest.length === 0 ? undefined : rest.join(separator),
};
public parseUri(value: string | IObject | [string | IObject]) {
return this.utilityService.parseUri(value);
}
/**