Przeglądaj źródła

Merge remote-tracking branch 'origin/master' into support/use-jotai

Yuki Takei 7 miesięcy temu
rodzic
commit
47314516eb
54 zmienionych plików z 645 dodań i 522 usunięć
  1. 1 0
      apps/app/.eslintrc.js
  2. 9 9
      apps/app/src/interfaces/access-token.ts
  3. 126 65
      apps/app/src/interfaces/activity.ts
  4. 1 2
      apps/app/src/interfaces/admin.ts
  5. 5 5
      apps/app/src/interfaces/apiv3/attachment.ts
  6. 22 24
      apps/app/src/interfaces/apiv3/page.ts
  7. 6 5
      apps/app/src/interfaces/attachment.ts
  8. 18 18
      apps/app/src/interfaces/bookmark-info.ts
  9. 9 9
      apps/app/src/interfaces/cdn.ts
  10. 15 18
      apps/app/src/interfaces/comment.ts
  11. 2 2
      apps/app/src/interfaces/common.ts
  12. 4 7
      apps/app/src/interfaces/crowi-request.ts
  13. 4 4
      apps/app/src/interfaces/customize.ts
  14. 15 15
      apps/app/src/interfaces/editor-methods.ts
  15. 3 1
      apps/app/src/interfaces/errors/external-account-login-error.ts
  16. 4 2
      apps/app/src/interfaces/errors/forgot-password.ts
  17. 4 2
      apps/app/src/interfaces/errors/login-error.ts
  18. 4 2
      apps/app/src/interfaces/errors/user-activation.ts
  19. 1 1
      apps/app/src/interfaces/errors/v3-error.ts
  20. 2 1
      apps/app/src/interfaces/errors/v5-conversion-error.ts
  21. 2 1
      apps/app/src/interfaces/external-auth-provider.ts
  22. 8 6
      apps/app/src/interfaces/file-uploader.ts
  23. 4 3
      apps/app/src/interfaces/g2g-transfer.ts
  24. 16 16
      apps/app/src/interfaces/github-api.ts
  25. 17 17
      apps/app/src/interfaces/in-app-notification.ts
  26. 1 1
      apps/app/src/interfaces/indeterminate-input-elm.ts
  27. 5 5
      apps/app/src/interfaces/ldap.ts
  28. 4 5
      apps/app/src/interfaces/named-query.ts
  29. 22 6
      apps/app/src/interfaces/page-delete-config.ts
  30. 17 14
      apps/app/src/interfaces/page-grant.ts
  31. 5 7
      apps/app/src/interfaces/page-listing-results.ts
  32. 10 8
      apps/app/src/interfaces/page-operation.ts
  33. 4 4
      apps/app/src/interfaces/page-tag-relation.ts
  34. 53 43
      apps/app/src/interfaces/page.ts
  35. 4 4
      apps/app/src/interfaces/paging-result.ts
  36. 2 1
      apps/app/src/interfaces/registration-mode.ts
  37. 13 8
      apps/app/src/interfaces/renderer-options.ts
  38. 54 54
      apps/app/src/interfaces/res/admin/app-settings.ts
  39. 18 18
      apps/app/src/interfaces/search.ts
  40. 7 6
      apps/app/src/interfaces/services/rehype-sanitize.ts
  41. 10 10
      apps/app/src/interfaces/services/renderer.ts
  42. 6 6
      apps/app/src/interfaces/share-link.ts
  43. 2 3
      apps/app/src/interfaces/sidebar-config.ts
  44. 18 18
      apps/app/src/interfaces/tag.ts
  45. 1 1
      apps/app/src/interfaces/theme.ts
  46. 4 4
      apps/app/src/interfaces/transfer-key.ts
  47. 20 14
      apps/app/src/interfaces/ui.ts
  48. 36 25
      apps/app/src/interfaces/user-group-response.ts
  49. 8 3
      apps/app/src/interfaces/user-group.ts
  50. 1 2
      apps/app/src/interfaces/user-trigger-notification.ts
  51. 3 3
      apps/app/src/interfaces/user-ui-settings.ts
  52. 9 7
      apps/app/src/interfaces/websocket.ts
  53. 6 6
      apps/app/src/interfaces/yjs.ts
  54. 0 1
      biome.json

+ 1 - 0
apps/app/.eslintrc.js

@@ -39,6 +39,7 @@ module.exports = {
     'src/features/external-user-group/**',
     'src/features/page-bulk-export/**',
     'src/features/opentelemetry/**',
+    'src/interfaces/**',
     'src/states/**',
   ],
   settings: {

+ 9 - 9
apps/app/src/interfaces/access-token.ts

@@ -1,16 +1,16 @@
 import type { Scope } from '@growi/core/dist/interfaces';
 
 export type IAccessTokenInfo = {
-  expiredAt: Date,
-  description: string,
-  scopes: Scope[],
-}
+  expiredAt: Date;
+  description: string;
+  scopes: Scope[];
+};
 
 export type IResGenerateAccessToken = IAccessTokenInfo & {
-  token: string,
-  _id: string,
-}
+  token: string;
+  _id: string;
+};
 
 export type IResGetAccessToken = IAccessTokenInfo & {
-  _id: string,
-}
+  _id: string;
+};

+ 126 - 65
apps/app/src/interfaces/activity.ts

@@ -1,4 +1,4 @@
-import type { Ref, HasObjectId, IUser } from '@growi/core';
+import type { HasObjectId, IUser, Ref } from '@growi/core';
 
 // Model
 const MODEL_PAGE = 'Page';
@@ -8,7 +8,8 @@ const MODEL_PAGE_BULK_EXPORT_JOB = 'PageBulkExportJob';
 
 // Action
 const ACTION_UNSETTLED = 'UNSETTLED';
-const ACTION_USER_REGISTRATION_APPROVAL_REQUEST = 'USER_REGISTRATION_APPROVAL_REQUEST';
+const ACTION_USER_REGISTRATION_APPROVAL_REQUEST =
+  'USER_REGISTRATION_APPROVAL_REQUEST';
 const ACTION_USER_REGISTRATION_SUCCESS = 'USER_REGISTRATION_SUCCESS';
 const ACTION_USER_LOGIN_WITH_LOCAL = 'USER_LOGIN_WITH_LOCAL';
 const ACTION_USER_LOGIN_WITH_LDAP = 'USER_LOGIN_WITH_LDAP';
@@ -28,7 +29,8 @@ const ACTION_USER_PASSWORD_UPDATE = 'USER_PASSWORD_UPDATE';
 const ACTION_USER_ACCESS_TOKEN_CREATE = 'USER_ACCESS_TOKEN_CREATE';
 const ACTION_USER_ACCESS_TOKEN_DELETE = 'USER_ACCESS_TOKEN_DELETE';
 const ACTION_USER_EDITOR_SETTINGS_UPDATE = 'USER_EDITOR_SETTINGS_UPDATE';
-const ACTION_USER_IN_APP_NOTIFICATION_SETTINGS_UPDATE = 'USER_IN_APP_NOTIFICATION_SETTINGS_UPDATE';
+const ACTION_USER_IN_APP_NOTIFICATION_SETTINGS_UPDATE =
+  'USER_IN_APP_NOTIFICATION_SETTINGS_UPDATE';
 const ACTION_PAGE_VIEW = 'PAGE_VIEW';
 const ACTION_PAGE_USER_HOME_VIEW = 'PAGE_USER_HOME_VIEW';
 const ACTION_PAGE_NOT_FOUND = 'PAGE_NOT_FOUND';
@@ -48,7 +50,8 @@ const ACTION_PAGE_REVERT = 'PAGE_REVERT';
 const ACTION_PAGE_EMPTY_TRASH = 'PAGE_EMPTY_TRASH';
 const ACTION_PAGE_RECURSIVELY_RENAME = 'PAGE_RECURSIVELY_RENAME';
 const ACTION_PAGE_RECURSIVELY_DELETE = 'PAGE_RECURSIVELY_DELETE';
-const ACTION_PAGE_RECURSIVELY_DELETE_COMPLETELY = 'PAGE_RECURSIVELY_DELETE_COMPLETELY';
+const ACTION_PAGE_RECURSIVELY_DELETE_COMPLETELY =
+  'PAGE_RECURSIVELY_DELETE_COMPLETELY';
 const ACTION_PAGE_RECURSIVELY_REVERT = 'PAGE_RECURSIVELY_REVERT';
 const ACTION_PAGE_SUBSCRIBE = 'PAGE_SUBSCRIBE';
 const ACTION_PAGE_UNSUBSCRIBE = 'PAGE_UNSUBSCRIBE';
@@ -57,7 +60,8 @@ const ACTION_PAGE_BULK_EXPORT_COMPLETED = 'PAGE_BULK_EXPORT_COMPLETED';
 const ACTION_PAGE_BULK_EXPORT_FAILED = 'PAGE_BULK_EXPORT_FAILED';
 const ACTION_PAGE_BULK_EXPORT_JOB_EXPIRED = 'PAGE_BULK_EXPORT_JOB_EXPIRED';
 const ACTION_TAG_UPDATE = 'TAG_UPDATE';
-const ACTION_IN_APP_NOTIFICATION_ALL_STATUSES_OPEN = 'IN_APP_NOTIFICATION_ALL_STATUSES_OPEN';
+const ACTION_IN_APP_NOTIFICATION_ALL_STATUSES_OPEN =
+  'IN_APP_NOTIFICATION_ALL_STATUSES_OPEN';
 const ACTION_COMMENT_CREATE = 'COMMENT_CREATE';
 const ACTION_COMMENT_UPDATE = 'COMMENT_UPDATE';
 const ACTION_COMMENT_REMOVE = 'COMMENT_REMOVE';
@@ -78,8 +82,10 @@ const ACTION_ADMIN_SITE_URL_UPDATE = 'ADMIN_SITE_URL_UPDATE';
 const ACTION_ADMIN_MAIL_SMTP_UPDATE = 'ADMIN_MAIL_SMTP_UPDATE';
 const ACTION_ADMIN_MAIL_SES_UPDATE = 'ADMIN_MAIL_SES_UPDATE';
 const ACTION_ADMIN_MAIL_TEST_SUBMIT = 'ADMIN_MAIL_TEST_SUBMIT';
-const ACTION_ADMIN_FILE_UPLOAD_CONFIG_UPDATE = 'ADMIN_FILE_UPLOAD_CONFIG_UPDATE';
-const ACTION_ADMIN_PAGE_BULK_EXPORT_SETTINGS_UPDATE = 'ADMIN_PAGE_BULK_EXPORT_SETTINGS_UPDATE';
+const ACTION_ADMIN_FILE_UPLOAD_CONFIG_UPDATE =
+  'ADMIN_FILE_UPLOAD_CONFIG_UPDATE';
+const ACTION_ADMIN_PAGE_BULK_EXPORT_SETTINGS_UPDATE =
+  'ADMIN_PAGE_BULK_EXPORT_SETTINGS_UPDATE';
 const ACTION_ADMIN_MAINTENANCEMODE_ENABLED = 'ADMIN_MAINTENANCEMODE_ENABLED';
 const ACTION_ADMIN_MAINTENANCEMODE_DISABLED = 'ADMIN_MAINTENANCEMODE_DISABLED';
 const ACTION_ADMIN_SECURITY_SETTINGS_UPDATE = 'ADMIN_SECURITY_SETTINGS_UPDATE';
@@ -103,9 +109,11 @@ const ACTION_ADMIN_AUTH_GOOGLE_UPDATE = 'ADMIN_AUTH_GOOGLE_UPDATE';
 const ACTION_ADMIN_AUTH_GITHUB_ENABLED = 'ADMIN_AUTH_GITHUB_ENABLED';
 const ACTION_ADMIN_AUTH_GITHUB_DISABLED = 'ADMIN_AUTH_GITHUB_DISABLED';
 const ACTION_ADMIN_AUTH_GITHUB_UPDATE = 'ADMIN_AUTH_GITHUB_UPDATE';
-const ACTION_ADMIN_MARKDOWN_LINE_BREAK_UPDATE = 'ADMIN_MARKDOWN_LINE_BREAK_UPDATE';
+const ACTION_ADMIN_MARKDOWN_LINE_BREAK_UPDATE =
+  'ADMIN_MARKDOWN_LINE_BREAK_UPDATE';
 const ACTION_ADMIN_MARKDOWN_INDENT_UPDATE = 'ADMIN_MARKDOWN_INDENT_UPDATE';
-const ACTION_ADMIN_MARKDOWN_PRESENTATION_UPDATE = 'ADMIN_MARKDOWN_PRESENTATION_UPDATE';
+const ACTION_ADMIN_MARKDOWN_PRESENTATION_UPDATE =
+  'ADMIN_MARKDOWN_PRESENTATION_UPDATE';
 const ACTION_ADMIN_MARKDOWN_XSS_UPDATE = 'ADMIN_MARKDOWN_XSS_UPDATE';
 const ACTION_ADMIN_LAYOUT_UPDATE = 'ADMIN_LAYOUT_UPDATE';
 const ACTION_ADMIN_THEME_UPDATE = 'ADMIN_THEME_UPDATE';
@@ -118,37 +126,52 @@ const ACTION_ADMIN_CUSTOM_CSS_UPDATE = 'ADMIN_CUSTOM_CSS_UPDATE';
 const ACTION_ADMIN_CUSTOM_SCRIPT_UPDATE = 'ADMIN_CUSTOM_SCRIPT_UPDATE';
 const ACTION_ADMIN_ARCHIVE_DATA_UPLOAD = 'ADMIN_ARCHIVE_DATA_UPLOAD';
 const ACTION_ADMIN_GROWI_DATA_IMPORTED = 'ADMIN_GROWI_DATA_IMPORTED';
-const ACTION_ADMIN_UPLOADED_GROWI_DATA_DISCARDED = 'ADMIN_UPLOADED_GROWI_DATA_DISCARDED';
+const ACTION_ADMIN_UPLOADED_GROWI_DATA_DISCARDED =
+  'ADMIN_UPLOADED_GROWI_DATA_DISCARDED';
 const ACTION_ADMIN_ESA_DATA_IMPORTED = 'ADMIN_ESA_DATA_IMPORTED';
 const ACTION_ADMIN_ESA_DATA_UPDATED = 'ADMIN_ESA_DATA_UPDATED';
-const ACTION_ADMIN_CONNECTION_TEST_OF_ESA_DATA = 'ADMIN_CONNECTION_TEST_OF_ESA_DATA';
+const ACTION_ADMIN_CONNECTION_TEST_OF_ESA_DATA =
+  'ADMIN_CONNECTION_TEST_OF_ESA_DATA';
 const ACTION_ADMIN_QIITA_DATA_IMPORTED = 'ADMIN_QIITA_DATA_IMPORTED';
 const ACTION_ADMIN_QIITA_DATA_UPDATED = 'ADMIN_QIITA_DATA_UPDATED';
-const ACTION_ADMIN_CONNECTION_TEST_OF_QIITA_DATA = 'ADMIN_CONNECTION_TEST_OF_QIITA_DATA';
+const ACTION_ADMIN_CONNECTION_TEST_OF_QIITA_DATA =
+  'ADMIN_CONNECTION_TEST_OF_QIITA_DATA';
 const ACTION_ADMIN_ARCHIVE_DATA_CREATE = 'ADMIN_ARCHIVE_DATA_CREATE';
 const ACTION_ADMIN_ARCHIVE_DATA_DOWNLOAD = 'ADMIN_ARCHIVE_DATA_DOWNLOAD';
 const ACTION_ADMIN_ARCHIVE_DATA_DELETE = 'ADMIN_ARCHIVE_DATA_DELETE';
-const ACTION_ADMIN_USER_NOTIFICATION_SETTINGS_ADD = 'ADMIN_USER_NOTIFICATION_SETTINGS_ADD';
-const ACTION_ADMIN_USER_NOTIFICATION_SETTINGS_DELETE = 'ADMIN_USER_NOTIFICATION_SETTINGS_DELETE';
-const ACTION_ADMIN_GLOBAL_NOTIFICATION_SETTINGS_ADD = 'ADMIN_GLOBAL_NOTIFICATION_SETTINGS_ADD';
-const ACTION_ADMIN_GLOBAL_NOTIFICATION_SETTINGS_UPDATE = 'ADMIN_GLOBAL_NOTIFICATION_SETTINGS_UPDATE';
-const ACTION_ADMIN_NOTIFICATION_GRANT_SETTINGS_UPDATE = 'ADMIN_NOTIFICATION_GRANT_SETTINGS_UPDATE';
-const ACTION_ADMIN_GLOBAL_NOTIFICATION_SETTINGS_ENABLED = 'ADMIN_GLOBAL_NOTIFICATION_SETTINGS_ENABLED';
-const ACTION_ADMIN_GLOBAL_NOTIFICATION_SETTINGS_DISABLED = 'ADMIN_GLOBAL_NOTIFICATION_SETTINGS_DISABLED';
-const ACTION_ADMIN_GLOBAL_NOTIFICATION_SETTINGS_DELETE = 'ADMIN_GLOBAL_NOTIFICATION_SETTINGS_DELETE';
+const ACTION_ADMIN_USER_NOTIFICATION_SETTINGS_ADD =
+  'ADMIN_USER_NOTIFICATION_SETTINGS_ADD';
+const ACTION_ADMIN_USER_NOTIFICATION_SETTINGS_DELETE =
+  'ADMIN_USER_NOTIFICATION_SETTINGS_DELETE';
+const ACTION_ADMIN_GLOBAL_NOTIFICATION_SETTINGS_ADD =
+  'ADMIN_GLOBAL_NOTIFICATION_SETTINGS_ADD';
+const ACTION_ADMIN_GLOBAL_NOTIFICATION_SETTINGS_UPDATE =
+  'ADMIN_GLOBAL_NOTIFICATION_SETTINGS_UPDATE';
+const ACTION_ADMIN_NOTIFICATION_GRANT_SETTINGS_UPDATE =
+  'ADMIN_NOTIFICATION_GRANT_SETTINGS_UPDATE';
+const ACTION_ADMIN_GLOBAL_NOTIFICATION_SETTINGS_ENABLED =
+  'ADMIN_GLOBAL_NOTIFICATION_SETTINGS_ENABLED';
+const ACTION_ADMIN_GLOBAL_NOTIFICATION_SETTINGS_DISABLED =
+  'ADMIN_GLOBAL_NOTIFICATION_SETTINGS_DISABLED';
+const ACTION_ADMIN_GLOBAL_NOTIFICATION_SETTINGS_DELETE =
+  'ADMIN_GLOBAL_NOTIFICATION_SETTINGS_DELETE';
 const ACTION_ADMIN_SLACK_WORKSPACE_CREATE = 'ADMIN_SLACK_WORKSPACE_CREATE';
 const ACTION_ADMIN_SLACK_WORKSPACE_DELETE = 'ADMIN_SLACK_WORKSPACE_DELETE';
 const ACTION_ADMIN_SLACK_BOT_TYPE_UPDATE = 'ADMIN_SLACK_BOT_TYPE_UPDATE';
 const ACTION_ADMIN_SLACK_BOT_TYPE_DELETE = 'ADMIN_SLACK_BOT_TYPE_DELETE';
-const ACTION_ADMIN_SLACK_ACCESS_TOKEN_REGENERATE = 'ADMIN_SLACK_ACCESS_TOKEN_REGENERATE';
+const ACTION_ADMIN_SLACK_ACCESS_TOKEN_REGENERATE =
+  'ADMIN_SLACK_ACCESS_TOKEN_REGENERATE';
 const ACTION_ADMIN_SLACK_MAKE_APP_PRIMARY = 'ADMIN_SLACK_MAKE_APP_PRIMARY';
 const ACTION_ADMIN_SLACK_PERMISSION_UPDATE = 'ADMIN_SLACK_PERMISSION_UPDATE';
 const ACTION_ADMIN_SLACK_PROXY_URI_UPDATE = 'ADMIN_SLACK_PROXY_URI_UPDATE';
 const ACTION_ADMIN_SLACK_RELATION_TEST = 'ADMIN_SLACK_RELATION_TEST';
-const ACTION_ADMIN_SLACK_WITHOUT_PROXY_SETTINGS_UPDATE = 'ADMIN_SLACK_WITHOUT_PROXY_SETTINGS_UPDATE';
-const ACTION_ADMIN_SLACK_WITHOUT_PROXY_PERMISSION_UPDATE = 'ADMIN_SLACK_WITHOUT_PROXY_PERMISSION_UPDATE';
+const ACTION_ADMIN_SLACK_WITHOUT_PROXY_SETTINGS_UPDATE =
+  'ADMIN_SLACK_WITHOUT_PROXY_SETTINGS_UPDATE';
+const ACTION_ADMIN_SLACK_WITHOUT_PROXY_PERMISSION_UPDATE =
+  'ADMIN_SLACK_WITHOUT_PROXY_PERMISSION_UPDATE';
 const ACTION_ADMIN_SLACK_WITHOUT_PROXY_TEST = 'ADMIN_SLACK_WITHOUT_PROXY_TEST';
-const ACTION_ADMIN_SLACK_CONFIGURATION_SETTING_UPDATE = 'ADMIN_SLACK_CONFIGURATION_SETTING_UPDATE';
+const ACTION_ADMIN_SLACK_CONFIGURATION_SETTING_UPDATE =
+  'ADMIN_SLACK_CONFIGURATION_SETTING_UPDATE';
 const ACTION_ADMIN_USERS_INVITE = 'ADMIN_USERS_INVITE';
 const ACTION_ADMIN_USERS_PASSWORD_RESET = 'ADMIN_USERS_PASSWORD_RESET';
 const ACTION_ADMIN_USERS_ACTIVATE = 'ADMIN_USERS_ACTIVATE';
@@ -157,7 +180,8 @@ const ACTION_ADMIN_USERS_REVOKE_ADMIN = 'ADMIN_USERS_REVOKE_ADMIN';
 const ACTION_ADMIN_USERS_GRANT_READ_ONLY = 'ADMIN_USERS_GRANT_READ_ONLY';
 const ACTION_ADMIN_USERS_REVOKE_READ_ONLY = 'ADMIN_USERS_REVOKE_READ_ONLY';
 const ACTION_ADMIN_USERS_DEACTIVATE = 'ADMIN_USERS_DEACTIVATE';
-const ACTION_ADMIN_USERS_SEND_INVITATION_EMAIL = 'ADMIN_USERS_SEND_INVITATION_EMAIL';
+const ACTION_ADMIN_USERS_SEND_INVITATION_EMAIL =
+  'ADMIN_USERS_SEND_INVITATION_EMAIL';
 const ACTION_ADMIN_USERS_REMOVE = 'ADMIN_USERS_REMOVE';
 const ACTION_ADMIN_USER_GROUP_CREATE = 'ADMIN_USER_GROUP_CREATE';
 const ACTION_ADMIN_USER_GROUP_UPDATE = 'ADMIN_USER_GROUP_UPDATE';
@@ -167,7 +191,6 @@ const ACTION_ADMIN_SEARCH_CONNECTION = 'ADMIN_SEARCH_CONNECTION';
 const ACTION_ADMIN_SEARCH_INDICES_NORMALIZE = 'ADMIN_SEARCH_INDICES_NORMALIZE';
 const ACTION_ADMIN_SEARCH_INDICES_REBUILD = 'ADMIN_SEARCH_INDICES_REBUILD';
 
-
 export const SupportedTargetModel = {
   MODEL_PAGE,
   MODEL_USER,
@@ -378,7 +401,8 @@ export const ActionGroupSize = {
   Medium: 'MEDIUM',
   Large: 'LARGE',
 } as const;
-export type ActionGroupSize = typeof ActionGroupSize[keyof typeof ActionGroupSize];
+export type ActionGroupSize =
+  (typeof ActionGroupSize)[keyof typeof ActionGroupSize];
 
 export const SmallActionGroup = {
   ACTION_USER_LOGIN_WITH_LOCAL,
@@ -544,7 +568,6 @@ export const LargeActionGroup = {
   ACTION_ADMIN_SEARCH_INDICES_REBUILD,
 } as const;
 
-
 /*
  * Array
  */
@@ -557,53 +580,91 @@ export const AllMediumGroupActions = Object.values(MediumActionGroup);
 export const AllLargeGroupActions = Object.values(LargeActionGroup);
 
 // Action categories(for SelectActionDropdown.tsx)
-const pageRegExp = new RegExp(`^${SupportedActionCategory.PAGE.toUpperCase()}_`);
-const commentRegExp = new RegExp(`^${SupportedActionCategory.COMMENT.toUpperCase()}_`);
+const pageRegExp = new RegExp(
+  `^${SupportedActionCategory.PAGE.toUpperCase()}_`,
+);
+const commentRegExp = new RegExp(
+  `^${SupportedActionCategory.COMMENT.toUpperCase()}_`,
+);
 const tagRegExp = new RegExp(`^${SupportedActionCategory.TAG.toUpperCase()}_`);
-const attachmentRegExp = RegExp(`^${SupportedActionCategory.ATTACHMENT.toUpperCase()}_`);
-const shareLinkRegExp = RegExp(`^${SupportedActionCategory.SHARE_LINK.toUpperCase()}_`);
-const inAppNotificationRegExp = RegExp(`^${SupportedActionCategory.IN_APP_NOTIFICATION.toUpperCase()}_`);
-const searchRegExp = RegExp(`^${SupportedActionCategory.SEARCH.toUpperCase()}_`);
-const userRegExp = new RegExp(`^${SupportedActionCategory.USER.toUpperCase()}_`);
-const adminRegExp = new RegExp(`^${SupportedActionCategory.ADMIN.toUpperCase()}_`);
+const attachmentRegExp = RegExp(
+  `^${SupportedActionCategory.ATTACHMENT.toUpperCase()}_`,
+);
+const shareLinkRegExp = RegExp(
+  `^${SupportedActionCategory.SHARE_LINK.toUpperCase()}_`,
+);
+const inAppNotificationRegExp = RegExp(
+  `^${SupportedActionCategory.IN_APP_NOTIFICATION.toUpperCase()}_`,
+);
+const searchRegExp = RegExp(
+  `^${SupportedActionCategory.SEARCH.toUpperCase()}_`,
+);
+const userRegExp = new RegExp(
+  `^${SupportedActionCategory.USER.toUpperCase()}_`,
+);
+const adminRegExp = new RegExp(
+  `^${SupportedActionCategory.ADMIN.toUpperCase()}_`,
+);
 
-export const PageActions = AllSupportedActions.filter(action => action.match(pageRegExp));
-export const CommentActions = AllSupportedActions.filter(action => action.match(commentRegExp));
-export const TagActions = AllSupportedActions.filter(action => action.match(tagRegExp));
-export const AttachmentActions = AllSupportedActions.filter(action => action.match(attachmentRegExp));
-export const ShareLinkActions = AllSupportedActions.filter(action => action.match(shareLinkRegExp));
-export const InAppNotificationActions = AllSupportedActions.filter(action => action.match(inAppNotificationRegExp));
-export const SearchActions = AllSupportedActions.filter(action => action.match(searchRegExp));
-export const UserActions = AllSupportedActions.filter(action => action.match(userRegExp));
-export const AdminActions = AllSupportedActions.filter(action => action.match(adminRegExp));
+export const PageActions = AllSupportedActions.filter((action) =>
+  action.match(pageRegExp),
+);
+export const CommentActions = AllSupportedActions.filter((action) =>
+  action.match(commentRegExp),
+);
+export const TagActions = AllSupportedActions.filter((action) =>
+  action.match(tagRegExp),
+);
+export const AttachmentActions = AllSupportedActions.filter((action) =>
+  action.match(attachmentRegExp),
+);
+export const ShareLinkActions = AllSupportedActions.filter((action) =>
+  action.match(shareLinkRegExp),
+);
+export const InAppNotificationActions = AllSupportedActions.filter((action) =>
+  action.match(inAppNotificationRegExp),
+);
+export const SearchActions = AllSupportedActions.filter((action) =>
+  action.match(searchRegExp),
+);
+export const UserActions = AllSupportedActions.filter((action) =>
+  action.match(userRegExp),
+);
+export const AdminActions = AllSupportedActions.filter((action) =>
+  action.match(adminRegExp),
+);
 
 /*
  * Type
  */
-export type SupportedTargetModelType = typeof SupportedTargetModel[keyof typeof SupportedTargetModel];
-export type SupportedEventModelType = typeof SupportedEventModel[keyof typeof SupportedEventModel];
-export type SupportedActionType = typeof SupportedAction[keyof typeof SupportedAction];
-export type SupportedActionCategoryType = typeof SupportedActionCategory[keyof typeof SupportedActionCategory]
+export type SupportedTargetModelType =
+  (typeof SupportedTargetModel)[keyof typeof SupportedTargetModel];
+export type SupportedEventModelType =
+  (typeof SupportedEventModel)[keyof typeof SupportedEventModel];
+export type SupportedActionType =
+  (typeof SupportedAction)[keyof typeof SupportedAction];
+export type SupportedActionCategoryType =
+  (typeof SupportedActionCategory)[keyof typeof SupportedActionCategory];
 
-export type ISnapshot = Partial<Pick<IUser, 'username'>>
+export type ISnapshot = Partial<Pick<IUser, 'username'>>;
 
 export type IActivity = {
-  user?: Ref<IUser>
-  ip?: string
-  endpoint?: string
-  targetModel?: SupportedTargetModelType
-  target?: string
-  eventModel?: SupportedEventModelType
-  event?: string
-  action: SupportedActionType
-  createdAt: Date
-  snapshot?: ISnapshot
-}
+  user?: Ref<IUser>;
+  ip?: string;
+  endpoint?: string;
+  targetModel?: SupportedTargetModelType;
+  target?: string;
+  eventModel?: SupportedEventModelType;
+  event?: string;
+  action: SupportedActionType;
+  createdAt: Date;
+  snapshot?: ISnapshot;
+};
 
 export type IActivityHasId = IActivity & HasObjectId;
 
 export type ISearchFilter = {
-  usernames?: string[]
-  dates?: {startDate: string | null, endDate: string | null}
-  actions?: SupportedActionType[]
-}
+  usernames?: string[];
+  dates?: { startDate: string | null; endDate: string | null };
+  actions?: SupportedActionType[];
+};

+ 1 - 2
apps/app/src/interfaces/admin.ts

@@ -1,4 +1,3 @@
-
 export interface updateConfigMethodForAdmin<T> {
-  update: (arg: T) => void
+  update: (arg: T) => void;
 }

+ 5 - 5
apps/app/src/interfaces/apiv3/attachment.ts

@@ -3,13 +3,13 @@ import type { IAttachment, IPage, IRevision } from '@growi/core';
 import type { ICheckLimitResult } from '../attachment';
 
 export type IApiv3GetAttachmentLimitParams = {
-  fileSize: number,
+  fileSize: number;
 };
 
 export type IApiv3GetAttachmentLimitResponse = ICheckLimitResult;
 
 export type IApiv3PostAttachmentResponse = {
-  page: IPage,
-  revision: IRevision,
-  attachment: IAttachment,
-}
+  page: IPage;
+  revision: IRevision;
+  attachment: IAttachment;
+};

+ 22 - 24
apps/app/src/interfaces/apiv3/page.ts

@@ -1,43 +1,41 @@
-import type {
-  IPageHasId, IRevisionHasId, ITag, Origin,
-} from '@growi/core';
+import type { IPageHasId, IRevisionHasId, ITag, Origin } from '@growi/core';
 
 import type { IOptionsForCreate, IOptionsForUpdate } from '../page';
 
 export type IApiv3PageCreateParams = IOptionsForCreate & {
-  path?: string,
-  parentPath?: string,
-  optionalParentPath?: string,
+  path?: string;
+  parentPath?: string;
+  optionalParentPath?: string;
 
-  body?: string,
-  pageTags?: string[],
+  body?: string;
+  pageTags?: string[];
 
-  origin?: Origin,
+  origin?: Origin;
 
-  isSlackEnabled?: boolean,
-  slackChannels?: string,
+  isSlackEnabled?: boolean;
+  slackChannels?: string;
 };
 
 export type IApiv3PageCreateResponse = {
-  page: IPageHasId,
-  tags: ITag[],
-  revision: IRevisionHasId,
+  page: IPageHasId;
+  tags: ITag[];
+  revision: IRevisionHasId;
 };
 
 export type IApiv3PageUpdateParams = IOptionsForUpdate & {
-  pageId: string,
-  revisionId?: string,
-  body: string,
-
-  origin?: Origin,
-  isSlackEnabled?: boolean,
-  slackChannels?: string,
-  wip?: boolean
+  pageId: string;
+  revisionId?: string;
+  body: string;
+
+  origin?: Origin;
+  isSlackEnabled?: boolean;
+  slackChannels?: string;
+  wip?: boolean;
 };
 
 export type IApiv3PageUpdateResponse = {
-  page: IPageHasId,
-  revision: IRevisionHasId,
+  page: IPageHasId;
+  revision: IRevisionHasId;
 };
 
 export const PageUpdateErrorCode = {

+ 6 - 5
apps/app/src/interfaces/attachment.ts

@@ -13,13 +13,14 @@ export const AttachmentMethodType = {
   local: 'local',
   none: 'none',
 } as const;
-export type AttachmentMethodType = typeof AttachmentMethodType[keyof typeof AttachmentMethodType]
+export type AttachmentMethodType =
+  (typeof AttachmentMethodType)[keyof typeof AttachmentMethodType];
 
 export type IResAttachmentList = {
-  paginateResult: PaginateResult<IAttachmentHasId>
+  paginateResult: PaginateResult<IAttachmentHasId>;
 };
 
 export type ICheckLimitResult = {
-  isUploadable: boolean,
-  errorMessage?: string,
-}
+  isUploadable: boolean;
+  errorMessage?: string;
+};

+ 18 - 18
apps/app/src/interfaces/bookmark-info.ts

@@ -1,25 +1,25 @@
-import type { Ref, IPageHasId, IUser } from '@growi/core';
+import type { IPageHasId, IUser, Ref } from '@growi/core';
 
 export interface IBookmarkInfo {
-  sumOfBookmarks: number,
-  isBookmarked: boolean,
-  bookmarkedUsers: IUser[],
-  pageId: string,
+  sumOfBookmarks: number;
+  isBookmarked: boolean;
+  bookmarkedUsers: IUser[];
+  pageId: string;
 }
 
 export interface BookmarkedPage {
-  _id: string,
-  page: IPageHasId | null,
-  user: Ref<IUser>,
-  createdAt: Date,
+  _id: string;
+  page: IPageHasId | null;
+  user: Ref<IUser>;
+  createdAt: Date;
 }
 
-export type MyBookmarkList = BookmarkedPage[]
+export type MyBookmarkList = BookmarkedPage[];
 
 export interface IBookmarkFolder {
-  name: string
-  owner: Ref<IUser>
-  parent?: Ref<this>
+  name: string;
+  owner: Ref<IUser>;
+  parent?: Ref<this>;
 }
 
 export interface BookmarkFolderItems extends IBookmarkFolder {
@@ -34,13 +34,13 @@ export const DRAG_ITEM_TYPE = {
 } as const;
 
 interface BookmarkDragItem {
-  bookmarkFolder: BookmarkFolderItems
-  level: number
-  root: string
+  bookmarkFolder: BookmarkFolderItems;
+  level: number;
+  root: string;
 }
 
 export interface DragItemDataType extends BookmarkDragItem, IPageHasId {
-  parentFolder: BookmarkFolderItems | null
+  parentFolder: BookmarkFolderItems | null;
 }
 
-export type DragItemType = typeof DRAG_ITEM_TYPE[keyof typeof DRAG_ITEM_TYPE];
+export type DragItemType = (typeof DRAG_ITEM_TYPE)[keyof typeof DRAG_ITEM_TYPE];

+ 9 - 9
apps/app/src/interfaces/cdn.ts

@@ -1,17 +1,17 @@
 export type CdnManifestArgs = {
-  integrity?: string,
-  async?: boolean,
-  defer?: boolean,
+  integrity?: string;
+  async?: boolean;
+  defer?: boolean;
 };
 
 export type CdnManifest = {
-  name: string,
-  url: string,
-  groups?: string[],
-  args?: CdnManifestArgs,
+  name: string;
+  url: string;
+  groups?: string[];
+  args?: CdnManifestArgs;
 };
 
 export type CdnResource = {
-  manifest: CdnManifest,
-  outDir: string,
+  manifest: CdnManifest;
+  outDir: string;
 };

+ 15 - 18
apps/app/src/interfaces/comment.ts

@@ -1,29 +1,26 @@
-import type {
-  Ref, HasObjectId,
-  IPage, IRevision, IUser,
-} from '@growi/core';
+import type { HasObjectId, IPage, IRevision, IUser, Ref } from '@growi/core';
 
 export type IComment = {
-  page: Ref<IPage>,
-  creator: Ref<IUser>,
-  revision: Ref<IRevision>,
+  page: Ref<IPage>;
+  creator: Ref<IUser>;
+  revision: Ref<IRevision>;
   comment: string;
-  commentPosition: number,
-  replyTo?: string,
-  createdAt: Date,
-  updatedAt: Date,
+  commentPosition: number;
+  replyTo?: string;
+  createdAt: Date;
+  updatedAt: Date;
 };
 
 export interface ICommentPostArgs {
   commentForm: {
-    comment: string,
-    revisionId: string,
-    replyTo: string|undefined
-  },
+    comment: string;
+    revisionId: string;
+    replyTo: string | undefined;
+  };
   slackNotificationForm: {
-    isSlackEnabled: boolean|undefined,
-    slackChannels: string|undefined,
-  },
+    isSlackEnabled: boolean | undefined;
+    slackChannels: string | undefined;
+  };
 }
 
 export type ICommentHasId = IComment & HasObjectId;

+ 2 - 2
apps/app/src/interfaces/common.ts

@@ -5,5 +5,5 @@
 import type { ReactNode } from 'react';
 
 export type HasChildren<T = ReactNode> = {
-  children?: T
-}
+  children?: T;
+};

+ 4 - 7
apps/app/src/interfaces/crowi-request.ts

@@ -4,18 +4,15 @@ import type { HydratedDocument } from 'mongoose';
 
 import type Crowi from '~/server/crowi';
 
-
 export interface CrowiProperties {
+  user?: HydratedDocument<IUser>;
 
-  user?: HydratedDocument<IUser>,
-
-  crowi: Crowi,
+  crowi: Crowi;
 
-  session: any,
+  session: any;
 
   // provided by csurf
-  csrfToken: () => string,
-
+  csrfToken: () => string;
 }
 
 export interface CrowiRequest extends CrowiProperties, Request {}

+ 4 - 4
apps/app/src/interfaces/customize.ts

@@ -1,10 +1,10 @@
 import type { GrowiThemeMetadata } from '@growi/core';
 
 export type IResLayoutSetting = {
-  isContainerFluid: boolean,
+  isContainerFluid: boolean;
 };
 
 export type IResGrowiTheme = {
-  currentTheme: string,
-  pluginThemesMetadatas: GrowiThemeMetadata[],
-}
+  currentTheme: string;
+  pluginThemesMetadatas: GrowiThemeMetadata[];
+};

+ 15 - 15
apps/app/src/interfaces/editor-methods.ts

@@ -1,22 +1,22 @@
 import type { JSX } from 'react';
 
 export interface IEditorMethods {
-  forceToFocus: () => void,
-  setValue: (newValue: string) => void,
-  setCaretLine: (line: number) => void,
-  setScrollTopByLine: (line: number) => void,
-  insertText: (text: string) => void,
-  terminateUploadingState: () => void,
+  forceToFocus: () => void;
+  setValue: (newValue: string) => void;
+  setCaretLine: (line: number) => void;
+  setScrollTopByLine: (line: number) => void;
+  insertText: (text: string) => void;
+  terminateUploadingState: () => void;
 }
 
 export interface IEditorInnerMethods {
-  getStrFromBol(): void,
-  getStrToEol: () => void,
-  getStrFromBolToSelectedUpperPos: () => void,
-  replaceBolToCurrentPos: (text: string) => void,
-  replaceLine: (text: string) => void,
-  insertLinebreak: () => void,
-  dispatchSave: () => void,
-  dispatchPasteFiles: (event: Event) => void,
-  getNavbarItems: () => JSX.Element[],
+  getStrFromBol(): void;
+  getStrToEol: () => void;
+  getStrFromBolToSelectedUpperPos: () => void;
+  replaceBolToCurrentPos: (text: string) => void;
+  replaceLine: (text: string) => void;
+  insertLinebreak: () => void;
+  dispatchSave: () => void;
+  dispatchPasteFiles: (event: Event) => void;
+  getNavbarItems: () => JSX.Element[];
 }

+ 3 - 1
apps/app/src/interfaces/errors/external-account-login-error.ts

@@ -3,6 +3,8 @@ import type { ExternalAccountLoginError } from '~/models/vo/external-account-log
 export type IExternalAccountLoginError = ExternalAccountLoginError;
 
 // type guard
-export const isExternalAccountLoginError = (args: any): args is IExternalAccountLoginError => {
+export const isExternalAccountLoginError = (
+  args: any,
+): args is IExternalAccountLoginError => {
   return (args as IExternalAccountLoginError).message != null;
 };

+ 4 - 2
apps/app/src/interfaces/errors/forgot-password.ts

@@ -1,7 +1,9 @@
 export const forgotPasswordErrorCode = {
   PASSWORD_RESET_IS_UNAVAILABLE: 'password-reset-is-unavailable',
   TOKEN_NOT_FOUND: 'token-not-found',
-  PASSWORD_RESET_ORDER_IS_NOT_APPROPRIATE: 'password-reset-order-is-not-appropriate',
+  PASSWORD_RESET_ORDER_IS_NOT_APPROPRIATE:
+    'password-reset-order-is-not-appropriate',
 } as const;
 
-export type forgotPasswordErrorCode = typeof forgotPasswordErrorCode[keyof typeof forgotPasswordErrorCode]
+export type forgotPasswordErrorCode =
+  (typeof forgotPasswordErrorCode)[keyof typeof forgotPasswordErrorCode];

+ 4 - 2
apps/app/src/interfaces/errors/login-error.ts

@@ -1,5 +1,7 @@
 export const LoginErrorCode = {
-  PROVIDER_DUPLICATED_USERNAME_EXCEPTION: 'provider-duplicated-username-exception',
+  PROVIDER_DUPLICATED_USERNAME_EXCEPTION:
+    'provider-duplicated-username-exception',
 } as const;
 
-export type LoginErrorCode = typeof LoginErrorCode[keyof typeof LoginErrorCode];
+export type LoginErrorCode =
+  (typeof LoginErrorCode)[keyof typeof LoginErrorCode];

+ 4 - 2
apps/app/src/interfaces/errors/user-activation.ts

@@ -1,7 +1,9 @@
 export const UserActivationErrorCode = {
   TOKEN_NOT_FOUND: 'token-not-found',
   INVALID_TOKEN: 'token-is-invalid',
-  USER_REGISTRATION_ORDER_IS_NOT_APPROPRIATE: 'user-registration-order-is-not-appropriate',
+  USER_REGISTRATION_ORDER_IS_NOT_APPROPRIATE:
+    'user-registration-order-is-not-appropriate',
 } as const;
 
-export type UserActivationErrorCode = typeof UserActivationErrorCode[keyof typeof UserActivationErrorCode];
+export type UserActivationErrorCode =
+  (typeof UserActivationErrorCode)[keyof typeof UserActivationErrorCode];

+ 1 - 1
apps/app/src/interfaces/errors/v3-error.ts

@@ -1,3 +1,3 @@
 import type { ErrorV3 } from '@growi/core/dist/models';
 
-export type IErrorV3 = ErrorV3
+export type IErrorV3 = ErrorV3;

+ 2 - 1
apps/app/src/interfaces/errors/v5-conversion-error.ts

@@ -5,4 +5,5 @@ export const V5ConversionErrCode = {
   FORBIDDEN: 'Forbidden',
 } as const;
 
-export type V5ConversionErrCode = typeof V5ConversionErrCode[keyof typeof V5ConversionErrCode];
+export type V5ConversionErrCode =
+  (typeof V5ConversionErrCode)[keyof typeof V5ConversionErrCode];

+ 2 - 1
apps/app/src/interfaces/external-auth-provider.ts

@@ -6,4 +6,5 @@ export const IExternalAuthProviderType = {
   github: 'github',
 } as const;
 
-export type IExternalAuthProviderType = typeof IExternalAuthProviderType[keyof typeof IExternalAuthProviderType]
+export type IExternalAuthProviderType =
+  (typeof IExternalAuthProviderType)[keyof typeof IExternalAuthProviderType];

+ 8 - 6
apps/app/src/interfaces/file-uploader.ts

@@ -7,22 +7,24 @@ export const FileUploadType = {
   local: 'local',
 } as const;
 
-export type FileUploadType = typeof FileUploadType[keyof typeof FileUploadType]
+export type FileUploadType =
+  (typeof FileUploadType)[keyof typeof FileUploadType];
 
 // file upload type strings you can specify in the env variable
 export const FileUploadTypeForEnvVar = {
   ...FileUploadType,
-  mongo:   'mongo',
+  mongo: 'mongo',
   mongodb: 'mongodb',
-  gcp:     'gcp',
+  gcp: 'gcp',
 } as const;
 
-export type FileUploadTypeForEnvVar = typeof FileUploadTypeForEnvVar[keyof typeof FileUploadTypeForEnvVar]
+export type FileUploadTypeForEnvVar =
+  (typeof FileUploadTypeForEnvVar)[keyof typeof FileUploadTypeForEnvVar];
 
 // mapping from env variable to actual module name
 export const EnvToModuleMappings = {
   ...FileUploadTypeForEnvVar,
-  mongo:   'gridfs',
+  mongo: 'gridfs',
   mongodb: 'gridfs',
-  gcp:     'gcs',
+  gcp: 'gcs',
 } as const;

+ 4 - 3
apps/app/src/interfaces/g2g-transfer.ts

@@ -12,12 +12,13 @@ export const G2G_PROGRESS_STATUS = {
 /**
  * G2G transfer progress status
  */
-export type G2GProgressStatus = typeof G2G_PROGRESS_STATUS[keyof typeof G2G_PROGRESS_STATUS];
+export type G2GProgressStatus =
+  (typeof G2G_PROGRESS_STATUS)[keyof typeof G2G_PROGRESS_STATUS];
 
 /**
  * G2G transfer progress
  */
 export interface G2GProgress {
- mongo: G2GProgressStatus;
- attachments: G2GProgressStatus;
+  mongo: G2GProgressStatus;
+  attachments: G2GProgressStatus;
 }

+ 16 - 16
apps/app/src/interfaces/github-api.ts

@@ -1,21 +1,21 @@
 export type SearchResult = {
-  total_count: number,
-  imcomplete_results: boolean,
+  total_count: number;
+  imcomplete_results: boolean;
   items: SearchResultItem[];
-}
+};
 
 export type SearchResultItem = {
-  id: number,
-  name: string,
+  id: number;
+  name: string;
   owner: {
-    login: string,
-    html_url: string,
-    avatar_url: string,
-  },
-  fullName: string,
-  htmlUrl: string,
-  description: string,
-  topics: string[],
-  homepage: string,
-  stargazersCount: number,
-}
+    login: string;
+    html_url: string;
+    avatar_url: string;
+  };
+  fullName: string;
+  htmlUrl: string;
+  description: string;
+  topics: string[];
+  homepage: string;
+  stargazersCount: number;
+};

+ 17 - 17
apps/app/src/interfaces/in-app-notification.ts

@@ -1,6 +1,6 @@
 import type { IUser } from '@growi/core';
 
-import type { SupportedTargetModelType, SupportedActionType } from './activity';
+import type { SupportedActionType, SupportedTargetModelType } from './activity';
 
 export enum InAppNotificationStatuses {
   STATUS_UNOPENED = 'UNOPENED',
@@ -8,22 +8,22 @@ export enum InAppNotificationStatuses {
 }
 
 export interface IInAppNotification<T = unknown> {
-  user: IUser
-  targetModel: SupportedTargetModelType
-  target: T
-  action: SupportedActionType
-  status: InAppNotificationStatuses
-  actionUsers: IUser[]
-  createdAt: Date
-  snapshot: string
-  parsedSnapshot?: any
+  user: IUser;
+  targetModel: SupportedTargetModelType;
+  target: T;
+  action: SupportedActionType;
+  status: InAppNotificationStatuses;
+  actionUsers: IUser[];
+  createdAt: Date;
+  snapshot: string;
+  parsedSnapshot?: any;
 }
 
 /*
-* Note:
-* Need to use mongoose PaginateResult as a type after upgrading mongoose v6.0.0.
-* Until then, use the original "PaginateResult".
-*/
+ * Note:
+ * Need to use mongoose PaginateResult as a type after upgrading mongoose v6.0.0.
+ * Until then, use the original "PaginateResult".
+ */
 export interface PaginateResult<T> {
   docs: T[];
   hasNextPage: boolean;
@@ -39,11 +39,11 @@ export interface PaginateResult<T> {
 }
 
 /*
-* In App Notification Settings
-*/
+ * In App Notification Settings
+ */
 
 export enum subscribeRuleNames {
-  PAGE_CREATE = 'PAGE_CREATE'
+  PAGE_CREATE = 'PAGE_CREATE',
 }
 
 export enum SubscribeRuleDescriptions {

+ 1 - 1
apps/app/src/interfaces/indeterminate-input-elm.ts

@@ -1,3 +1,3 @@
 export interface IndeterminateInputElement extends HTMLInputElement {
-  indeterminate:boolean
+  indeterminate: boolean;
 }

+ 5 - 5
apps/app/src/interfaces/ldap.ts

@@ -1,7 +1,7 @@
 export interface IResTestLdap {
-  err?: any,
-  message: string,
-  status: string,
-  ldapConfiguration?: any,
-  ldapAccountInfo?: any,
+  err?: any;
+  message: string;
+  status: string;
+  ldapConfiguration?: any;
+  ldapAccountInfo?: any;
 }

+ 4 - 5
apps/app/src/interfaces/named-query.ts

@@ -1,13 +1,12 @@
 import type { IUser } from '@growi/core';
 
-
 export enum SearchDelegatorName {
   DEFAULT = 'FullTextSearch',
   PRIVATE_LEGACY_PAGES = 'PrivateLegacyPages',
 }
 export interface INamedQuery {
-  name: string
-  aliasOf?: string
-  delegatorName?: SearchDelegatorName
-  creator?: IUser
+  name: string;
+  aliasOf?: string;
+  delegatorName?: SearchDelegatorName;
+  creator?: IUser;
 }

+ 22 - 6
apps/app/src/interfaces/page-delete-config.ts

@@ -4,34 +4,50 @@ export const PageDeleteConfigValue = {
   AdminOnly: 'adminOnly',
   Inherit: 'inherit',
 } as const;
-export type IPageDeleteConfigValue = typeof PageDeleteConfigValue[keyof typeof PageDeleteConfigValue];
+export type IPageDeleteConfigValue =
+  (typeof PageDeleteConfigValue)[keyof typeof PageDeleteConfigValue];
 
-export type IPageDeleteConfigValueToProcessValidation = Exclude<IPageDeleteConfigValue, typeof PageDeleteConfigValue.Inherit>;
+export type IPageDeleteConfigValueToProcessValidation = Exclude<
+  IPageDeleteConfigValue,
+  typeof PageDeleteConfigValue.Inherit
+>;
 
 export const PageSingleDeleteConfigValue = {
   Anyone: 'anyOne', // must be "anyOne" (not "anyone") for backward compatibility
   AdminAndAuthor: 'adminAndAuthor',
   AdminOnly: 'adminOnly',
 } as const;
-export type PageSingleDeleteConfigValue = Exclude<IPageDeleteConfigValue, typeof PageDeleteConfigValue.Inherit>;
+export type PageSingleDeleteConfigValue = Exclude<
+  IPageDeleteConfigValue,
+  typeof PageDeleteConfigValue.Inherit
+>;
 
 export const PageSingleDeleteCompConfigValue = {
   Anyone: 'anyOne', // must be "anyOne" (not "anyone") for backward compatibility
   AdminAndAuthor: 'adminAndAuthor',
   AdminOnly: 'adminOnly',
 } as const;
-export type PageSingleDeleteCompConfigValue = Exclude<IPageDeleteConfigValue, typeof PageDeleteConfigValue.Inherit>;
+export type PageSingleDeleteCompConfigValue = Exclude<
+  IPageDeleteConfigValue,
+  typeof PageDeleteConfigValue.Inherit
+>;
 
 export const PageRecursiveDeleteConfigValue = {
   AdminAndAuthor: 'adminAndAuthor',
   AdminOnly: 'adminOnly',
   Inherit: 'inherit',
 } as const;
-export type PageRecursiveDeleteConfigValue = Exclude<IPageDeleteConfigValue, typeof PageDeleteConfigValue.Anyone>;
+export type PageRecursiveDeleteConfigValue = Exclude<
+  IPageDeleteConfigValue,
+  typeof PageDeleteConfigValue.Anyone
+>;
 
 export const PageRecursiveDeleteCompConfigValue = {
   AdminAndAuthor: 'adminAndAuthor',
   AdminOnly: 'adminOnly',
   Inherit: 'inherit',
 } as const;
-export type PageRecursiveDeleteCompConfigValue = Exclude<IPageDeleteConfigValue, typeof PageDeleteConfigValue.Anyone>;
+export type PageRecursiveDeleteCompConfigValue = Exclude<
+  IPageDeleteConfigValue,
+  typeof PageDeleteConfigValue.Anyone
+>;

+ 17 - 14
apps/app/src/interfaces/page-grant.ts

@@ -1,29 +1,32 @@
-import type { PageGrant, GroupType } from '@growi/core';
+import type { GroupType, PageGrant } from '@growi/core';
 
 import type { ExternalUserGroupDocument } from '~/features/external-user-group/server/models/external-user-group';
 import type { UserGroupDocument } from '~/server/models/user-group';
 
 import type { IPageGrantData } from './page';
 
-
 type UserGroupType = typeof GroupType.userGroup;
 type ExternalUserGroupType = typeof GroupType.externalUserGroup;
-export type PopulatedGrantedGroup = {type: UserGroupType, item: UserGroupDocument } | {type: ExternalUserGroupType, item: ExternalUserGroupDocument }
+export type PopulatedGrantedGroup =
+  | { type: UserGroupType; item: UserGroupDocument }
+  | { type: ExternalUserGroupType; item: ExternalUserGroupDocument };
 export type IDataApplicableGroup = {
-  applicableGroups?: PopulatedGrantedGroup[]
-}
+  applicableGroups?: PopulatedGrantedGroup[];
+};
 
 export type IDataApplicableGrant = null | IDataApplicableGroup;
-export type IRecordApplicableGrant = Partial<Record<PageGrant, IDataApplicableGrant>>
+export type IRecordApplicableGrant = Partial<
+  Record<PageGrant, IDataApplicableGrant>
+>;
 export type IResApplicableGrant = {
-  data?: IRecordApplicableGrant
-}
+  data?: IRecordApplicableGrant;
+};
 export type IResGrantData = {
-  isForbidden: boolean,
-  currentPageGrant: IPageGrantData,
-  parentPageGrant?: IPageGrantData
-}
+  isForbidden: boolean;
+  currentPageGrant: IPageGrantData;
+  parentPageGrant?: IPageGrantData;
+};
 export type IResCurrentGrantData = {
-  isGrantNormalized: boolean,
-  grantData: IResGrantData
+  isGrantNormalized: boolean;
+  grantData: IResGrantData;
 };

+ 5 - 7
apps/app/src/interfaces/page-listing-results.ts

@@ -2,23 +2,21 @@ import type { IPageHasId } from '@growi/core';
 
 import type { IPageForItem } from './page';
 
-
 type ParentPath = string;
 
 export interface RootPageResult {
-  rootPage: IPageHasId
+  rootPage: IPageHasId;
 }
 
 export interface AncestorsChildrenResult {
-  ancestorsChildren: Record<ParentPath, Partial<IPageForItem>[]>
+  ancestorsChildren: Record<ParentPath, Partial<IPageForItem>[]>;
 }
 
-
 export interface ChildrenResult {
-  children: Partial<IPageForItem>[]
+  children: Partial<IPageForItem>[];
 }
 
 export interface V5MigrationStatus {
-  isV5Compatible : boolean,
-  migratablePagesCount: number
+  isV5Compatible: boolean;
+  migratablePagesCount: number;
 }

+ 10 - 8
apps/app/src/interfaces/page-operation.ts

@@ -8,21 +8,23 @@ export const PageActionType = {
   Revert: 'Revert',
   NormalizeParent: 'NormalizeParent',
 } as const;
-export type PageActionType = typeof PageActionType[keyof typeof PageActionType];
+export type PageActionType =
+  (typeof PageActionType)[keyof typeof PageActionType];
 
 export const PageActionStage = {
   Main: 'Main',
   Sub: 'Sub',
 } as const;
-export type PageActionStage = typeof PageActionStage[keyof typeof PageActionStage];
+export type PageActionStage =
+  (typeof PageActionStage)[keyof typeof PageActionStage];
 
 export type IPageOperationProcessData = {
   [key in PageActionType]?: {
-    [PageActionStage.Main]?: { isProcessable: boolean },
-    [PageActionStage.Sub]?: { isProcessable: boolean },
-  }
-}
+    [PageActionStage.Main]?: { isProcessable: boolean };
+    [PageActionStage.Sub]?: { isProcessable: boolean };
+  };
+};
 
 export type IPageOperationProcessInfo = {
-  [pageId: string]: IPageOperationProcessData,
-}
+  [pageId: string]: IPageOperationProcessData;
+};

+ 4 - 4
apps/app/src/interfaces/page-tag-relation.ts

@@ -1,7 +1,7 @@
 import type { IPage, ITag } from '@growi/core';
 
 export type IPageTagRelation = {
-  relatedPage: IPage,
-  relatedTag: ITag,
-  isPageTrashed: boolean,
-}
+  relatedPage: IPage;
+  relatedTag: ITag;
+  isPageTrashed: boolean;
+};

+ 53 - 43
apps/app/src/interfaces/page.ts

@@ -1,5 +1,10 @@
 import type {
-  GroupType, IGrantedGroup, IPageHasId, Nullable, PageGrant, Origin,
+  GroupType,
+  IGrantedGroup,
+  IPageHasId,
+  Nullable,
+  Origin,
+  PageGrant,
 } from '@growi/core';
 
 import type { ExternalGroupProviderType } from '~/features/external-user-group/interfaces/external-user-group';
@@ -7,77 +12,82 @@ import type { ExternalGroupProviderType } from '~/features/external-user-group/i
 import type { IPageOperationProcessData } from './page-operation';
 
 export {
-  isIPageInfoForEntity, isIPageInfoForOperation, isIPageInfoForListing,
+  isIPageInfoForEntity,
+  isIPageInfoForListing,
+  isIPageInfoForOperation,
 } from '@growi/core';
 
-export type IPageForItem = Partial<IPageHasId & {processData?: IPageOperationProcessData}>;
+export type IPageForItem = Partial<
+  IPageHasId & { processData?: IPageOperationProcessData }
+>;
 
 export const UserGroupPageGrantStatus = {
   isGranted: 'isGranted',
   notGranted: 'notGranted',
   cannotGrant: 'cannotGrant',
 };
-type UserGroupPageGrantStatus = typeof UserGroupPageGrantStatus[keyof typeof UserGroupPageGrantStatus];
+type UserGroupPageGrantStatus =
+  (typeof UserGroupPageGrantStatus)[keyof typeof UserGroupPageGrantStatus];
 export type UserRelatedGroupsData = {
-  id: string,
-  name: string,
-  type: GroupType,
-  provider?: ExternalGroupProviderType,
-  status: UserGroupPageGrantStatus,
-}
+  id: string;
+  name: string;
+  type: GroupType;
+  provider?: ExternalGroupProviderType;
+  status: UserGroupPageGrantStatus;
+};
 export type GroupGrantData = {
-  userRelatedGroups: UserRelatedGroupsData[],
+  userRelatedGroups: UserRelatedGroupsData[];
   nonUserRelatedGrantedGroups: {
-    id: string,
-    name: string,
-    type: GroupType,
-    provider?: ExternalGroupProviderType,
-  }[],
-}
+    id: string;
+    name: string;
+    type: GroupType;
+    provider?: ExternalGroupProviderType;
+  }[];
+};
 // current grant data of page
 export type IPageGrantData = {
-  grant: PageGrant,
-  groupGrantData?: GroupGrantData,
-}
+  grant: PageGrant;
+  groupGrantData?: GroupGrantData;
+};
 // grant selected by user which is not yet applied
 export type IPageSelectedGrant = {
-  grant: PageGrant,
-  userRelatedGrantedGroups?: IGrantedGroup[]
-}
+  grant: PageGrant;
+  userRelatedGrantedGroups?: IGrantedGroup[];
+};
 
 export type IDeleteSinglePageApiv1Result = {
-  ok: boolean
-  path: string,
-  isRecursively: Nullable<true>,
-  isCompletely: Nullable<true>,
+  ok: boolean;
+  path: string;
+  isRecursively: Nullable<true>;
+  isCompletely: Nullable<true>;
 };
 
 export type IDeleteManyPageApiv3Result = {
-  paths: string[],
-  isRecursively: Nullable<true>,
-  isCompletely: Nullable<true>,
+  paths: string[];
+  isRecursively: Nullable<true>;
+  isCompletely: Nullable<true>;
 };
 
 export type IOptionsForUpdate = {
-  origin?: Origin
-  wip?: boolean,
-  grant?: PageGrant,
-  userRelatedGrantUserGroupIds?: IGrantedGroup[],
+  origin?: Origin;
+  wip?: boolean;
+  grant?: PageGrant;
+  userRelatedGrantUserGroupIds?: IGrantedGroup[];
   // isSyncRevisionToHackmd?: boolean,
-  overwriteScopesOfDescendants?: boolean,
+  overwriteScopesOfDescendants?: boolean;
 };
 
 export type IOptionsForCreate = {
-  grant?: PageGrant,
-  grantUserGroupIds?: IGrantedGroup[],
-  onlyInheritUserRelatedGrantedGroups?: boolean,
-  overwriteScopesOfDescendants?: boolean,
+  grant?: PageGrant;
+  grantUserGroupIds?: IGrantedGroup[];
+  onlyInheritUserRelatedGrantedGroups?: boolean;
+  overwriteScopesOfDescendants?: boolean;
 
-  origin?: Origin
-  wip?: boolean,
+  origin?: Origin;
+  wip?: boolean;
 };
 
 export type IPagePathWithDescendantCount = {
-  path: string,
-  descendantCount: number,
+  path: string;
+  descendantCount: number;
 };

+ 4 - 4
apps/app/src/interfaces/paging-result.ts

@@ -1,5 +1,5 @@
 export type IPagingResult<T> = {
-  items: T[],
-  totalCount: number,
-  limit: number,
-}
+  items: T[];
+  totalCount: number;
+  limit: number;
+};

+ 2 - 1
apps/app/src/interfaces/registration-mode.ts

@@ -4,4 +4,5 @@ export const RegistrationMode = {
   CLOSED: 'Closed',
 } as const;
 
-export type RegistrationMode = typeof RegistrationMode[keyof typeof RegistrationMode];
+export type RegistrationMode =
+  (typeof RegistrationMode)[keyof typeof RegistrationMode];

+ 13 - 8
apps/app/src/interfaces/renderer-options.ts

@@ -1,17 +1,22 @@
 import type { ComponentType } from 'react';
 
-import type { Options as ReactMarkdownOptions, Components } from 'react-markdown';
+import type {
+  Components,
+  Options as ReactMarkdownOptions,
+} from 'react-markdown';
 import type { PluggableList } from 'unified';
 
-export type RendererOptions = Omit<ReactMarkdownOptions, 'remarkPlugins' | 'rehypePlugins' | 'components' | 'children'> & {
-  remarkPlugins: PluggableList,
-  rehypePlugins: PluggableList,
+export type RendererOptions = Omit<
+  ReactMarkdownOptions,
+  'remarkPlugins' | 'rehypePlugins' | 'components' | 'children'
+> & {
+  remarkPlugins: PluggableList;
+  rehypePlugins: PluggableList;
   components?:
     | Partial<
-        Components
-        & {
-          [elem: string]: ComponentType<any>,
+        Components & {
+          [elem: string]: ComponentType<any>;
         }
       >
-    | undefined
+    | undefined;
 };

+ 54 - 54
apps/app/src/interfaces/res/admin/app-settings.ts

@@ -1,66 +1,66 @@
 export type IResAppSettings = {
-  title: string,
-  confidential: string,
-  globalLang: string,
-  isEmailPublishedForNewUser: boolean,
-  fileUpload: string,
-  isV5Compatible: boolean,
-  siteUrl: string,
-  envSiteUrl: string,
-  isMailerSetup: boolean,
-  fromAddress: string,
+  title: string;
+  confidential: string;
+  globalLang: string;
+  isEmailPublishedForNewUser: boolean;
+  fileUpload: string;
+  isV5Compatible: boolean;
+  siteUrl: string;
+  envSiteUrl: string;
+  isMailerSetup: boolean;
+  fromAddress: string;
 
-  transmissionMethod: string,
-  smtpHost: string,
-  smtpPort: string | number, // TODO: check
-  smtpUser: string,
-  smtpPassword: string,
-  sesAccessKeyId: string,
-  sesSecretAccessKey: string,
+  transmissionMethod: string;
+  smtpHost: string;
+  smtpPort: string | number; // TODO: check
+  smtpUser: string;
+  smtpPassword: string;
+  sesAccessKeyId: string;
+  sesSecretAccessKey: string;
 
-  fileUploadType: string,
-  envFileUploadType: string,
-  useOnlyEnvVarForFileUploadType: boolean,
+  fileUploadType: string;
+  envFileUploadType: string;
+  useOnlyEnvVarForFileUploadType: boolean;
 
-  s3Region: string,
-  s3CustomEndpoint: string,
-  s3Bucket:string,
-  s3AccessKeyId: string,
-  s3SecretAccessKey: string,
-  s3ReferenceFileWithRelayMode: string,
+  s3Region: string;
+  s3CustomEndpoint: string;
+  s3Bucket: string;
+  s3AccessKeyId: string;
+  s3SecretAccessKey: string;
+  s3ReferenceFileWithRelayMode: string;
 
-  gcsUseOnlyEnvVars: boolean,
-  gcsApiKeyJsonPath: string,
-  gcsBucket: string,
-  gcsUploadNamespace: string,
-  gcsReferenceFileWithRelayMode: string,
+  gcsUseOnlyEnvVars: boolean;
+  gcsApiKeyJsonPath: string;
+  gcsBucket: string;
+  gcsUploadNamespace: string;
+  gcsReferenceFileWithRelayMode: string;
 
-  envGcsApiKeyJsonPath: string,
-  envGcsBucket: string,
-  envGcsUploadNamespace: string,
+  envGcsApiKeyJsonPath: string;
+  envGcsBucket: string;
+  envGcsUploadNamespace: string;
 
-  azureUseOnlyEnvVars: boolean,
-  azureTenantId: string,
-  azureClientId: string,
-  azureClientSecret: string,
-  azureStorageAccountName: string,
-  azureStorageContainerName: string,
-  azureReferenceFileWithRelayMode: string,
+  azureUseOnlyEnvVars: boolean;
+  azureTenantId: string;
+  azureClientId: string;
+  azureClientSecret: string;
+  azureStorageAccountName: string;
+  azureStorageContainerName: string;
+  azureReferenceFileWithRelayMode: string;
 
-  envAzureTenantId: string,
-  envAzureClientId: string,
-  envAzureClientSecret: string,
-  envAzureStorageAccountName: string,
-  envAzureStorageContainerName: string,
+  envAzureTenantId: string;
+  envAzureClientId: string;
+  envAzureClientSecret: string;
+  envAzureStorageAccountName: string;
+  envAzureStorageContainerName: string;
 
-  isEnabledPlugins: boolean,
+  isEnabledPlugins: boolean;
 
-  isAppSiteUrlHashed: boolean,
+  isAppSiteUrlHashed: boolean;
 
-  isMaintenanceMode: boolean,
+  isMaintenanceMode: boolean;
 
-  isBulkExportPagesEnabled: boolean,
-  envIsBulkExportPagesEnabled: boolean,
-  bulkExportDownloadExpirationSeconds: number,
-  useOnlyEnvVarsForIsBulkExportPagesEnabled: boolean,
-}
+  isBulkExportPagesEnabled: boolean;
+  envIsBulkExportPagesEnabled: boolean;
+  bulkExportDownloadExpirationSeconds: number;
+  useOnlyEnvVarsForIsBulkExportPagesEnabled: boolean;
+};

+ 18 - 18
apps/app/src/interfaces/search.ts

@@ -1,12 +1,12 @@
 import type { IDataWithMeta, IPageHasId } from '@growi/core';
 
 export type IPageSearchMeta = {
-  bookmarkCount?: number,
+  bookmarkCount?: number;
   elasticSearchResult?: {
     snippet?: string | null;
     highlightedPath?: string | null;
   };
-}
+};
 
 // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types
 export const isIPageSearchMeta = (meta: any): meta is IPageSearchMeta => {
@@ -15,38 +15,38 @@ export const isIPageSearchMeta = (meta: any): meta is IPageSearchMeta => {
 
 export type ISearchResultMeta = {
   meta: {
-    took?: number
-    total: number
-    hitsCount: number
-  },
-}
+    took?: number;
+    total: number;
+    hitsCount: number;
+  };
+};
 
 export type ISearchResultData = {
-  _id: string
-  _score: number
-  _source: any
-  _highlight: any
-}
+  _id: string;
+  _score: number;
+  _source: any;
+  _highlight: any;
+};
 
 export type ISearchResult<T> = ISearchResultMeta & {
-  data: T[],
-}
+  data: T[];
+};
 
 export type IPageWithSearchMeta = IDataWithMeta<IPageHasId, IPageSearchMeta>;
 
 export type IFormattedSearchResult = ISearchResultMeta & {
-  data: IPageWithSearchMeta[],
-}
+  data: IPageWithSearchMeta[];
+};
 
 export const SORT_AXIS = {
   RELATION_SCORE: 'relationScore',
   CREATED_AT: 'createdAt',
   UPDATED_AT: 'updatedAt',
 } as const;
-export type SORT_AXIS = typeof SORT_AXIS[keyof typeof SORT_AXIS];
+export type SORT_AXIS = (typeof SORT_AXIS)[keyof typeof SORT_AXIS];
 
 export const SORT_ORDER = {
   DESC: 'desc',
   ASC: 'asc',
 } as const;
-export type SORT_ORDER = typeof SORT_ORDER[keyof typeof SORT_ORDER];
+export type SORT_ORDER = (typeof SORT_ORDER)[keyof typeof SORT_ORDER];

+ 7 - 6
apps/app/src/interfaces/services/rehype-sanitize.ts

@@ -7,11 +7,12 @@ export const RehypeSanitizeType = {
   CUSTOM: 'Custom',
 } as const;
 
-export type RehypeSanitizeType = typeof RehypeSanitizeType[keyof typeof RehypeSanitizeType];
+export type RehypeSanitizeType =
+  (typeof RehypeSanitizeType)[keyof typeof RehypeSanitizeType];
 
 export type RehypeSanitizeConfiguration = {
-  isEnabledXssPrevention: boolean,
-  sanitizeType: RehypeSanitizeType,
-  customTagWhitelist?: Array<string> | null,
-  customAttrWhitelist?: Attributes | null,
-}
+  isEnabledXssPrevention: boolean;
+  sanitizeType: RehypeSanitizeType;
+  customTagWhitelist?: Array<string> | null;
+  customAttrWhitelist?: Attributes | null;
+};

+ 10 - 10
apps/app/src/interfaces/services/renderer.ts

@@ -1,18 +1,18 @@
 import type { RehypeSanitizeConfiguration } from './rehype-sanitize';
 
 export type RendererConfig = {
-  isSharedPage?: boolean
-  isEnabledLinebreaks: boolean,
-  isEnabledLinebreaksInComments: boolean,
-  adminPreferredIndentSize: number,
-  isIndentSizeForced: boolean,
-  highlightJsStyleBorder: boolean,
-  isEnabledMarp: boolean,
+  isSharedPage?: boolean;
+  isEnabledLinebreaks: boolean;
+  isEnabledLinebreaksInComments: boolean;
+  adminPreferredIndentSize: number;
+  isIndentSizeForced: boolean;
+  highlightJsStyleBorder: boolean;
+  isEnabledMarp: boolean;
 
-  drawioUri: string,
-  plantumlUri: string,
+  drawioUri: string;
+  plantumlUri: string;
 } & RehypeSanitizeConfiguration;
 
 export type RendererConfigExt = RendererConfig & {
-  isDarkMode?: boolean,
+  isDarkMode?: boolean;
 };

+ 6 - 6
apps/app/src/interfaces/share-link.ts

@@ -1,15 +1,15 @@
-import type { IPageHasId, HasObjectId } from '@growi/core';
+import type { HasObjectId, IPageHasId } from '@growi/core';
 
 // Todo: specify more detailed Type
 export type IResShareLinkList = {
-  shareLinksResult: any[],
+  shareLinksResult: any[];
 };
 
 export type IShareLink = {
-  relatedPage: IPageHasId,
-  createdAt: Date,
-  expiredAt?: Date,
-  description: string,
+  relatedPage: IPageHasId;
+  createdAt: Date;
+  expiredAt?: Date;
+  description: string;
 };
 
 export type IShareLinkHasId = IShareLink & HasObjectId;

+ 2 - 3
apps/app/src/interfaces/sidebar-config.ts

@@ -1,5 +1,4 @@
-
 export interface ISidebarConfig {
-  isSidebarCollapsedMode: boolean,
-  isSidebarClosedAtDockMode?: boolean,
+  isSidebarCollapsedMode: boolean;
+  isSidebarClosedAtDockMode?: boolean;
 }

+ 18 - 18
apps/app/src/interfaces/tag.ts

@@ -1,31 +1,31 @@
-import type { ITag, IPageHasId } from '@growi/core';
+import type { IPageHasId, ITag } from '@growi/core';
 
-export type IDataTagCount = ITag & {count: number}
+export type IDataTagCount = ITag & { count: number };
 
 export type IPageTagsInfo = {
-  tags : string[],
-}
+  tags: string[];
+};
 
 export type IListTagNamesByPage = string[];
 
 export type IResTagsUpdateApiv1 = {
-  ok: boolean,
-  savedPage: IPageHasId,
-  tags: string[],
-}
+  ok: boolean;
+  savedPage: IPageHasId;
+  tags: string[];
+};
 
 export type IResTagsSearchApiv1 = {
-  ok: boolean,
-  tags: string[],
-}
+  ok: boolean;
+  tags: string[];
+};
 
 export type IResGetPageTags = {
-  ok: boolean,
-  tags: string[],
-}
+  ok: boolean;
+  tags: string[];
+};
 
 export type IResTagsListApiv1 = {
-  ok: boolean,
-  data: IDataTagCount[],
-  totalCount: number,
-}
+  ok: boolean;
+  data: IDataTagCount[];
+  totalCount: number;
+};

+ 1 - 1
apps/app/src/interfaces/theme.ts

@@ -1,4 +1,4 @@
 export const PrismThemes = {
   OneLight: 'one-light',
 } as const;
-export type PrismThemes = typeof PrismThemes[keyof typeof PrismThemes];
+export type PrismThemes = (typeof PrismThemes)[keyof typeof PrismThemes];

+ 4 - 4
apps/app/src/interfaces/transfer-key.ts

@@ -1,6 +1,6 @@
 export interface ITransferKey<ID = string> {
-  _id: ID
-  expireAt: Date
-  keyString: string,
-  key: string,
+  _id: ID;
+  expireAt: Date;
+  keyString: string;
+  key: string;
 }

+ 20 - 14
apps/app/src/interfaces/ui.ts

@@ -1,16 +1,14 @@
-import type { JSX } from 'react';
-
 import type { Nullable } from '@growi/core';
+import type { JSX } from 'react';
 
 import type { IPageForItem } from '~/interfaces/page';
 
-
 export const SidebarMode = {
   DRAWER: 'drawer',
   COLLAPSED: 'collapsed',
   DOCK: 'dock',
 } as const;
-export type SidebarMode = typeof SidebarMode[keyof typeof SidebarMode];
+export type SidebarMode = (typeof SidebarMode)[keyof typeof SidebarMode];
 
 export const SidebarContentsType = {
   CUSTOM: 'custom',
@@ -22,22 +20,30 @@ export const SidebarContentsType = {
   AI_ASSISTANT: 'aiAssistant',
 } as const;
 export const AllSidebarContentsType = Object.values(SidebarContentsType);
-export type SidebarContentsType = typeof SidebarContentsType[keyof typeof SidebarContentsType];
-
+export type SidebarContentsType =
+  (typeof SidebarContentsType)[keyof typeof SidebarContentsType];
 
 export type ICustomTabContent = {
-  Content?: () => JSX.Element,
-  i18n?: string,
-  Icon?: () => JSX.Element,
-  isLinkEnabled?: boolean | ((content: ICustomTabContent) => boolean),
+  Content?: () => JSX.Element;
+  i18n?: string;
+  Icon?: () => JSX.Element;
+  isLinkEnabled?: boolean | ((content: ICustomTabContent) => boolean);
 };
 
 export type ICustomNavTabMappings = { [key: string]: ICustomTabContent };
 
-
-export type OnDeletedFunction = (idOrPaths: string | string[], isRecursively: Nullable<true>, isCompletely: Nullable<true>) => void;
+export type OnDeletedFunction = (
+  idOrPaths: string | string[],
+  isRecursively: Nullable<true>,
+  isCompletely: Nullable<true>,
+) => void;
 export type OnRenamedFunction = (path: string) => void;
 export type OnDuplicatedFunction = (fromPath: string, toPath: string) => void;
 export type OnPutBackedFunction = (path: string) => void;
-export type onDeletedBookmarkFolderFunction = (bookmarkFolderId: string) => void;
-export type OnSelectedFunction = (page: IPageForItem, isIncludeSubPage: boolean) => void;
+export type onDeletedBookmarkFolderFunction = (
+  bookmarkFolderId: string,
+) => void;
+export type OnSelectedFunction = (
+  page: IPageForItem,
+  isIncludeSubPage: boolean,
+) => void;

+ 36 - 25
apps/app/src/interfaces/user-group-response.ts

@@ -1,49 +1,60 @@
 import type {
-  HasObjectId, Ref,
+  HasObjectId,
   IPageHasId,
-  IUserGroup, IUserGroupHasId, IUserGroupRelationHasId, IUserHasId,
+  IUserGroup,
+  IUserGroupHasId,
+  IUserGroupRelationHasId,
+  IUserHasId,
+  Ref,
 } from '@growi/core';
 
-
 export type UserGroupResult = {
-  userGroup: IUserGroupHasId,
-}
+  userGroup: IUserGroupHasId;
+};
 
-export type UserGroupListResult<TUSERGROUP extends IUserGroupHasId = IUserGroupHasId> = {
-  userGroups: TUSERGROUP[],
+export type UserGroupListResult<
+  TUSERGROUP extends IUserGroupHasId = IUserGroupHasId,
+> = {
+  userGroups: TUSERGROUP[];
 };
 
-export type ChildUserGroupListResult<TUSERGROUP extends IUserGroupHasId = IUserGroupHasId> = {
-  childUserGroups: TUSERGROUP[],
-  grandChildUserGroups: TUSERGROUP[],
+export type ChildUserGroupListResult<
+  TUSERGROUP extends IUserGroupHasId = IUserGroupHasId,
+> = {
+  childUserGroups: TUSERGROUP[];
+  grandChildUserGroups: TUSERGROUP[];
 };
 
-export type UserGroupRelationListResult<TUSERGROUPRELATION extends IUserGroupRelationHasId = IUserGroupRelationHasId> = {
-  userGroupRelations: TUSERGROUPRELATION[],
+export type UserGroupRelationListResult<
+  TUSERGROUPRELATION extends IUserGroupRelationHasId = IUserGroupRelationHasId,
+> = {
+  userGroupRelations: TUSERGROUPRELATION[];
 };
 
-export type IUserGroupRelationHasIdPopulatedUser<TUSERGROUP extends IUserGroup = IUserGroup> = {
-  relatedGroup: Ref<TUSERGROUP>,
-  relatedUser: IUserHasId,
-  createdAt: Date,
+export type IUserGroupRelationHasIdPopulatedUser<
+  TUSERGROUP extends IUserGroup = IUserGroup,
+> = {
+  relatedGroup: Ref<TUSERGROUP>;
+  relatedUser: IUserHasId;
+  createdAt: Date;
 } & HasObjectId;
 
 export type UserGroupRelationsResult = {
-  userGroupRelations: IUserGroupRelationHasIdPopulatedUser[],
+  userGroupRelations: IUserGroupRelationHasIdPopulatedUser[];
 };
 
 export type UserGroupPagesResult = {
-  pages: IPageHasId[],
-}
+  pages: IPageHasId[];
+};
 
 export type SelectableParentUserGroupsResult = {
-  selectableParentGroups: IUserGroupHasId[],
-}
+  selectableParentGroups: IUserGroupHasId[];
+};
 
 export type SelectableUserChildGroupsResult = {
-  selectableChildGroups: IUserGroupHasId[],
-}
+  selectableChildGroups: IUserGroupHasId[];
+};
 
 export type AncestorUserGroupsResult = {
-  ancestorUserGroups: IUserGroupHasId[],
-}
+  ancestorUserGroups: IUserGroupHasId[];
+};

+ 8 - 3
apps/app/src/interfaces/user-group.ts

@@ -4,7 +4,12 @@ export const SearchTypes = {
   BACKWORD: 'backword',
 } as const;
 
-export type SearchType = typeof SearchTypes[keyof typeof SearchTypes];
+export type SearchType = (typeof SearchTypes)[keyof typeof SearchTypes];
 
-export const PageActionOnGroupDelete = { publicize: 'publicize', delete: 'delete', transfer: 'transfer' } as const;
-export type PageActionOnGroupDelete = typeof PageActionOnGroupDelete[keyof typeof PageActionOnGroupDelete];
+export const PageActionOnGroupDelete = {
+  publicize: 'publicize',
+  delete: 'delete',
+  transfer: 'transfer',
+} as const;
+export type PageActionOnGroupDelete =
+  (typeof PageActionOnGroupDelete)[keyof typeof PageActionOnGroupDelete];

+ 1 - 2
apps/app/src/interfaces/user-trigger-notification.ts

@@ -1,3 +1,2 @@
-
 type SlackChannel = string;
-export type SlackChannels = {[updatePost: string]: SlackChannel[]}
+export type SlackChannels = { [updatePost: string]: SlackChannel[] };

+ 3 - 3
apps/app/src/interfaces/user-ui-settings.ts

@@ -1,7 +1,7 @@
 import type { SidebarContentsType } from './ui';
 
 export interface IUserUISettings {
-  currentSidebarContents: SidebarContentsType,
-  currentProductNavWidth: number,
-  preferCollapsedModeByUser: boolean,
+  currentSidebarContents: SidebarContentsType;
+  currentProductNavWidth: number;
+  preferCollapsedModeByUser: boolean;
 }

+ 9 - 7
apps/app/src/interfaces/websocket.ts

@@ -11,10 +11,10 @@ const generateGroupSyncEvents = () => {
   });
   return events as {
     [key in ExternalGroupProviderType]: {
-      GroupSyncProgress: string,
-      GroupSyncCompleted: string,
-      GroupSyncFailed: string,
-    }
+      GroupSyncProgress: string;
+      GroupSyncCompleted: string;
+      GroupSyncFailed: string;
+    };
   };
 };
 
@@ -51,9 +51,11 @@ export const SocketEventName = {
 
   // Yjs
   YjsAwarenessStateSizeUpdated: 'yjs:awareness-state-size-update',
-  YjsHasYdocsNewerThanLatestRevisionUpdated: 'yjs:has-ydocs-newer-than-latest-revision-update',
+  YjsHasYdocsNewerThanLatestRevisionUpdated:
+    'yjs:has-ydocs-newer-than-latest-revision-update',
 } as const;
-export type SocketEventName = typeof SocketEventName[keyof typeof SocketEventName];
+export type SocketEventName =
+  (typeof SocketEventName)[keyof typeof SocketEventName];
 
 type PageId = string;
 type DescendantCount = number;
@@ -68,4 +70,4 @@ export type PMMigratingData = { count: number };
 export type PMErrorCountData = { skip: number };
 export type PMEndedData = { isSucceeded: boolean };
 
-export type PageMigrationErrorData = { paths: string[] }
+export type PageMigrationErrorData = { paths: string[] };

+ 6 - 6
apps/app/src/interfaces/yjs.ts

@@ -1,9 +1,9 @@
 export type CurrentPageYjsData = {
-  hasYdocsNewerThanLatestRevision?: boolean,
-  awarenessStateSize?: number,
-}
+  hasYdocsNewerThanLatestRevision?: boolean;
+  awarenessStateSize?: number;
+};
 
 export type SyncLatestRevisionBody = {
-  synced: boolean,
-  isYjsDataBroken?: boolean,
-}
+  synced: boolean;
+  isYjsDataBroken?: boolean;
+};

+ 0 - 1
biome.json

@@ -30,7 +30,6 @@
       "!apps/app/src/features/growi-plugin/**",
       "!apps/app/src/features/openai/**",
       "!apps/app/src/features/rate-limiter/**",
-      "!apps/app/src/interfaces/**",
       "!apps/app/src/models/**",
       "!apps/app/src/pages/**",
       "!apps/app/src/server/**",