Skip to content

Commit

Permalink
fix: Rename methods that returns an array to start with list
Browse files Browse the repository at this point in the history
BREAKING CHANGE: fetchAll, fetchMany and other methods that returns an array is now prefixed with list*
  • Loading branch information
neet committed Dec 23, 2022
1 parent 57d0245 commit 68e8ff9
Show file tree
Hide file tree
Showing 37 changed files with 295 additions and 342 deletions.
1 change: 0 additions & 1 deletion src/api/index.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
export * as V1 from './v1';
export * as V2 from './v2';
export * from './repository';
export * from './iterable-repository';
23 changes: 0 additions & 23 deletions src/api/iterable-repository.ts

This file was deleted.

16 changes: 6 additions & 10 deletions src/api/repository.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import type { Paginator } from '../paginator';

export interface DefaultPaginationParams {
/** Return results older than this ID. */
readonly maxId?: string | null;
Expand All @@ -14,23 +16,17 @@ export interface Repository<
CreateParams = never,
UpdateParams = never,
FetchParams = never,
PaginationParams = DefaultPaginationParams,
ListParams = undefined,
> {
readonly [Symbol.asyncIterator]?: () => AsyncIterableIterator<Entity[]>;

readonly iterate?: (
params?: PaginationParams,
) => AsyncIterableIterator<Entity[]>;

readonly fetch?:
| ((id: string) => Promise<Entity>)
| ((params?: FetchParams) => Promise<Entity>);

readonly fetchMany?: (
params?: PaginationParams,
) => Promise<IteratorResult<Entity[]>>;

readonly fetchAll?: (params?: FetchParams) => Promise<Entity[]>;
readonly list?: ListParams extends undefined
? () => Paginator<Entity[]>
: (params?: ListParams) => Paginator<Entity[], ListParams>;

readonly create?: (params: CreateParams) => Promise<Entity>;

Expand Down
71 changes: 26 additions & 45 deletions src/api/v1/repositories/account-repository.ts
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ export interface CreateAccountNoteParams {
readonly comment: string;
}

export interface FetchAccountStatusesParams extends DefaultPaginationParams {
export interface ListAccountStatusesParams extends DefaultPaginationParams {
/** Only return statuses that have media attachments */
readonly onlyMedia?: boolean | null;
/** Only return statuses that have been pinned */
Expand Down Expand Up @@ -102,30 +102,6 @@ export class AccountRepository
{
constructor(private readonly http: Http, readonly config: MastoConfig) {}

@version({ since: '0.0.0' })
iterateFollowers(
id: string,
params: DefaultPaginationParams,
): Paginator<DefaultPaginationParams, Account[]> {
return new Paginator(this.http, `/api/v1/accounts/${id}/followers`, params);
}

@version({ since: '0.0.0' })
iterateFollowing(
id: string,
params: DefaultPaginationParams,
): Paginator<DefaultPaginationParams, Account[]> {
return new Paginator(this.http, `/api/v1/accounts/${id}/following`, params);
}

@version({ since: '0.0.0' })
iterateStatuses(
id: string,
params: FetchAccountStatusesParams,
): Paginator<FetchAccountStatusesParams, Status[]> {
return new Paginator(this.http, `/api/v1/accounts/${id}/statuses`, params);
}

/**
* View information about a profile.
* @param id The id of the account in the database
Expand Down Expand Up @@ -182,11 +158,12 @@ export class AccountRepository
* @return Array of Account
* @see https://docs.joinmastodon.org/methods/accounts/
*/
fetchFollowers(
@version({ since: '0.0.0' })
listFollowers(
id: string,
params: DefaultPaginationParams = {},
): Promise<IteratorResult<Account[]>> {
return this.iterateFollowers(id, params).next();
): Paginator<Account[], DefaultPaginationParams> {
return new Paginator(this.http, `/api/v1/accounts/${id}/followers`, params);
}

/**
Expand All @@ -196,11 +173,12 @@ export class AccountRepository
* @return Array of Account
* @see https://docs.joinmastodon.org/methods/accounts/
*/
fetchFollowing(
@version({ since: '0.0.0' })
listFollowing(
id: string,
params: DefaultPaginationParams = {},
): Promise<IteratorResult<Account[]>> {
return this.iterateFollowing(id, params).next();
): Paginator<Account[], DefaultPaginationParams> {
return new Paginator(this.http, `/api/v1/accounts/${id}/following`, params);
}

/**
Expand All @@ -210,11 +188,12 @@ export class AccountRepository
* @return Array of Status
* @see https://docs.joinmastodon.org/methods/accounts/
*/
fetchStatuses(
@version({ since: '0.0.0' })
listStatuses(
id: string,
params: DefaultPaginationParams = {},
): Promise<IteratorResult<Status[]>> {
return this.iterateStatuses(id, params).next();
params: ListAccountStatusesParams = {},
): Paginator<Status[], ListAccountStatusesParams> {
return new Paginator(this.http, `/api/v1/accounts/${id}/statuses`, params);
}

/**
Expand Down Expand Up @@ -260,8 +239,10 @@ export class AccountRepository
* @see https://docs.joinmastodon.org/methods/accounts/
*/
@version({ since: '0.0.0' })
search(params?: SearchAccountsParams): Promise<Account[]> {
return this.http.get(`/api/v1/accounts/search`, params);
search(
params?: SearchAccountsParams,
): Paginator<Account[], SearchAccountsParams> {
return new Paginator(this.http, `/api/v1/accounts/search`, params);
}

/**
Expand Down Expand Up @@ -315,8 +296,8 @@ export class AccountRepository
* @see https://docs.joinmastodon.org/methods/timelines/lists/
*/
@version({ since: '2.1.0' })
fetchLists(id: string): Promise<List[]> {
return this.http.get(`/api/v1/accounts/${id}/lists`);
listLists(id: string): Paginator<List[]> {
return new Paginator(this.http, `/api/v1/accounts/${id}/lists`);
}

/**
Expand Down Expand Up @@ -362,8 +343,8 @@ export class AccountRepository
* @return FeaturedTags
*/
@version({ since: '3.3.0' })
fetchFeaturedTags(id: string): Promise<FeaturedTag> {
return this.http.get(`/api/v1/accounts/${id}/featured_tags`);
listFeaturedTags(id: string): Paginator<FeaturedTag[]> {
return new Paginator(this.http, `/api/v1/accounts/${id}/featured_tags`);
}

/**
Expand All @@ -373,8 +354,8 @@ export class AccountRepository
* @see https://github.com/tootsuite/mastodon/pull/10297
*/
@version({ since: '2.8.0' })
fetchIdentityProofs(id: string): Promise<IdentityProof> {
return this.http.get(`/api/v1/accounts/${id}/identity_proofs`);
listIdentityProofs(id: string): Paginator<IdentityProof[]> {
return new Paginator(this.http, `/api/v1/accounts/${id}/identity_proofs`);
}

/**
Expand All @@ -392,8 +373,8 @@ export class AccountRepository
* @returns Accounts
*/
@version({ since: '3.5.0' })
fetchFamiliarFollowers(): Promise<Account[]> {
return this.http.get(`/api/v1/accounts/familiar_followers`);
listFamiliarFollowers(): Paginator<Account[]> {
return new Paginator(this.http, `/api/v1/accounts/familiar_followers`);
}

/**
Expand Down
17 changes: 7 additions & 10 deletions src/api/v1/repositories/admin/account-repository.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
import type { MastoConfig } from '../../../../config';
import { version } from '../../../../decorators';
import type { Http } from '../../../../http';
import { Paginator } from '../../../../paginator';
import type { Repository } from '../../../repository';
import type { Admin } from '../../entities';

export interface FetchAccountsParams {
export interface ListAccountsParams {
/** Filter for local accounts? */
readonly local?: boolean | null;
/** Filter for remote accounts? */
Expand Down Expand Up @@ -54,8 +55,7 @@ export interface CreateActionParams {
}

export class AccountRepository
implements
Repository<Admin.Account, never, never, never, FetchAccountsParams>
implements Repository<Admin.Account, never, never, never, ListAccountsParams>
{
constructor(private readonly http: Http, readonly config: MastoConfig) {}

Expand All @@ -67,8 +67,10 @@ export class AccountRepository
* @see https://docs.joinmastodon.org/methods/admin/
*/
@version({ since: '2.9.1' })
fetchAll(params?: FetchAccountsParams): Promise<Admin.Account[]> {
return this.http.get('/api/v1/admin/accounts', params);
list(
params?: ListAccountsParams,
): Paginator<Admin.Account[], ListAccountsParams> {
return new Paginator(this.http, '/api/v1/admin/accounts', params);
}

/**
Expand Down Expand Up @@ -149,8 +151,3 @@ export class AccountRepository
return this.http.post(`/api/v1/admin/accounts/${id}/unsuspend`);
}
}

/** @deprecated Use Admin.FetchAccountsParams */
export type AdminFetchAccountParams = FetchAccountsParams;
/** @deprecated Use Admin.CreateActionParams */
export type AdminActionAccountParams = CreateActionParams;
11 changes: 7 additions & 4 deletions src/api/v1/repositories/admin/domain-allow-repository.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
import type { MastoConfig } from '../../../../config';
import { version } from '../../../../decorators';
import type { Http } from '../../../../http';
import { Paginator } from '../../../../paginator';
import type { Repository } from '../../../repository';
import type { Admin } from '../../entities';

export type FetchAllDomainAllowsParams = {
export type ListDomainAllowsParams = {
readonly limit?: number;
};

Expand All @@ -19,7 +20,7 @@ export class DomainAllowRepository
CreateDomainAllowParams,
never,
never,
FetchAllDomainAllowsParams
ListDomainAllowsParams
>
{
constructor(private readonly http: Http, readonly config: MastoConfig) {}
Expand All @@ -31,8 +32,10 @@ export class DomainAllowRepository
* @see https://docs.joinmastodon.org/methods/admin/
*/
@version({ since: '4.0.0' })
fetchAll(params?: FetchAllDomainAllowsParams): Promise<Admin.DomainAllow[]> {
return this.http.get('/api/v1/admin/domain_allows', params);
list(
params?: ListDomainAllowsParams,
): Paginator<Admin.DomainAllow[], ListDomainAllowsParams> {
return new Paginator(this.http, '/api/v1/admin/domain_allows', params);
}

/**
Expand Down
13 changes: 8 additions & 5 deletions src/api/v1/repositories/admin/domain-block-repository.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import type { MastoConfig } from '../../../../config';
import { version } from '../../../../decorators';
import type { Http } from '../../../../http';
import { Paginator } from '../../../../paginator';
import type { Repository } from '../../../repository';
import type { Admin } from '../../entities';

Expand All @@ -21,8 +22,8 @@ export interface CreateDomainBlockParams {
readonly obfuscate?: boolean;
}

export type FetchAllDomainBlocksParams = {
limit?: number;
export type ListDomainBlocksParams = {
readonly limit?: number;
};

export type UpdateDomainBlockParams = Omit<CreateDomainBlockParams, 'domain'>;
Expand All @@ -34,7 +35,7 @@ export class DomainBlockRepository
CreateDomainBlockParams,
UpdateDomainBlockParams,
never,
FetchAllDomainBlocksParams
ListDomainBlocksParams
>
{
constructor(private readonly http: Http, readonly config: MastoConfig) {}
Expand All @@ -46,8 +47,10 @@ export class DomainBlockRepository
* @see https://docs.joinmastodon.org/methods/admin/
*/
@version({ since: '4.0.0' })
fetchAll(params?: FetchAllDomainBlocksParams): Promise<Admin.DomainBlock[]> {
return this.http.get('/api/v1/admin/domain_blocks', params);
list(
params?: ListDomainBlocksParams,
): Paginator<Admin.DomainBlock[], ListDomainBlocksParams> {
return new Paginator(this.http, '/api/v1/admin/domain_blocks', params);
}

/**
Expand Down
17 changes: 11 additions & 6 deletions src/api/v1/repositories/admin/email-domain-block-repository.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
import type { MastoConfig } from '../../../../config';
import { version } from '../../../../decorators';
import type { Http } from '../../../../http';
import { Paginator } from '../../../../paginator';
import type { Repository } from '../../../repository';
import type { Admin } from '../../entities';

export type FetchEmailDomainBlocksParams = {
export type ListEmailDomainBlocksParams = {
/** Integer. Maximum number of results to return. Defaults to 100. */
readonly limit?: number | null;
};
Expand All @@ -21,7 +22,7 @@ export class EmailDomainBlockRepository
CreateEmailDomainBlockParams,
never,
never,
FetchEmailDomainBlocksParams
ListEmailDomainBlocksParams
>
{
constructor(private readonly http: Http, readonly config: MastoConfig) {}
Expand All @@ -33,10 +34,14 @@ export class EmailDomainBlockRepository
* @see https://docs.joinmastodon.org/methods/admin/
*/
@version({ since: '4.0.0' })
fetchAll(
params?: FetchEmailDomainBlocksParams,
): Promise<Admin.EmailDomainBlock[]> {
return this.http.get('/api/v1/admin/email_domain_blocks ', params);
list(
params?: ListEmailDomainBlocksParams,
): Paginator<Admin.EmailDomainBlock[], ListEmailDomainBlocksParams> {
return new Paginator(
this.http,
'/api/v1/admin/email_domain_blocks ',
params,
);
}

/**
Expand Down
Loading

0 comments on commit 68e8ff9

Please sign in to comment.