diff --git a/.eslintrc.cjs b/.eslintrc.cjs index 8b939cbbed7a..0dbeac52e9bc 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.cjs @@ -84,8 +84,13 @@ module.exports = { ignoreRestSiblings: true, }, ], - '@typescript-eslint/no-floating-promises': 'error', '@typescript-eslint/no-non-null-asserted-nullish-coalescing': 'error', + 'no-return-await': 'off', + '@typescript-eslint/return-await': 'error', + 'require-await': 'off', + '@typescript-eslint/require-await': 'error', + '@typescript-eslint/await-thenable': 'error', + '@typescript-eslint/no-floating-promises': 'error', '@typescript-eslint/no-misused-promises': 'error', '@typescript-eslint/no-namespace': [ 'error', diff --git a/packages/blocks/src/__tests__/database/database.unit.spec.ts b/packages/blocks/src/__tests__/database/database.unit.spec.ts index 873be93a7566..59619624273a 100644 --- a/packages/blocks/src/__tests__/database/database.unit.spec.ts +++ b/packages/blocks/src/__tests__/database/database.unit.spec.ts @@ -30,11 +30,11 @@ function createTestOptions() { return { id: 'test-workspace', idGenerator, schema }; } -async function createTestPage(pageId = 'page0') { +function createTestPage(pageId = 'page0') { const options = createTestOptions(); const workspace = new Workspace(options); const page = workspace.createPage({ id: pageId }); - await page.load(); + page.load(); return page; } @@ -57,10 +57,10 @@ describe('DatabaseManager', () => { { id: '3', value: 'WIP', color: 'var(--affine-tag-blue)' }, ]; - beforeEach(async () => { + beforeEach(() => { vi.useFakeTimers({ toFake: ['requestIdleCallback'] }); - page = await createTestPage(); + page = createTestPage(); pageBlockId = page.addBlock('affine:page', { title: new page.Text('database test'), diff --git a/packages/blocks/src/_common/adapters/html.ts b/packages/blocks/src/_common/adapters/html.ts index de162a8e003c..da83fb895104 100644 --- a/packages/blocks/src/_common/adapters/html.ts +++ b/packages/blocks/src/_common/adapters/html.ts @@ -650,7 +650,7 @@ export class HtmlAdapter extends BaseAdapter { } } }); - walker.setLeave(async (o, context) => { + walker.setLeave((o, context) => { switch (o.node.flavour) { case 'affine:page': { context.closeNode().closeNode().closeNode(); @@ -991,7 +991,7 @@ export class HtmlAdapter extends BaseAdapter { } } }); - walker.setLeave(async (o, context) => { + walker.setLeave((o, context) => { if (o.node.type !== 'element') { return; } diff --git a/packages/blocks/src/_common/adapters/markdown.ts b/packages/blocks/src/_common/adapters/markdown.ts index 92b88f8fc2f7..c39d53cd8592 100644 --- a/packages/blocks/src/_common/adapters/markdown.ts +++ b/packages/blocks/src/_common/adapters/markdown.ts @@ -627,7 +627,7 @@ export class MarkdownAdapter extends BaseAdapter { } } }); - walker.setLeave(async (o, context) => { + walker.setLeave((o, context) => { const currentTNode = context.currentNode(); const previousTNode = context.previousNode(); switch (o.node.flavour) { @@ -992,7 +992,7 @@ export class MarkdownAdapter extends BaseAdapter { } } }); - walker.setLeave(async (o, context) => { + walker.setLeave((o, context) => { switch (o.node.type) { case 'listItem': { context.closeNode(); diff --git a/packages/blocks/src/_common/adapters/mix-text.ts b/packages/blocks/src/_common/adapters/mix-text.ts index 0b8ae2b03e3a..88bf8a84e368 100644 --- a/packages/blocks/src/_common/adapters/mix-text.ts +++ b/packages/blocks/src/_common/adapters/mix-text.ts @@ -85,9 +85,7 @@ export class MixTextAdapter extends BaseAdapter { }; } - async toPageSnapshot( - payload: ToPageSnapshotPayload - ): Promise { + toPageSnapshot(payload: ToPageSnapshotPayload): PageSnapshot { payload.file = payload.file.replaceAll('\r', ''); return { type: 'page', @@ -157,9 +155,7 @@ export class MixTextAdapter extends BaseAdapter { }; } - async toBlockSnapshot( - payload: ToBlockSnapshotPayload - ): Promise { + toBlockSnapshot(payload: ToBlockSnapshotPayload): BlockSnapshot { payload.file = payload.file.replaceAll('\r', ''); return { type: 'block', @@ -222,7 +218,7 @@ export class MixTextAdapter extends BaseAdapter { (node): node is BlockSnapshot => BlockSnapshotSchema.safeParse(node).success ); - walker.setEnter(async o => { + walker.setEnter(o => { const text = (o.node.props.text ?? { delta: [] }) as { delta: DeltaInsert[]; }; diff --git a/packages/blocks/src/_common/adapters/notion-html.ts b/packages/blocks/src/_common/adapters/notion-html.ts index 92364a90694f..0ae4137568db 100644 --- a/packages/blocks/src/_common/adapters/notion-html.ts +++ b/packages/blocks/src/_common/adapters/notion-html.ts @@ -789,7 +789,7 @@ export class NotionHtmlAdapter extends BaseAdapter { } } }); - walker.setLeave(async (o, context) => { + walker.setLeave((o, context) => { if (o.node.type !== 'element') { return; } diff --git a/packages/blocks/src/_common/adapters/plain-text.ts b/packages/blocks/src/_common/adapters/plain-text.ts index b064ef016ecc..119cc3f5c500 100644 --- a/packages/blocks/src/_common/adapters/plain-text.ts +++ b/packages/blocks/src/_common/adapters/plain-text.ts @@ -85,9 +85,7 @@ export class PlainTextAdapter extends BaseAdapter { }; } - async toPageSnapshot( - payload: ToPageSnapshotPayload<PlainText> - ): Promise<PageSnapshot> { + toPageSnapshot(payload: ToPageSnapshotPayload<PlainText>): PageSnapshot { payload.file = payload.file.replaceAll('\r', ''); return { type: 'page', @@ -157,9 +155,7 @@ export class PlainTextAdapter extends BaseAdapter<PlainText> { }; } - async toBlockSnapshot( - payload: ToBlockSnapshotPayload<PlainText> - ): Promise<BlockSnapshot> { + toBlockSnapshot(payload: ToBlockSnapshotPayload<PlainText>): BlockSnapshot { payload.file = payload.file.replaceAll('\r', ''); return { type: 'block', @@ -194,9 +190,9 @@ export class PlainTextAdapter extends BaseAdapter<PlainText> { }; } - async toSliceSnapshot( + toSliceSnapshot( payload: PlainTextToSliceSnapshotPayload - ): Promise<SliceSnapshot | null> { + ): SliceSnapshot | null { this._markdownAdapter.applyConfigs(this.configs); if (payload.file.trim().length === 0) { return null; @@ -252,7 +248,7 @@ export class PlainTextAdapter extends BaseAdapter<PlainText> { (node): node is BlockSnapshot => BlockSnapshotSchema.safeParse(node).success ); - walker.setEnter(async o => { + walker.setEnter(o => { const text = (o.node.props.text ?? { delta: [] }) as { delta: DeltaInsert[]; }; diff --git a/packages/blocks/src/_common/components/rich-text/keymap/container.ts b/packages/blocks/src/_common/components/rich-text/keymap/container.ts index c02a5028a94d..07f2f492e311 100644 --- a/packages/blocks/src/_common/components/rich-text/keymap/container.ts +++ b/packages/blocks/src/_common/components/rich-text/keymap/container.ts @@ -401,17 +401,14 @@ export const bindContainerHotkey = (blockElement: BlockElement) => { }); inlineEditor.setInlineRange({ index: inlineRange.index - 1, length: 0 }); - createDefaultPage(blockElement.page.workspace, { + const page = createDefaultPage(blockElement.page.workspace, { title: pageName, - }) - .then(page => { - insertLinkedNode({ - editorHost: blockElement.host, - model: blockElement.model, - pageId: page.id, - }); - }) - .catch(e => console.error(e)); + }); + insertLinkedNode({ + editorHost: blockElement.host, + model: blockElement.model, + pageId: page.id, + }); return true; } @@ -443,7 +440,7 @@ export const bindContainerHotkey = (blockElement: BlockElement) => { // [[Selected text]] should automatically be converted to a Linked page with the title "Selected text". // See https://github.com/toeverything/blocksuite/issues/2730 const success = tryConvertToLinkedDoc(); - if (success) return; + if (success) return true; } inlineEditor.insertText( inlineRange, diff --git a/packages/blocks/src/_common/export-manager/export-manager.ts b/packages/blocks/src/_common/export-manager/export-manager.ts index bef2a7b886bf..511efaa1703c 100644 --- a/packages/blocks/src/_common/export-manager/export-manager.ts +++ b/packages/blocks/src/_common/export-manager/export-manager.ts @@ -82,7 +82,7 @@ export class ExportManager { } }, 100); }); - return await promise; + return promise; } private _drawEdgelessBackground( @@ -157,7 +157,7 @@ export class ExportManager { } }); - await this._replaceRichTextWithSvgElement(element); + this._replaceRichTextWithSvgElement(element); await this.replaceImgSrcWithSvg(element); }, useCORS: this._exportOptions.imageProxyEndpoint ? false : true, @@ -352,7 +352,7 @@ export class ExportManager { }, onclone: async function (_documentClone: Document, element: HTMLElement) { element.style.height = `${viewportHeight}px`; - await replaceRichTextWithSvgElement(element); + replaceRichTextWithSvgElement(element); await replaceImgSrcWithSvg(element); }, backgroundColor: window.getComputedStyle(viewportElement).backgroundColor, @@ -371,22 +371,20 @@ export class ExportManager { return data; } - private _replaceRichTextWithSvgElement = async (element: HTMLElement) => { + private _replaceRichTextWithSvgElement = (element: HTMLElement) => { const richList = Array.from(element.querySelectorAll('.inline-editor')); - await Promise.all( - richList.map(async rich => { - const svgEle = await this._elementToSvgElement( - rich.cloneNode(true) as HTMLElement, - rich.clientWidth, - rich.clientHeight + 1 - ); - rich.parentElement?.appendChild(svgEle); - rich.parentElement?.removeChild(rich); - }) - ); + richList.map(rich => { + const svgEle = this._elementToSvgElement( + rich.cloneNode(true) as HTMLElement, + rich.clientWidth, + rich.clientHeight + 1 + ); + rich.parentElement?.appendChild(svgEle); + rich.parentElement?.removeChild(rich); + }); }; - private async _elementToSvgElement( + private _elementToSvgElement( node: HTMLElement, width: number, height: number @@ -423,7 +421,7 @@ export class ExportManager { await this._checkReady(); if (isInsideDocEditor(this.editorHost)) { - return await this._docToCanvas(); + return this._docToCanvas(); } else { const root = this.page.root; if (!root) return; @@ -434,7 +432,7 @@ export class ExportManager { ) as EdgelessPageBlockComponent; const bound = edgeless.getElementsBound(); assertExists(bound); - return await this.edgelessToCanvas( + return this.edgelessToCanvas( edgeless.surface.renderer, bound, (model: BlockModel) => blockElementGetter(model, this.editorHost.view), diff --git a/packages/blocks/src/_common/utils/init.ts b/packages/blocks/src/_common/utils/init.ts index 35df274dc650..43f923b8b495 100644 --- a/packages/blocks/src/_common/utils/init.ts +++ b/packages/blocks/src/_common/utils/init.ts @@ -1,6 +1,6 @@ import type { Workspace } from '@blocksuite/store'; -export async function createDefaultPage( +export function createDefaultPage( workspace: Workspace, options: { id?: string; title?: string } = {} ) { diff --git a/packages/blocks/src/_common/utils/selection.ts b/packages/blocks/src/_common/utils/selection.ts index 770e24cd6e14..a258ff479237 100644 --- a/packages/blocks/src/_common/utils/selection.ts +++ b/packages/blocks/src/_common/utils/selection.ts @@ -122,7 +122,7 @@ function setEndRange(editableContainer: Element) { return newRange; } -async function setNewTop(y: number, editableContainer: Element, zoom = 1) { +function setNewTop(y: number, editableContainer: Element, zoom = 1) { const SCROLL_THRESHOLD = 100; const scrollContainer = editableContainer.closest('.affine-doc-viewport'); @@ -177,7 +177,7 @@ export function focusTitle(editorHost: EditorHost, index = Infinity, len = 0) { titleInlineEditor.setInlineRange({ index, length: len }); } -async function focusRichText( +function focusRichText( editableContainer: Element, position: SelectionPosition = 'end', zoom = 1 @@ -203,7 +203,7 @@ async function focusRichText( default: { const { x, y } = position; let newLeft = x; - const newTop = await setNewTop(y, editableContainer, zoom); + const newTop = setNewTop(y, editableContainer, zoom); if (x <= left) { newLeft = left + 1; } @@ -240,7 +240,7 @@ export function focusBlockByModel( assertExists(element); const editableContainer = element?.querySelector('[contenteditable]'); if (editableContainer) { - focusRichText(editableContainer, position, zoom).catch(console.error); + focusRichText(editableContainer, position, zoom); } } diff --git a/packages/blocks/src/attachment-block/attachment-block.ts b/packages/blocks/src/attachment-block/attachment-block.ts index fb9228d22454..92ead9470b2c 100644 --- a/packages/blocks/src/attachment-block/attachment-block.ts +++ b/packages/blocks/src/attachment-block/attachment-block.ts @@ -151,7 +151,7 @@ export class AttachmentBlockComponent extends BlockElement< }; download = () => { - downloadAttachmentBlob(this).catch(console.error); + downloadAttachmentBlob(this); }; refreshData = () => { diff --git a/packages/blocks/src/attachment-block/attachment-transformer.ts b/packages/blocks/src/attachment-block/attachment-transformer.ts index 7bc236ff2f17..f621841fad08 100644 --- a/packages/blocks/src/attachment-block/attachment-transformer.ts +++ b/packages/blocks/src/attachment-block/attachment-transformer.ts @@ -9,7 +9,7 @@ import type { AttachmentBlockProps } from './attachment-model.js'; export class AttachmentBlockTransformer extends BaseBlockTransformer<AttachmentBlockProps> { override async toSnapshot(payload: ToSnapshotPayload<AttachmentBlockProps>) { - const snapshot = await super.toSnapshot(payload); + const snapshot = super.toSnapshot(payload); const sourceId = payload.model.sourceId; if (sourceId) await payload.assets.readFromBlob(sourceId); diff --git a/packages/blocks/src/attachment-block/embed.ts b/packages/blocks/src/attachment-block/embed.ts index 0f2143aaa145..bf604b32b9e1 100644 --- a/packages/blocks/src/attachment-block/embed.ts +++ b/packages/blocks/src/attachment-block/embed.ts @@ -99,7 +99,7 @@ export function renderEmbedView(model: AttachmentBlockModel, blobUrl: string) { /** * Turn the attachment block into an image block. */ -export async function turnIntoImageBlock(model: AttachmentBlockModel) { +export function turnIntoImageBlock(model: AttachmentBlockModel) { if (!model.page.schema.flavourSchemaMap.has('affine:image')) throw new Error('The image flavour is not supported!'); diff --git a/packages/blocks/src/attachment-block/utils.ts b/packages/blocks/src/attachment-block/utils.ts index 09d3c9ba1eea..29082f89e52d 100644 --- a/packages/blocks/src/attachment-block/utils.ts +++ b/packages/blocks/src/attachment-block/utils.ts @@ -137,7 +137,7 @@ export async function checkAttachmentBlob(block: AttachmentBlockComponent) { * Since the size of the attachment may be very large, * the download process may take a long time! */ -export async function downloadAttachmentBlob(block: AttachmentBlockComponent) { +export function downloadAttachmentBlob(block: AttachmentBlockComponent) { const { host, model, loading, error, downloading, blobUrl } = block; if (downloading) { toast(host, 'Download in progress...'); diff --git a/packages/blocks/src/code-block/components/lang-list.ts b/packages/blocks/src/code-block/components/lang-list.ts index 4dbcf9eae061..dab0541ad768 100644 --- a/packages/blocks/src/code-block/components/lang-list.ts +++ b/packages/blocks/src/code-block/components/lang-list.ts @@ -1,3 +1,5 @@ +import '../../_common/components/button.js'; + import type { Placement } from '@floating-ui/dom'; import { baseTheme } from '@toeverything/theme'; import { css, html, LitElement, nothing, unsafeCSS } from 'lit'; @@ -143,7 +145,7 @@ export class LangList extends LitElement { @query('#filter-input') filterInput!: HTMLInputElement; - override async connectedCallback() { + override connectedCallback() { super.connectedCallback(); setTimeout(() => { diff --git a/packages/blocks/src/database-block/kanban/controller/clipboard.ts b/packages/blocks/src/database-block/kanban/controller/clipboard.ts index 3e72dfbb290a..fa5ab73e46b3 100644 --- a/packages/blocks/src/database-block/kanban/controller/clipboard.ts +++ b/packages/blocks/src/database-block/kanban/controller/clipboard.ts @@ -19,7 +19,7 @@ export class KanbanClipboardController implements ReactiveController { const kanbanSelection = this.host.selectionController.selection; if (!kanbanSelection) return false; - this._onCopy(ctx, kanbanSelection).catch(console.error); + this._onCopy(ctx, kanbanSelection); return true; }) ); @@ -34,7 +34,7 @@ export class KanbanClipboardController implements ReactiveController { ); } - private _onCopy = async ( + private _onCopy = ( _context: UIEventStateContext, _kanbanSelection: KanbanViewSelectionWithType ) => { diff --git a/packages/blocks/src/database-block/table/controller/clipboard.ts b/packages/blocks/src/database-block/table/controller/clipboard.ts index a179984dc9f3..7fa729b35557 100644 --- a/packages/blocks/src/database-block/table/controller/clipboard.ts +++ b/packages/blocks/src/database-block/table/controller/clipboard.ts @@ -30,7 +30,7 @@ export class TableClipboardController implements ReactiveController { const tableSelection = this.host.selectionController.selection; if (!tableSelection) return false; - this._onCopy(ctx, tableSelection).catch(console.error); + this._onCopy(ctx, tableSelection); return true; }) ); @@ -40,7 +40,7 @@ export class TableClipboardController implements ReactiveController { const tableSelection = this.host.selectionController.selection; if (!tableSelection) return false; - this._onCut(ctx, tableSelection).catch(console.error); + this._onCut(ctx, tableSelection); return true; }) ); @@ -55,7 +55,7 @@ export class TableClipboardController implements ReactiveController { ); } - private _onCopy = async ( + private _onCopy = ( _context: UIEventStateContext, tableSelection: TableViewSelection, isCut = false @@ -75,7 +75,7 @@ export class TableClipboardController implements ReactiveController { const cellsValue = copyCellsValue(tableSelection, data, view, isCut); const formatValue = cellsValue.map(value => value.join('\t')).join('\n'); this.std.clipboard - .writeToClipboard(async items => { + .writeToClipboard(items => { return { ...items, [TEXT]: formatValue, @@ -87,11 +87,11 @@ export class TableClipboardController implements ReactiveController { return true; }; - private _onCut = async ( + private _onCut = ( _context: UIEventStateContext, tableSelection: TableViewSelection ) => { - this._onCopy(_context, tableSelection, true).catch(console.error); + this._onCopy(_context, tableSelection, true); }; private _onPaste = async (_context: UIEventStateContext) => { diff --git a/packages/blocks/src/image-block/ledits/main.ts b/packages/blocks/src/image-block/ledits/main.ts index a68f557cc704..d12f5bea1071 100644 --- a/packages/blocks/src/image-block/ledits/main.ts +++ b/packages/blocks/src/image-block/ledits/main.ts @@ -51,15 +51,11 @@ export function openLeditsEditor(blockElement: ImageBlockComponent) { } const blobManager = model.page.blob; - blobManager - .set(newBlob) - .then(sourceId => { - model.page.updateBlock(model, { - sourceId, - }); - modal.close(); - }) - .catch(console.error); + const sourceId = await blobManager.set(newBlob); + model.page.updateBlock(model, { + sourceId, + }); + modal.close(); }, }, ], diff --git a/packages/blocks/src/page-block/edgeless/components/auto-complete/auto-complete-panel.ts b/packages/blocks/src/page-block/edgeless/components/auto-complete/auto-complete-panel.ts index 2b04a92dfad7..62223eacc8ef 100644 --- a/packages/blocks/src/page-block/edgeless/components/auto-complete/auto-complete-panel.ts +++ b/packages/blocks/src/page-block/edgeless/components/auto-complete/auto-complete-panel.ts @@ -283,7 +283,7 @@ export class EdgelessAutoCompletePanel extends WithDisposable(LitElement) { this.edgeless.surface.renderer.removeOverlay(this._overlay); } - private async _addShape(targetType: TARGET_SHAPE_TYPE) { + private _addShape(targetType: TARGET_SHAPE_TYPE) { const edgeless = this.edgeless; const currentShape = this.currentShape; const result = this._generateTarget(this.connector); @@ -291,7 +291,7 @@ export class EdgelessAutoCompletePanel extends WithDisposable(LitElement) { const { nextBound, position } = result; const { service } = edgeless; - const id = await createShapeElement(edgeless, currentShape, targetType); + const id = createShapeElement(edgeless, currentShape, targetType); service.updateElement(id, { xywh: nextBound.serialize() }); service.updateElement(this.connector.id, { @@ -387,12 +387,12 @@ export class EdgelessAutoCompletePanel extends WithDisposable(LitElement) { }); } - private async _addText() { + private _addText() { const target = this._getTargetXYWH(DEFAULT_TEXT_WIDTH, DEFAULT_TEXT_HEIGHT); if (!target) return; const { xywh, position } = target; - const id = await createTextElement(this.edgeless, this.currentShape); + const id = createTextElement(this.edgeless, this.currentShape); const { service } = this.edgeless; service.updateElement(id, { xywh: serializeXYWH(...xywh) }); @@ -411,13 +411,13 @@ export class EdgelessAutoCompletePanel extends WithDisposable(LitElement) { } } - private async _autoComplete(targetType: AUTO_COMPLETE_TARGET_TYPE) { + private _autoComplete(targetType: AUTO_COMPLETE_TARGET_TYPE) { this._removeOverlay(); if (!this._connectorExist()) return; switch (targetType) { case 'text': - await this._addText(); + this._addText(); break; case 'note': this._addNote(); @@ -426,7 +426,7 @@ export class EdgelessAutoCompletePanel extends WithDisposable(LitElement) { this._addFrame(); break; default: - await this._addShape(targetType); + this._addShape(targetType); } this.remove(); diff --git a/packages/blocks/src/page-block/edgeless/components/auto-complete/utils.ts b/packages/blocks/src/page-block/edgeless/components/auto-complete/utils.ts index 15da203886d6..9d7d0b053e5f 100644 --- a/packages/blocks/src/page-block/edgeless/components/auto-complete/utils.ts +++ b/packages/blocks/src/page-block/edgeless/components/auto-complete/utils.ts @@ -324,7 +324,7 @@ export function createEdgelessElement( return id; } -export async function createShapeElement( +export function createShapeElement( edgeless: EdgelessPageBlockComponent, current: ShapeElementModel, targetType: TARGET_SHAPE_TYPE @@ -344,7 +344,7 @@ export async function createShapeElement( return id; } -export async function createTextElement( +export function createTextElement( edgeless: EdgelessPageBlockComponent, current: ShapeElementModel ) { diff --git a/packages/blocks/src/page-block/edgeless/components/toolbar/template/template-type.ts b/packages/blocks/src/page-block/edgeless/components/toolbar/template/template-type.ts index 55f070ca2d3e..1a7ff988bdac 100644 --- a/packages/blocks/src/page-block/edgeless/components/toolbar/template/template-type.ts +++ b/packages/blocks/src/page-block/edgeless/components/toolbar/template/template-type.ts @@ -14,11 +14,11 @@ export type TemplateCategory = { }; export interface TemplateManager { - list(category: string): Promise<Template[]>; + list(category: string): Promise<Template[]> | Template[]; - categories(): Promise<string[]>; + categories(): Promise<string[]> | string[]; - search(keyword: string, category?: string): Promise<Template[]>; + search(keyword: string, category?: string): Promise<Template[]> | Template[]; extend?(manager: TemplateManager): void; } diff --git a/packages/blocks/src/page-block/edgeless/controllers/clipboard.ts b/packages/blocks/src/page-block/edgeless/controllers/clipboard.ts index 500d84fb0a95..430b17da1503 100644 --- a/packages/blocks/src/page-block/edgeless/controllers/clipboard.ts +++ b/packages/blocks/src/page-block/edgeless/controllers/clipboard.ts @@ -143,7 +143,7 @@ export class EdgelessClipboardController extends PageClipboard { if (selectedIds.length === 0) return false; - this._onCopy(ctx, selections).catch(console.error); + this._onCopy(ctx, selections); return; }, { global: true } @@ -166,7 +166,7 @@ export class EdgelessClipboardController extends PageClipboard { ); }; - private _onCopy = async ( + private _onCopy = ( _context: UIEventStateContext, surfaceSelection: SurfaceSelection[] ) => { @@ -290,7 +290,7 @@ export class EdgelessClipboardController extends PageClipboard { const json = this.std.clipboard.readFromClipboard(data); const elementsRawData = JSON.parse(json[BLOCKSUITE_SURFACE]); - this._pasteShapesAndBlocks(elementsRawData).catch(console.error); + this._pasteShapesAndBlocks(elementsRawData); }; private _onCut = (_context: UIEventStateContext) => { @@ -301,7 +301,7 @@ export class EdgelessClipboardController extends PageClipboard { const event = _context.get('clipboardState').event; event.preventDefault(); - this._onCopy(_context, selections).catch(console.error); + this._onCopy(_context, selections); if (selections[0]?.editing) { // use build-in cut handler in rich-text when cut in surface text element @@ -685,7 +685,7 @@ export class EdgelessClipboardController extends PageClipboard { }); } - async createElementsFromClipboardData( + createElementsFromClipboardData( elementsRawData: Record<string, unknown>[], pasteCenter?: IVec ) { @@ -882,11 +882,9 @@ export class EdgelessClipboardController extends PageClipboard { return [elements, blocks] as const; } - private async _pasteShapesAndBlocks( - elementsRawData: Record<string, unknown>[] - ) { + private _pasteShapesAndBlocks(elementsRawData: Record<string, unknown>[]) { const [elements, blocks] = - await this.createElementsFromClipboardData(elementsRawData); + this.createElementsFromClipboardData(elementsRawData); this._emitSelectionChangeAfterPaste( elements.map(ele => ele.id), blocks.map(block => block.id) @@ -939,7 +937,7 @@ export class EdgelessClipboardController extends PageClipboard { assertExists(blob); this.std.clipboard - .writeToClipboard(async _items => { + .writeToClipboard(_items => { return { ..._items, [IMAGE_PNG]: blob, @@ -952,8 +950,8 @@ export class EdgelessClipboardController extends PageClipboard { private async _replaceRichTextWithSvgElement(element: HTMLElement) { const richList = Array.from(element.querySelectorAll('.inline-editor')); await Promise.all( - richList.map(async rich => { - const svgEle = await this._elementToSvgElement( + richList.map(rich => { + const svgEle = this._elementToSvgElement( rich.cloneNode(true) as HTMLElement, rich.clientWidth, rich.clientHeight + 1 @@ -964,7 +962,7 @@ export class EdgelessClipboardController extends PageClipboard { ); } - private async _elementToSvgElement( + private _elementToSvgElement( node: HTMLElement, width: number, height: number diff --git a/packages/blocks/src/page-block/edgeless/controllers/tools/default-tool.ts b/packages/blocks/src/page-block/edgeless/controllers/tools/default-tool.ts index 4adc0c871e43..a827afc93ecd 100644 --- a/packages/blocks/src/page-block/edgeless/controllers/tools/default-tool.ts +++ b/packages/blocks/src/page-block/edgeless/controllers/tools/default-tool.ts @@ -329,7 +329,7 @@ export class DefaultToolController extends EdgelessToolController<DefaultTool> { const bound = edgelessElementsBound(this._toBeMoved); const [elements, blocks] = - await clipboardController.createElementsFromClipboardData( + clipboardController.createElementsFromClipboardData( data as Record<string, unknown>[], bound.center ); diff --git a/packages/blocks/src/page-block/edgeless/services/template.ts b/packages/blocks/src/page-block/edgeless/services/template.ts index efd907d79ba3..dbefb48be166 100644 --- a/packages/blocks/src/page-block/edgeless/services/template.ts +++ b/packages/blocks/src/page-block/edgeless/services/template.ts @@ -281,7 +281,7 @@ export class TemplateJob { return modelDataList; } - private async _insertToPage( + private _insertToPage( modelDataList: { flavour: string; json: BlockSnapshot; @@ -357,7 +357,7 @@ export class TemplateJob { const modelDataList = await this._jsonToModelData(template.blocks); - this._insertToPage(modelDataList).catch(console.error); + this._insertToPage(modelDataList); return templateBound; } diff --git a/packages/blocks/src/page-block/edgeless/services/tools-manager.ts b/packages/blocks/src/page-block/edgeless/services/tools-manager.ts index d0111d4d9502..dae1cd7a3ecb 100644 --- a/packages/blocks/src/page-block/edgeless/services/tools-manager.ts +++ b/packages/blocks/src/page-block/edgeless/services/tools-manager.ts @@ -158,7 +158,7 @@ export class EdgelessToolsManager { controller.mount(container); }); - this._initMouseAndWheelEvents().catch(console.error); + this._initMouseAndWheelEvents(); } register(Tool: EdgelessToolConstructor) { @@ -178,7 +178,7 @@ export class EdgelessToolsManager { }; } - private async _initMouseAndWheelEvents() { + private _initMouseAndWheelEvents() { this._add('dragStart', ctx => { this._dragging = true; const event = ctx.get('pointerState'); diff --git a/packages/blocks/src/page-block/edgeless/utils/clipboard-utils.ts b/packages/blocks/src/page-block/edgeless/utils/clipboard-utils.ts index 24ab962f44bd..1f2378d20e98 100644 --- a/packages/blocks/src/page-block/edgeless/utils/clipboard-utils.ts +++ b/packages/blocks/src/page-block/edgeless/utils/clipboard-utils.ts @@ -28,7 +28,7 @@ export async function duplicate( JSON.stringify(await prepareClipboardData(copyElements, edgeless.std)) ); const [canvasElements, blocks] = - await clipboardController.createElementsFromClipboardData( + clipboardController.createElementsFromClipboardData( data as Record<string, unknown>[], totalBound.center ); diff --git a/packages/blocks/src/page-block/widgets/linked-doc/config.ts b/packages/blocks/src/page-block/widgets/linked-doc/config.ts index e571b4d5a677..7883c91d6975 100644 --- a/packages/blocks/src/page-block/widgets/linked-doc/config.ts +++ b/packages/blocks/src/page-block/widgets/linked-doc/config.ts @@ -109,9 +109,9 @@ export const getMenus: (ctx: { key: 'create', name: `Create "${displayPageName}" doc`, icon: NewPageIcon, - action: async () => { + action: () => { const pageName = query; - const newPage = await createDefaultPage(page.workspace, { + const newPage = createDefaultPage(page.workspace, { title: pageName, }); insertLinkedNode({ diff --git a/packages/blocks/src/page-block/widgets/linked-doc/linked-doc-popover.ts b/packages/blocks/src/page-block/widgets/linked-doc/linked-doc-popover.ts index dd3addec9891..1f1549accf12 100644 --- a/packages/blocks/src/page-block/widgets/linked-doc/linked-doc-popover.ts +++ b/packages/blocks/src/page-block/widgets/linked-doc/linked-doc-popover.ts @@ -1,3 +1,5 @@ +import '../../../_common/components/button.js'; + import { assertExists } from '@blocksuite/global/utils'; import type { EditorHost } from '@blocksuite/lit'; import { WithDisposable } from '@blocksuite/lit'; diff --git a/packages/blocks/src/page-block/widgets/slash-menu/config.ts b/packages/blocks/src/page-block/widgets/slash-menu/config.ts index e09a88d1d313..44497d9adb1a 100644 --- a/packages/blocks/src/page-block/widgets/slash-menu/config.ts +++ b/packages/blocks/src/page-block/widgets/slash-menu/config.ts @@ -193,8 +193,8 @@ export const menuGroups: SlashMenuOptions['menus'] = [ { name: 'New Doc', icon: NewPageIcon, - action: async ({ pageElement, model }) => { - const newPage = await createDefaultPage(pageElement.page.workspace); + action: ({ pageElement, model }) => { + const newPage = createDefaultPage(pageElement.page.workspace); insertContent(pageElement.host, model, REFERENCE_NODE, { reference: { type: 'LinkedPage', @@ -464,7 +464,7 @@ export const menuGroups: SlashMenuOptions['menus'] = [ } return true; }, - action: async ({ pageElement, model }) => { + action: ({ pageElement, model }) => { const parent = pageElement.page.getParent(model); assertExists(parent); const index = parent.children.indexOf(model); @@ -503,7 +503,7 @@ export const menuGroups: SlashMenuOptions['menus'] = [ } return true; }, - action: async ({ model, pageElement }) => { + action: ({ model, pageElement }) => { const parent = pageElement.page.getParent(model); assertExists(parent); const index = parent.children.indexOf(model); @@ -540,7 +540,7 @@ export const menuGroups: SlashMenuOptions['menus'] = [ return { name: 'Frame: ' + frameModel.title, icon: FrameIcon, - action: async ({ pageElement, model }) => { + action: ({ pageElement, model }) => { const { page } = pageElement; const noteModel = page.getParent(model) as NoteBlockModel; const insertIdx = noteModel.children.indexOf(model); @@ -586,7 +586,7 @@ export const menuGroups: SlashMenuOptions['menus'] = [ return { name: 'Group: ' + element.get('title'), icon: GroupingIcon, - action: async ({ pageElement, model }) => { + action: ({ pageElement, model }) => { const { page } = pageElement; const noteModel = page.getParent(model) as NoteBlockModel; const insertIdx = noteModel.children.indexOf(model); @@ -620,7 +620,7 @@ export const menuGroups: SlashMenuOptions['menus'] = [ { name: 'Move Up', icon: ArrowUpBigIcon, - action: async ({ pageElement, model }) => { + action: ({ pageElement, model }) => { const page = pageElement.page; const previousSiblingModel = page.getPreviousSibling(model); if (!previousSiblingModel) return; @@ -634,7 +634,7 @@ export const menuGroups: SlashMenuOptions['menus'] = [ { name: 'Move Down', icon: ArrowDownBigIcon, - action: async ({ pageElement, model }) => { + action: ({ pageElement, model }) => { const page = pageElement.page; const nextSiblingModel = page.getNextSibling(model); if (!nextSiblingModel) return; @@ -648,7 +648,7 @@ export const menuGroups: SlashMenuOptions['menus'] = [ { name: 'Copy', icon: CopyIcon, - action: async ({ pageElement, model }) => { + action: ({ pageElement, model }) => { const slice = Slice.fromModels(pageElement.std.page, [model]); pageElement.std.clipboard diff --git a/packages/framework/block-std/src/clipboard/index.ts b/packages/framework/block-std/src/clipboard/index.ts index 974d890199af..eb8ecbe1f682 100644 --- a/packages/framework/block-std/src/clipboard/index.ts +++ b/packages/framework/block-std/src/clipboard/index.ts @@ -166,7 +166,7 @@ export class Clipboard { async writeToClipboard( updateItems: ( items: Record<string, unknown> - ) => Promise<Record<string, unknown>> + ) => Promise<Record<string, unknown>> | Record<string, unknown> ) { const _items = { 'text/plain': '', diff --git a/packages/framework/inline/src/__tests__/utils.ts b/packages/framework/inline/src/__tests__/utils.ts index d195f098113d..a1f3eea00837 100644 --- a/packages/framework/inline/src/__tests__/utils.ts +++ b/packages/framework/inline/src/__tests__/utils.ts @@ -45,7 +45,7 @@ export async function getDeltaFromInlineRichText( index = 0 ): Promise<DeltaInsert> { await page.waitForTimeout(100); - return await page.evaluate(index => { + return page.evaluate(index => { const richTexts = document .querySelector('test-page') ?.querySelectorAll('test-rich-text'); @@ -65,7 +65,7 @@ export async function getInlineRangeFromInlineRichText( index = 0 ): Promise<InlineRange | null> { await page.waitForTimeout(100); - return await page.evaluate(index => { + return page.evaluate(index => { const richTexts = document .querySelector('test-page') ?.querySelectorAll('test-rich-text'); @@ -109,7 +109,7 @@ export async function getInlineRichTextLine( index: number, i = 0 ): Promise<readonly [string, number]> { - return await page.evaluate( + return page.evaluate( ([index, i]) => { const richTexts = document.querySelectorAll('test-rich-text'); diff --git a/packages/framework/store/src/__tests__/block-tree.unit.spec.ts b/packages/framework/store/src/__tests__/block-tree.unit.spec.ts index a2148d9d86ba..391459b9d457 100644 --- a/packages/framework/store/src/__tests__/block-tree.unit.spec.ts +++ b/packages/framework/store/src/__tests__/block-tree.unit.spec.ts @@ -28,12 +28,12 @@ function createTestOptions() { return { id: 'test-workspace', idGenerator, schema }; } -test('trigger props updated', async () => { +test('trigger props updated', () => { const options = createTestOptions(); const workspace = new Workspace(options); const page = workspace.createPage({ id: 'home' }); - await page.load(); + page.load(); page.addBlock('page'); @@ -87,12 +87,12 @@ test('trigger props updated', async () => { expect((getItems().get(0) as Y.Map<unknown>).get('id')).toBe('1'); }); -test('stash and pop', async () => { +test('stash and pop', () => { const options = createTestOptions(); const workspace = new Workspace(options); const page = workspace.createPage({ id: 'home' }); - await page.load(); + page.load(); page.addBlock('page'); @@ -156,12 +156,12 @@ test('stash and pop', async () => { expect(onPropsUpdated).toHaveBeenNthCalledWith(11, { key: 'style' }); }); -test('always get latest value in onChange', async () => { +test('always get latest value in onChange', () => { const options = createTestOptions(); const workspace = new Workspace(options); const page = workspace.createPage({ id: 'home' }); - await page.load(); + page.load(); page.addBlock('page'); diff --git a/packages/framework/store/src/__tests__/block.unit.spec.ts b/packages/framework/store/src/__tests__/block.unit.spec.ts index 1abaf1b3b4e8..8f2333b233ff 100644 --- a/packages/framework/store/src/__tests__/block.unit.spec.ts +++ b/packages/framework/store/src/__tests__/block.unit.spec.ts @@ -24,7 +24,7 @@ const pageSchema = defineBlockSchema({ type PageModel = SchemaToModel<typeof pageSchema>; schema.register([pageSchema]); -test('init block without props should add default props', async () => { +test('init block without props should add default props', () => { const doc = new Y.Doc(); const yBlock = doc.getMap('yBlock'); yBlock.set('sys:id', '0'); diff --git a/packages/framework/store/src/__tests__/indexer.unit.spec.ts b/packages/framework/store/src/__tests__/indexer.unit.spec.ts index 98a6fed4df98..bd3f61901f17 100644 --- a/packages/framework/store/src/__tests__/indexer.unit.spec.ts +++ b/packages/framework/store/src/__tests__/indexer.unit.spec.ts @@ -24,11 +24,11 @@ function createTestOptions() { return { id: 'test-workspace', idGenerator, schema }; } -async function createTestPage(pageId = 'page:home', workspace?: Workspace) { +function createTestPage(pageId = 'page:home', workspace?: Workspace) { const options = createTestOptions(); const _workspace = workspace || new Workspace(options); const page = _workspace.createPage({ id: pageId }); - await page.load(); + page.load(); return page; } @@ -37,8 +37,8 @@ beforeEach(() => { }); describe('workspace.search works', () => { - it('workspace search matching', async () => { - const page = await createTestPage(); + it('workspace search matching', () => { + const page = createTestPage(); const workspace = page.workspace; const pageId = page.addBlock('affine:page', { @@ -112,9 +112,9 @@ describe('workspace.search works', () => { describe('backlink works', () => { it('backlink indexer works with subpage', async () => { - const page = await createTestPage(); + const page = createTestPage(); const workspace = page.workspace; - const subpage = await createTestPage('page1', workspace); + const subpage = createTestPage('page1', workspace); const backlinkIndexer = workspace.indexer.backlink; const pageId = page.addBlock('affine:page', { @@ -156,9 +156,9 @@ describe('backlink works', () => { }); it('backlink indexer works with linked page', async () => { - const page0 = await createTestPage(); + const page0 = createTestPage(); const workspace = page0.workspace; - const page1 = await createTestPage('space:page1', workspace); + const page1 = createTestPage('space:page1', workspace); const backlinkIndexer = workspace.indexer.backlink; const page0Id = page0.addBlock('affine:page'); diff --git a/packages/framework/store/src/__tests__/schema.unit.spec.ts b/packages/framework/store/src/__tests__/schema.unit.spec.ts index d5dc945a5051..dc5cbab10d35 100644 --- a/packages/framework/store/src/__tests__/schema.unit.spec.ts +++ b/packages/framework/store/src/__tests__/schema.unit.spec.ts @@ -61,17 +61,17 @@ const BlockSchemas = [ ]; const defaultPageId = 'page0'; -async function createTestPage(pageId = defaultPageId) { +function createTestPage(pageId = defaultPageId) { const options = createTestOptions(); const workspace = new Workspace(options); const page = workspace.createPage({ id: pageId }); - await page.load(); + page.load(); return page; } describe('schema', () => { - it('should be able to validate schema by role', async () => { - const page = await createTestPage(); + it('should be able to validate schema by role', () => { + const page = createTestPage(); const pageId = page.addBlock('affine:page', {}); const noteId = page.addBlock('affine:note', {}, pageId); const paragraphId = page.addBlock('affine:paragraph', {}, noteId); @@ -91,8 +91,8 @@ describe('schema', () => { ).not.toThrow(); }); - it('should glob match works', async () => { - const page = await createTestPage(); + it('should glob match works', () => { + const page = createTestPage(); const pageId = page.addBlock('affine:page', {}); const noteId = page.addBlock('affine:note', {}, pageId); diff --git a/packages/framework/store/src/__tests__/test-utils-dom.ts b/packages/framework/store/src/__tests__/test-utils-dom.ts index 1c5567dd7b73..c80a3acfb035 100644 --- a/packages/framework/store/src/__tests__/test-utils-dom.ts +++ b/packages/framework/store/src/__tests__/test-utils-dom.ts @@ -43,10 +43,7 @@ function reject(message: string) { addMessage(`❌ ${message}`); } -export async function testSerial( - name: string, - callback: () => Promise<boolean> -) { +export function testSerial(name: string, callback: () => Promise<boolean>) { testCases.push({ name, callback }); } @@ -82,7 +79,7 @@ export async function nextFrame() { // Test image source: https://en.wikipedia.org/wiki/Test_card export async function loadTestImageBlob(name: string): Promise<Blob> { const resp = await fetch(`/${name}.png`); - return await resp.blob(); + return resp.blob(); } export async function loadImage(blobUrl: string) { diff --git a/packages/framework/store/src/__tests__/transformer.unit.spec.ts b/packages/framework/store/src/__tests__/transformer.unit.spec.ts index 860732b64fd3..a1eacfa17556 100644 --- a/packages/framework/store/src/__tests__/transformer.unit.spec.ts +++ b/packages/framework/store/src/__tests__/transformer.unit.spec.ts @@ -53,16 +53,16 @@ const transformer = new BaseBlockTransformer(); const blobManager = new MemoryBlobManager(); const assets = new AssetsManager({ blob: blobManager }); -test('model to snapshot', async () => { +test('model to snapshot', () => { const options = createTestOptions(); const workspace = new Workspace(options); const page = workspace.createPage({ id: 'home' }); - await page.load(); + page.load(); page.addBlock('page'); const root = page.root as PageBlockModel; expect(root).not.toBeNull(); - const snapshot = await transformer.toSnapshot({ + const snapshot = transformer.toSnapshot({ model: root, assets, }); @@ -73,7 +73,7 @@ test('snapshot to model', async () => { const options = createTestOptions(); const workspace = new Workspace(options); const page = workspace.createPage({ id: 'home' }); - await page.load(); + page.load(); page.addBlock('page'); const root = page.root as PageBlockModel; diff --git a/packages/framework/store/src/__tests__/workspace.unit.spec.ts b/packages/framework/store/src/__tests__/workspace.unit.spec.ts index 89be51422fc9..573bdfc05f14 100644 --- a/packages/framework/store/src/__tests__/workspace.unit.spec.ts +++ b/packages/framework/store/src/__tests__/workspace.unit.spec.ts @@ -60,11 +60,11 @@ function createRoot(page: Page) { return page.root; } -async function createTestPage(pageId = defaultPageId) { +function createTestPage(pageId = defaultPageId) { const options = createTestOptions(); const workspace = new Workspace(options); const page = workspace.createPage({ id: pageId }); - await page.load(); + page.load(); return page; } @@ -73,13 +73,13 @@ beforeEach(() => { }); describe('basic', () => { - it('can init workspace', async () => { + it('can init workspace', () => { const options = createTestOptions(); const workspace = new Workspace(options); assert.equal(workspace.isEmpty, true); const page = workspace.createPage({ id: 'page:home' }); - await page.load(); + page.load(); const actual = serializeWorkspace(workspace.doc); const actualPage = actual[spaceMetaId].pages[0] as PageMeta; @@ -113,7 +113,7 @@ describe('basic', () => { }); }); - it('init workspace with custom id generator', async () => { + it('init workspace with custom id generator', () => { const options = createTestOptions(); let id = 100; const workspace = new Workspace({ @@ -132,7 +132,7 @@ describe('basic', () => { } }); - it('page ready lifecycle', async () => { + it('page ready lifecycle', () => { const options = createTestOptions(); const workspace = new Workspace(options); const page = workspace.createPage({ @@ -144,7 +144,7 @@ describe('basic', () => { page.slots.ready.on(readyCallback); page.slots.rootAdded.on(rootAddedCallback); - await page.load(() => { + page.load(() => { expect(page.ready).toBe(false); const rootId = page.addBlock('affine:page', { title: new page.Text(), @@ -159,14 +159,14 @@ describe('basic', () => { expect(readyCallback).toBeCalledTimes(1); }); - it('workspace pages with yjs applyUpdate', async () => { + it('workspace pages with yjs applyUpdate', () => { const options = createTestOptions(); const workspace = new Workspace(options); const workspace2 = new Workspace(options); const page = workspace.createPage({ id: 'space:0', }); - await page.load(() => { + page.load(() => { page.addBlock('affine:page', { title: new page.Text(), }); @@ -214,15 +214,15 @@ describe('basic', () => { }); workspace2.doc.once('subdocs', fn); expect(fn).toBeCalledTimes(0); - await page2.load(); + page2.load(); expect(fn).toBeCalledTimes(1); } }); }); describe('addBlock', () => { - it('can add single model', async () => { - const page = await createTestPage(); + it('can add single model', () => { + const page = createTestPage(); page.addBlock('affine:page', { title: new page.Text(), }); @@ -238,8 +238,8 @@ describe('addBlock', () => { }); }); - it('can add model with props', async () => { - const page = await createTestPage(); + it('can add model with props', () => { + const page = createTestPage(); page.addBlock('affine:page', { title: new page.Text('hello') }); assert.deepEqual(serializeWorkspace(page.rootDoc).spaces[spaceId].blocks, { @@ -253,8 +253,8 @@ describe('addBlock', () => { }); }); - it('can add multi models', async () => { - const page = await createTestPage(); + it('can add multi models', () => { + const page = createTestPage(); const pageId = page.addBlock('affine:page', { title: new page.Text(), }); @@ -310,7 +310,7 @@ describe('addBlock', () => { }); it('can observe slot events', async () => { - const page = await createTestPage(); + const page = createTestPage(); queueMicrotask(() => page.addBlock('affine:page', { @@ -322,7 +322,7 @@ describe('addBlock', () => { }); it('can add block to root', async () => { - const page = await createTestPage(); + const page = createTestPage(); let noteId: string; @@ -372,7 +372,7 @@ describe('addBlock', () => { assert.equal(workspace.pages.size, 0); }); - it('can remove page that has not been loaded', async () => { + it('can remove page that has not been loaded', () => { const options = createTestOptions(); const workspace = new Workspace(options); @@ -440,8 +440,8 @@ describe('addBlock', () => { }); describe('deleteBlock', () => { - it('delete children recursively by default', async () => { - const page = await createTestPage(); + it('delete children recursively by default', () => { + const page = createTestPage(); const pageId = page.addBlock('affine:page', {}); const noteId = page.addBlock('affine:note', {}, pageId); @@ -493,8 +493,8 @@ describe('deleteBlock', () => { }); }); - it('bring children to parent', async () => { - const page = await createTestPage(); + it('bring children to parent', () => { + const page = createTestPage(); const pageId = page.addBlock('affine:page', {}); const noteId = page.addBlock('affine:note', {}, pageId); @@ -581,8 +581,8 @@ describe('deleteBlock', () => { }); }); - it('bring children to other block', async () => { - const page = await createTestPage(); + it('bring children to other block', () => { + const page = createTestPage(); const pageId = page.addBlock('affine:page', {}); const noteId = page.addBlock('affine:note', {}, pageId); @@ -703,8 +703,8 @@ describe('deleteBlock', () => { }); }); - it('can delete model with parent', async () => { - const page = await createTestPage(); + it('can delete model with parent', () => { + const page = createTestPage(); const root = createRoot(page); const noteId = page.addBlock('affine:note', {}, root.id); @@ -758,8 +758,8 @@ describe('deleteBlock', () => { }); describe('getBlock', () => { - it('can get block by id', async () => { - const page = await createTestPage(); + it('can get block by id', () => { + const page = createTestPage(); const root = createRoot(page); const noteId = page.addBlock('affine:note', {}, root.id); @@ -774,8 +774,8 @@ describe('getBlock', () => { assert.equal(invalid, null); }); - it('can get parent', async () => { - const page = await createTestPage(); + it('can get parent', () => { + const page = createTestPage(); const root = createRoot(page); const noteId = page.addBlock('affine:note', {}, root.id); @@ -789,8 +789,8 @@ describe('getBlock', () => { assert.equal(invalid, null); }); - it('can get previous sibling', async () => { - const page = await createTestPage(); + it('can get previous sibling', () => { + const page = createTestPage(); const root = createRoot(page); const noteId = page.addBlock('affine:note', {}, root.id); @@ -831,11 +831,11 @@ describe('workspace.exportJSX works', () => { expect(workspace.exportJSX()).toMatchInlineSnapshot('null'); }); - it('workspace with multiple blocks children matches snapshot', async () => { + it('workspace with multiple blocks children matches snapshot', () => { const options = createTestOptions(); const workspace = new Workspace(options); const page = workspace.createPage({ id: 'page:home' }); - await page.load(() => { + page.load(() => { const pageId = page.addBlock('affine:page', { title: new page.Text(), }); @@ -860,11 +860,11 @@ describe('workspace.exportJSX works', () => { }); describe('workspace search', () => { - it('search page meta title', async () => { + it('search page meta title', () => { const options = createTestOptions(); const workspace = new Workspace(options); const page = workspace.createPage({ id: 'page:home' }); - await page.load(() => { + page.load(() => { const pageId = page.addBlock('affine:page', { title: new page.Text('test123'), }); diff --git a/packages/framework/store/src/adapter/assets.ts b/packages/framework/store/src/adapter/assets.ts index d483369b6acd..707475f94c32 100644 --- a/packages/framework/store/src/adapter/assets.ts +++ b/packages/framework/store/src/adapter/assets.ts @@ -6,7 +6,7 @@ export class MemoryBlobManager { private readonly _map = new Map<string, Blob>(); private readonly _blobsRef = new Map<string, number>(); - async get(key: string) { + get(key: string) { return this._map.get(key) ?? null; } @@ -16,20 +16,20 @@ export class MemoryBlobManager { return _key; } - async delete(key: string) { + delete(key: string) { this._map.delete(key); } - async list() { + list() { return Array.from(this._map.keys()); } - async gc() { - const blobs = await this.list(); + gc() { + const blobs = this.list(); blobs.forEach(blobId => { const ref = this._blobsRef.get(blobId); if (!ref || ref <= 0) { - this.delete(blobId).catch(console.error); + this.delete(blobId); this._blobsRef.delete(blobId); } }); diff --git a/packages/framework/store/src/adapter/base.ts b/packages/framework/store/src/adapter/base.ts index 7e5711089036..e759e1c5e36e 100644 --- a/packages/framework/store/src/adapter/base.ts +++ b/packages/framework/store/src/adapter/base.ts @@ -50,22 +50,28 @@ export abstract class BaseAdapter<AdapterTarget = unknown> { abstract fromPageSnapshot( payload: FromPageSnapshotPayload - ): Promise<FromPageSnapshotResult<AdapterTarget>>; + ): + | Promise<FromPageSnapshotResult<AdapterTarget>> + | FromPageSnapshotResult<AdapterTarget>; abstract fromBlockSnapshot( payload: FromBlockSnapshotPayload - ): Promise<FromBlockSnapshotResult<AdapterTarget>>; + ): + | Promise<FromBlockSnapshotResult<AdapterTarget>> + | FromBlockSnapshotResult<AdapterTarget>; abstract fromSliceSnapshot( payload: FromSliceSnapshotPayload - ): Promise<FromSliceSnapshotResult<AdapterTarget>>; + ): + | Promise<FromSliceSnapshotResult<AdapterTarget>> + | FromSliceSnapshotResult<AdapterTarget>; abstract toPageSnapshot( payload: ToPageSnapshotPayload<AdapterTarget> - ): Promise<PageSnapshot>; + ): Promise<PageSnapshot> | PageSnapshot; abstract toBlockSnapshot( payload: ToBlockSnapshotPayload<AdapterTarget> - ): Promise<BlockSnapshot>; + ): Promise<BlockSnapshot> | BlockSnapshot; abstract toSliceSnapshot( payload: ToSliceSnapshotPayload<AdapterTarget> - ): Promise<SliceSnapshot | null>; + ): Promise<SliceSnapshot | null> | SliceSnapshot | null; applyConfigs(configs: Map<string, unknown>) { this.configs = new Map([...configs]); @@ -77,7 +83,7 @@ type Keyof<T> = T extends unknown ? keyof T : never; type WalkerFn<ONode extends object, TNode extends object> = ( o: NodeProps<ONode>, context: ASTWalkerContext<TNode> -) => Promise<void>; +) => Promise<void> | void; type NodeProps<Node extends object> = { node: Node; diff --git a/packages/framework/store/src/persistence/blob/memory-storage.ts b/packages/framework/store/src/persistence/blob/memory-storage.ts index 9fccf4056204..be6a5975614c 100644 --- a/packages/framework/store/src/persistence/blob/memory-storage.ts +++ b/packages/framework/store/src/persistence/blob/memory-storage.ts @@ -4,17 +4,17 @@ export const createMemoryStorage = (): BlobStorage => { const memoryStorage = new Map<string, Blob>(); return { crud: { - get: async (key: string) => { + get: (key: string) => { return memoryStorage.get(key) ?? null; }, - set: async (key: string, value: Blob) => { + set: (key: string, value: Blob) => { memoryStorage.set(key, value); return key; }, - delete: async (key: string) => { + delete: (key: string) => { memoryStorage.delete(key); }, - list: async () => { + list: () => { return Array.from(memoryStorage.keys()); }, }, diff --git a/packages/framework/store/src/persistence/blob/mock-server-storage.ts b/packages/framework/store/src/persistence/blob/mock-server-storage.ts index bfc5db1da42f..5dfde641bcef 100644 --- a/packages/framework/store/src/persistence/blob/mock-server-storage.ts +++ b/packages/framework/store/src/persistence/blob/mock-server-storage.ts @@ -40,7 +40,7 @@ export function createSimpleServerStorage(id: string): BlobStorage { method: 'DELETE', }); }, - list: async () => { + list: () => { return Array.from(localCache.keys()); }, }, diff --git a/packages/framework/store/src/persistence/blob/types.ts b/packages/framework/store/src/persistence/blob/types.ts index 77124d4a3d26..4180ae0d0684 100644 --- a/packages/framework/store/src/persistence/blob/types.ts +++ b/packages/framework/store/src/persistence/blob/types.ts @@ -1,17 +1,17 @@ export interface BlobStorageCRUD { - get: (key: string) => Promise<Blob | null>; - set: (key: string, value: Blob) => Promise<string>; - delete: (key: string) => Promise<void>; - list: () => Promise<string[]>; + get: (key: string) => Promise<Blob | null> | Blob | null; + set: (key: string, value: Blob) => Promise<string> | string; + delete: (key: string) => Promise<void> | void; + list: () => Promise<string[]> | string[]; } export interface BlobManager { - get: (key: string) => Promise<Blob | null>; - set: (value: Blob, key?: string) => Promise<string>; - delete: (key: string) => Promise<void>; - list: () => Promise<string[]>; + get: (key: string) => Promise<Blob | null> | Blob | null; + set: (value: Blob, key?: string) => Promise<string> | string; + delete: (key: string) => Promise<void> | void; + list: () => Promise<string[]> | string[]; - gc: () => Promise<void>; + gc: () => Promise<void> | void; increaseRef: (blobId: string) => void; decreaseRef: (blobId: string) => void; } diff --git a/packages/framework/store/src/transformer/base.ts b/packages/framework/store/src/transformer/base.ts index 25b50feff1a1..06d69b52a39f 100644 --- a/packages/framework/store/src/transformer/base.ts +++ b/packages/framework/store/src/transformer/base.ts @@ -47,9 +47,11 @@ export class BaseBlockTransformer<Props extends object = object> { ); } - async fromSnapshot({ + fromSnapshot({ json, - }: FromSnapshotPayload): Promise<SnapshotReturn<Props>> { + }: FromSnapshotPayload): + | Promise<SnapshotReturn<Props>> + | SnapshotReturn<Props> { const { flavour, id, version, props: _props } = json; const props = this._propsFromSnapshot(_props); @@ -62,9 +64,9 @@ export class BaseBlockTransformer<Props extends object = object> { }; } - async toSnapshot({ + toSnapshot({ model, - }: ToSnapshotPayload<Props>): Promise<BlockSnapshotLeaf> { + }: ToSnapshotPayload<Props>): Promise<BlockSnapshotLeaf> | BlockSnapshotLeaf { const { id, flavour, version } = model; const props = this._propsToSnapshot(model); diff --git a/packages/framework/store/src/transformer/job.ts b/packages/framework/store/src/transformer/job.ts index 62cac47f07dc..7965a86a4c85 100644 --- a/packages/framework/store/src/transformer/job.ts +++ b/packages/framework/store/src/transformer/job.ts @@ -277,7 +277,7 @@ export class Job { PageSnapshotSchema.parse(snapshot); const { meta, blocks } = snapshot; const page = this._workspace.createPage({ id: meta.id }); - await page.load(); + page.load(); this._importPageMeta(page, meta); await this.snapshotToBlock(blocks, page); this._slots.afterImport.emit({ diff --git a/packages/framework/store/src/workspace/addon/blob.ts b/packages/framework/store/src/workspace/addon/blob.ts index 235931b2e0f4..43b5d0bc2439 100644 --- a/packages/framework/store/src/workspace/addon/blob.ts +++ b/packages/framework/store/src/workspace/addon/blob.ts @@ -28,24 +28,22 @@ export const blob = addOnFactory<keyof BlobAddon>( let found = false; let count = 0; return new Promise(res => { - this._storages.forEach(storage => { - storage.crud - .get(id) - .then(result => { - if (result && !found) { - found = true; - res(result); - } - if (++count === this._storages.length && !found) { - res(null); - } - }) - .catch(e => { - console.error(e); - if (++count === this._storages.length && !found) { - res(null); - } - }); + void this._storages.map(async storage => { + try { + const blob = await storage.crud.get(id); + if (blob && !found) { + found = true; + res(blob); + } + if (++count === this._storages.length && !found) { + res(null); + } + } catch (e) { + console.error(e); + if (++count === this._storages.length && !found) { + res(null); + } + } }); }); }, @@ -72,7 +70,7 @@ export const blob = addOnFactory<keyof BlobAddon>( blobs.forEach(blobId => { const ref = this._blobsRef.get(blobId); if (!ref || ref <= 0) { - this.blob.delete(blobId).catch(console.error); + this.blob.delete(blobId)?.catch(console.error); this._blobsRef.delete(blobId); } }); diff --git a/packages/framework/store/src/workspace/page.ts b/packages/framework/store/src/workspace/page.ts index e0bb82de12d6..2c61492cdc65 100644 --- a/packages/framework/store/src/workspace/page.ts +++ b/packages/framework/store/src/workspace/page.ts @@ -802,7 +802,7 @@ export class Page extends Space<FlatBlockMap> { } /** @deprecated use page.load() instead */ - async waitForLoaded() { - await this.load(); + waitForLoaded() { + this.load(); } } diff --git a/packages/framework/sync/src/doc/impl/broadcast.ts b/packages/framework/sync/src/doc/impl/broadcast.ts index 12f55541744a..842e9fc2cc8b 100644 --- a/packages/framework/sync/src/doc/impl/broadcast.ts +++ b/packages/framework/sync/src/doc/impl/broadcast.ts @@ -27,10 +27,7 @@ export class BroadcastChannelDocSource implements DocSource { }); } - async pull( - docId: string, - state: Uint8Array - ): Promise<{ data: Uint8Array; state?: Uint8Array | undefined } | null> { + pull(docId: string, state: Uint8Array) { const update = this.docMap.get(docId); if (!update) return null; @@ -38,7 +35,7 @@ export class BroadcastChannelDocSource implements DocSource { return { data: diff, state: encodeStateVectorFromUpdate(update) }; } - async push(docId: string, data: Uint8Array): Promise<void> { + push(docId: string, data: Uint8Array) { const update = this.docMap.get(docId); if (update) { this.docMap.set(docId, mergeUpdates([update, data])); @@ -54,7 +51,7 @@ export class BroadcastChannelDocSource implements DocSource { } satisfies ChannelMessage); } - async subscribe(cb: (docId: string, data: Uint8Array) => void) { + subscribe(cb: (docId: string, data: Uint8Array) => void) { const abortController = new AbortController(); this.channel.addEventListener( 'message', diff --git a/packages/framework/sync/src/doc/impl/indexeddb.ts b/packages/framework/sync/src/doc/impl/indexeddb.ts index e06fa039a064..d67a12728cb0 100644 --- a/packages/framework/sync/src/doc/impl/indexeddb.ts +++ b/packages/framework/sync/src/doc/impl/indexeddb.ts @@ -97,7 +97,7 @@ export class IndexedDBDocSource implements DocSource { } satisfies ChannelMessage); } - async subscribe(cb: (docId: string, data: Uint8Array) => void) { + subscribe(cb: (docId: string, data: Uint8Array) => void) { function onMessage(event: MessageEvent<ChannelMessage>) { const { type, payload } = event.data; if (type === 'db-updated') { diff --git a/packages/framework/sync/src/doc/impl/memory.ts b/packages/framework/sync/src/doc/impl/memory.ts index 5ffa09392363..9e21d52c41c5 100644 --- a/packages/framework/sync/src/doc/impl/memory.ts +++ b/packages/framework/sync/src/doc/impl/memory.ts @@ -5,10 +5,7 @@ export class MemoryDocSource implements DocSource { memory = new Map<string, Uint8Array>(); name: string = 'testing'; - async pull( - docId: string, - _: Uint8Array - ): Promise<{ data: Uint8Array; state?: Uint8Array | undefined } | null> { + pull(docId: string, _: Uint8Array) { const key = docId; const data = this.memory.get(key); if (data) { @@ -17,16 +14,16 @@ export class MemoryDocSource implements DocSource { return null; } } - async push(docId: string, data: Uint8Array): Promise<void> { + push(docId: string, data: Uint8Array) { const key = docId; const oldData = this.memory.get(key); const update = mergeUpdates(oldData ? [oldData, data] : [data]); this.memory.set(key, update); } - async subscribe( + subscribe( _cb: (docId: string, data: Uint8Array) => void, _disconnect: (reason: string) => void - ): Promise<() => void> { + ) { return () => {}; } } diff --git a/packages/framework/sync/src/doc/source.ts b/packages/framework/sync/src/doc/source.ts index 664011508cad..b4d7f52bb95e 100644 --- a/packages/framework/sync/src/doc/source.ts +++ b/packages/framework/sync/src/doc/source.ts @@ -7,8 +7,11 @@ export interface DocSource { pull( docId: string, state: Uint8Array - ): Promise<{ data: Uint8Array; state?: Uint8Array } | null>; - push(docId: string, data: Uint8Array): Promise<void>; + ): + | Promise<{ data: Uint8Array; state?: Uint8Array } | null> + | { data: Uint8Array; state?: Uint8Array } + | null; + push(docId: string, data: Uint8Array): Promise<void> | void; /** * Subscribe to updates from peer @@ -21,5 +24,5 @@ export interface DocSource { subscribe( cb: (docId: string, data: Uint8Array) => void, disconnect: (reason: string) => void - ): Promise<() => void>; + ): Promise<() => void> | (() => void); } diff --git a/packages/framework/sync/src/utils/__tests__/throw-if-aborted.spec.ts b/packages/framework/sync/src/utils/__tests__/throw-if-aborted.spec.ts index be23b35d6fa5..da695f62e2c9 100644 --- a/packages/framework/sync/src/utils/__tests__/throw-if-aborted.spec.ts +++ b/packages/framework/sync/src/utils/__tests__/throw-if-aborted.spec.ts @@ -3,7 +3,7 @@ import { describe, expect, test } from 'vitest'; import { throwIfAborted } from '../throw-if-aborted.js'; describe('throw-if-aborted', () => { - test('basic', async () => { + test('basic', () => { const abortController = new AbortController(); const abortSignal = abortController.signal; expect(throwIfAborted(abortSignal)).toBe(true); diff --git a/packages/playground/apps/components/debug-menu.ts b/packages/playground/apps/components/debug-menu.ts index ad4a6f385206..9c2fcac5fd85 100644 --- a/packages/playground/apps/components/debug-menu.ts +++ b/packages/playground/apps/components/debug-menu.ts @@ -388,7 +388,7 @@ export class DebugMenu extends ShadowlessElement { HtmlTransformer.exportPage(this.page).catch(console.error); } - private async _exportMarkDown() { + private _exportMarkDown() { MarkdownTransformer.exportPage(this.page).catch(console.error); } diff --git a/packages/playground/apps/components/pages-panel.ts b/packages/playground/apps/components/pages-panel.ts index 1538fde79e6a..9003aae0f50a 100644 --- a/packages/playground/apps/components/pages-panel.ts +++ b/packages/playground/apps/components/pages-panel.ts @@ -114,7 +114,7 @@ export class PagesPanel extends WithDisposable(ShadowlessElement) { function createPageBlock(workspace: Workspace) { const id = workspace.idGenerator(); - createDefaultPage(workspace, { id }).catch(console.error); + createDefaultPage(workspace, { id }); } declare global { diff --git a/packages/playground/apps/components/quick-edgeless-menu.ts b/packages/playground/apps/components/quick-edgeless-menu.ts index c546e4bc889e..8ad68078589a 100644 --- a/packages/playground/apps/components/quick-edgeless-menu.ts +++ b/packages/playground/apps/components/quick-edgeless-menu.ts @@ -15,6 +15,7 @@ import '@shoelace-style/shoelace/dist/components/tooltip/tooltip.js'; import '@shoelace-style/shoelace/dist/components/alert/alert.js'; import '@shoelace-style/shoelace/dist/themes/light.css'; import '@shoelace-style/shoelace/dist/themes/dark.css'; +import '@shoelace-style/shoelace/dist/components/input/input.js'; import type { AffineTextAttributes } from '@blocksuite/blocks'; import { @@ -300,7 +301,7 @@ export class QuickEdgelessMenu extends ShadowlessElement { this.leftSidePanel.toggle(this.pagesPanel); } - override async firstUpdated() { + override firstUpdated() { this.page.slots.historyUpdated.on(() => { this._canUndo = this.page.canUndo; this._canRedo = this.page.canRedo; diff --git a/packages/playground/apps/starter/data/database.ts b/packages/playground/apps/starter/data/database.ts index 4876e91e826a..6fd2598b3e5b 100644 --- a/packages/playground/apps/starter/data/database.ts +++ b/packages/playground/apps/starter/data/database.ts @@ -13,13 +13,11 @@ import { Text, type Workspace } from '@blocksuite/store'; import { type InitFn } from './utils.js'; -// eslint-disable-next-line @typescript-eslint/no-misused-promises -export const database: InitFn = async (workspace: Workspace, id: string) => { +export const database: InitFn = (workspace: Workspace, id: string) => { const page = workspace.createPage({ id }); page.awarenessStore.setFlag('enable_expand_database_block', true); - // eslint-disable-next-line @typescript-eslint/no-misused-promises - await page.load(async () => { + page.load(() => { // Add page block and surface block at root level const pageBlockId = page.addBlock('affine:page', { title: new Text('BlockSuite Playground'), @@ -41,86 +39,93 @@ export const database: InitFn = async (workspace: Workspace, id: string) => { noteId ); - await new Promise(resolve => requestAnimationFrame(resolve)); + new Promise(resolve => requestAnimationFrame(resolve)) + .then(() => { + const service = window.host.std.spec.getService( + 'affine:database' + ) as DatabaseService; + service.initDatabaseBlock(page, model, databaseId, 'table', true); + const database = page.getBlockById(databaseId) as DatabaseBlockModel; + database.addColumn( + 'end', + numberPureColumnConfig.create(numberPureColumnConfig.name) + ); + database.addColumn( + 'end', + richTextPureColumnConfig.create(richTextPureColumnConfig.name) + ); + database.addColumn( + 'end', + datePureColumnConfig.create(datePureColumnConfig.name) + ); + database.addColumn( + 'end', + linkPureColumnConfig.create(linkPureColumnConfig.name) + ); + database.addColumn( + 'end', + progressPureColumnConfig.create(progressPureColumnConfig.name) + ); + database.addColumn( + 'end', + checkboxPureColumnConfig.create(checkboxPureColumnConfig.name) + ); + database.addColumn( + 'end', + multiSelectColumnConfig.create(multiSelectColumnConfig.name) + ); + database.updateView(database.views[0].id, () => { + return { + groupBy: { + columnId: database.columns[1].id, + type: 'groupBy', + name: 'select', + }, + }; + }); + const paragraphTypes: ParagraphType[] = [ + 'text', + 'quote', + 'h1', + 'h2', + 'h3', + 'h4', + 'h5', + 'h6', + ]; + paragraphTypes.forEach(type => { + page.addBlock( + 'affine:paragraph', + { type: type, text: new Text(`Paragraph type ${type}`) }, + databaseId + ); + }); + const listTypes: ListType[] = [ + 'numbered', + 'bulleted', + 'todo', + 'toggle', + ]; - const service = window.host.std.spec.getService( - 'affine:database' - ) as DatabaseService; - service.initDatabaseBlock(page, model, databaseId, 'table', true); - const database = page.getBlockById(databaseId) as DatabaseBlockModel; - database.addColumn( - 'end', - numberPureColumnConfig.create(numberPureColumnConfig.name) - ); - database.addColumn( - 'end', - richTextPureColumnConfig.create(richTextPureColumnConfig.name) - ); - database.addColumn( - 'end', - datePureColumnConfig.create(datePureColumnConfig.name) - ); - database.addColumn( - 'end', - linkPureColumnConfig.create(linkPureColumnConfig.name) - ); - database.addColumn( - 'end', - progressPureColumnConfig.create(progressPureColumnConfig.name) - ); - database.addColumn( - 'end', - checkboxPureColumnConfig.create(checkboxPureColumnConfig.name) - ); - database.addColumn( - 'end', - multiSelectColumnConfig.create(multiSelectColumnConfig.name) - ); - database.updateView(database.views[0].id, () => { - return { - groupBy: { - columnId: database.columns[1].id, - type: 'groupBy', - name: 'select', - }, - }; - }); - const paragraphTypes: ParagraphType[] = [ - 'text', - 'quote', - 'h1', - 'h2', - 'h3', - 'h4', - 'h5', - 'h6', - ]; - paragraphTypes.forEach(type => { - page.addBlock( - 'affine:paragraph', - { type: type, text: new Text(`Paragraph type ${type}`) }, - databaseId - ); - }); - const listTypes: ListType[] = ['numbered', 'bulleted', 'todo', 'toggle']; + listTypes.forEach(type => { + page.addBlock( + 'affine:list', + { type: type, text: new Text(`List type ${type}`) }, + databaseId + ); + }); + // Add a paragraph after database + page.addBlock('affine:paragraph', {}, noteId); + page.addBlock('affine:paragraph', {}, noteId); + page.addBlock('affine:paragraph', {}, noteId); + page.addBlock('affine:paragraph', {}, noteId); + page.addBlock('affine:paragraph', {}, noteId); + database.addView('kanban'); - listTypes.forEach(type => { - page.addBlock( - 'affine:list', - { type: type, text: new Text(`List type ${type}`) }, - databaseId - ); - }); - // Add a paragraph after database - page.addBlock('affine:paragraph', {}, noteId); - page.addBlock('affine:paragraph', {}, noteId); - page.addBlock('affine:paragraph', {}, noteId); - page.addBlock('affine:paragraph', {}, noteId); - page.addBlock('affine:paragraph', {}, noteId); - database.addView('kanban'); + page.resetHistory(); + }) + .catch(console.error); }); - - page.resetHistory(); }; database.id = 'database'; diff --git a/packages/playground/apps/starter/data/embed.ts b/packages/playground/apps/starter/data/embed.ts index f18396df6701..15227d72b24b 100644 --- a/packages/playground/apps/starter/data/embed.ts +++ b/packages/playground/apps/starter/data/embed.ts @@ -2,12 +2,11 @@ import { Text, type Workspace } from '@blocksuite/store'; import { type InitFn } from './utils.js'; -// eslint-disable-next-line @typescript-eslint/no-misused-promises -export const embed: InitFn = async (workspace: Workspace, id: string) => { +export const embed: InitFn = (workspace: Workspace, id: string) => { const page = workspace.getPage(id) ?? workspace.createPage({ id }); page.clear(); - await page.load(() => { + page.load(() => { // Add page block and surface block at root level const pageBlockId = page.addBlock('affine:page', { title: new Text(), diff --git a/packages/playground/apps/starter/data/empty.ts b/packages/playground/apps/starter/data/empty.ts index 4bd85f3977f7..a27cabeb6974 100644 --- a/packages/playground/apps/starter/data/empty.ts +++ b/packages/playground/apps/starter/data/empty.ts @@ -2,12 +2,11 @@ import { Text, type Workspace } from '@blocksuite/store'; import { type InitFn } from './utils.js'; -// eslint-disable-next-line @typescript-eslint/no-misused-promises -export const empty: InitFn = async (workspace: Workspace, id: string) => { +export const empty: InitFn = (workspace: Workspace, id: string) => { const page = workspace.getPage(id) ?? workspace.createPage({ id }); page.clear(); - await page.load(() => { + page.load(() => { // Add page block and surface block at root level const pageBlockId = page.addBlock('affine:page', { title: new Text(), diff --git a/packages/playground/apps/starter/data/heavy-whiteboard.ts b/packages/playground/apps/starter/data/heavy-whiteboard.ts index 4c130c9aa511..75d26a2f68ef 100644 --- a/packages/playground/apps/starter/data/heavy-whiteboard.ts +++ b/packages/playground/apps/starter/data/heavy-whiteboard.ts @@ -11,15 +11,11 @@ import { type InitFn } from './utils.js'; const SHAPE_TYPES = ['rect', 'triangle', 'ellipse', 'diamond']; const params = new URLSearchParams(location.search); -// eslint-disable-next-line @typescript-eslint/no-misused-promises -export const heavyWhiteboard: InitFn = async ( - workspace: Workspace, - id: string -) => { +export const heavyWhiteboard: InitFn = (workspace: Workspace, id: string) => { const count = Number(params.get('count')) || 100; const page = workspace.createPage({ id }); - await page.load(() => { + page.load(() => { // Add page block and surface block at root level const pageBlockId = page.addBlock('affine:page', { title: new Text(), diff --git a/packages/playground/apps/starter/data/heavy.ts b/packages/playground/apps/starter/data/heavy.ts index 6cc39d877ca7..983a3c211944 100644 --- a/packages/playground/apps/starter/data/heavy.ts +++ b/packages/playground/apps/starter/data/heavy.ts @@ -4,12 +4,11 @@ import { type InitFn } from './utils.js'; const params = new URLSearchParams(location.search); -// eslint-disable-next-line @typescript-eslint/no-misused-promises -export const heavy: InitFn = async (workspace: Workspace, pageId: string) => { +export const heavy: InitFn = (workspace: Workspace, pageId: string) => { const count = Number(params.get('count')) || 1000; const page = workspace.createPage({ id: pageId }); - await page.load(() => { + page.load(() => { // Add page block and surface block at root level const pageBlockId = page.addBlock('affine:page', { title: new Text(), diff --git a/packages/playground/apps/starter/data/linked.ts b/packages/playground/apps/starter/data/linked.ts index 222b746ea800..62b4a66cb352 100644 --- a/packages/playground/apps/starter/data/linked.ts +++ b/packages/playground/apps/starter/data/linked.ts @@ -2,8 +2,7 @@ import { Text, type Workspace } from '@blocksuite/store'; import { type InitFn } from './utils.js'; -// eslint-disable-next-line @typescript-eslint/no-misused-promises -export const linked: InitFn = async (workspace: Workspace, id: string) => { +export const linked: InitFn = (workspace: Workspace, id: string) => { const pageA = workspace.getPage(id) ?? workspace.createPage({ id }); const pageBId = 'page:page-linked-doc'; @@ -18,7 +17,7 @@ export const linked: InitFn = async (workspace: Workspace, id: string) => { pageB.clear(); pageC.clear(); - await pageB.load(() => { + pageB.load(() => { const pageBlockId = pageB.addBlock('affine:page', { title: new Text(''), }); @@ -31,7 +30,7 @@ export const linked: InitFn = async (workspace: Workspace, id: string) => { pageB.addBlock('affine:paragraph', {}, noteId); }); - await pageC.load(() => { + pageC.load(() => { const pageBlockId = pageC.addBlock('affine:page', { title: new Text(''), }); diff --git a/packages/playground/apps/starter/data/multiple-editor.ts b/packages/playground/apps/starter/data/multiple-editor.ts index ad6a17329dc1..46964bb1f74d 100644 --- a/packages/playground/apps/starter/data/multiple-editor.ts +++ b/packages/playground/apps/starter/data/multiple-editor.ts @@ -3,10 +3,9 @@ import { Text, type Workspace } from '@blocksuite/store'; import { type InitFn } from './utils.js'; -// eslint-disable-next-line @typescript-eslint/no-misused-promises -export const multiEditor: InitFn = async (workspace: Workspace, id: string) => { +export const multiEditor: InitFn = (workspace: Workspace, id: string) => { const page = workspace.createPage({ id }); - await page.load(() => { + page.load(() => { // Add page block and surface block at root level const pageBlockId = page.addBlock('affine:page', { title: new Text(), @@ -48,13 +47,12 @@ multiEditor.id = 'multiple-editor'; multiEditor.displayName = 'Multiple Editor Example'; multiEditor.description = 'Multiple Editor basic example'; -// eslint-disable-next-line @typescript-eslint/no-misused-promises -export const multiEditorVertical: InitFn = async ( +export const multiEditorVertical: InitFn = ( workspace: Workspace, pageId: string ) => { const page = workspace.createPage({ id: pageId }); - await page.load(() => { + page.load(() => { // Add page block and surface block at root level const pageBlockId = page.addBlock('affine:page', { title: new Text(), diff --git a/packages/playground/apps/starter/data/pending-structs.ts b/packages/playground/apps/starter/data/pending-structs.ts index 55eecd012038..bf547bdf8bdd 100644 --- a/packages/playground/apps/starter/data/pending-structs.ts +++ b/packages/playground/apps/starter/data/pending-structs.ts @@ -3,15 +3,11 @@ import { Text } from '@blocksuite/store'; import type { InitFn } from './utils.js'; -// eslint-disable-next-line @typescript-eslint/no-misused-promises -export const pendingStructs: InitFn = async ( - workspace: Workspace, - id: string -) => { +export const pendingStructs: InitFn = (workspace: Workspace, id: string) => { const page = workspace.createPage({ id }); const tempPage = workspace.createPage({ id: 'tempPage' }); - await page.load(); - await tempPage.load(() => { + page.load(); + tempPage.load(() => { const pageBlockId = tempPage.addBlock('affine:page', { title: new Text('Pending Structs'), }); diff --git a/packages/playground/apps/starter/data/preset.ts b/packages/playground/apps/starter/data/preset.ts index a204b5b0972b..58ab7c33b0a3 100644 --- a/packages/playground/apps/starter/data/preset.ts +++ b/packages/playground/apps/starter/data/preset.ts @@ -5,7 +5,6 @@ import { type InitFn } from './utils.js'; const presetMarkdown = `Click the 🔁 button to switch between editors dynamically - they are fully compatible!`; -// eslint-disable-next-line @typescript-eslint/no-misused-promises export const preset: InitFn = async (workspace: Workspace, id: string) => { const page = workspace.createPage({ id }); page.load(); diff --git a/packages/playground/apps/starter/data/synced.ts b/packages/playground/apps/starter/data/synced.ts index b10fc2bd56b5..fc5dd4501dae 100644 --- a/packages/playground/apps/starter/data/synced.ts +++ b/packages/playground/apps/starter/data/synced.ts @@ -11,7 +11,7 @@ This article has also been published [in PDF format](https://www.inkandswitch.co We welcome your feedback: [@inkandswitch](https://twitter.com/inkandswitch) or hello@inkandswitch.com.`; -export const synced: InitFn = async (workspace: Workspace, id: string) => { +export const synced: InitFn = (workspace: Workspace, id: string) => { const pageMain = workspace.getPage(id) ?? workspace.createPage({ id }); const pageSyncedPage = workspace.createPage({ id: 'synced-page' }); const pageSyncedEdgeless = workspace.createPage({ id: 'synced-edgeless' }); @@ -19,8 +19,7 @@ export const synced: InitFn = async (workspace: Workspace, id: string) => { pageSyncedPage.clear(); pageSyncedEdgeless.clear(); - // eslint-disable-next-line @typescript-eslint/no-misused-promises - pageSyncedPage.load(async () => { + pageSyncedPage.load(() => { // Add page block and surface block at root level const pageBlockId = pageSyncedPage.addBlock('affine:page', { title: new Text('Synced - Page View'), @@ -32,15 +31,14 @@ export const synced: InitFn = async (workspace: Workspace, id: string) => { const noteId = pageSyncedPage.addBlock('affine:note', {}, pageBlockId); // Add markdown to note block - await MarkdownTransformer.importMarkdown({ + MarkdownTransformer.importMarkdown({ page: pageSyncedPage, noteId, markdown: syncedPageMarkdown, - }); + }).catch(console.error); }); - // eslint-disable-next-line @typescript-eslint/no-misused-promises - pageSyncedEdgeless.load(async () => { + pageSyncedEdgeless.load(() => { // Add page block and surface block at root level const pageBlockId = pageSyncedEdgeless.addBlock('affine:page', { title: new Text('Synced - Edgeless View'), @@ -52,15 +50,14 @@ export const synced: InitFn = async (workspace: Workspace, id: string) => { const noteId = pageSyncedEdgeless.addBlock('affine:note', {}, pageBlockId); // Add markdown to note block - await MarkdownTransformer.importMarkdown({ + MarkdownTransformer.importMarkdown({ page: pageSyncedEdgeless, noteId, markdown: syncedPageMarkdown, - }); + }).catch(console.error); }); - // eslint-disable-next-line @typescript-eslint/no-misused-promises - pageMain.load(async () => { + pageMain.load(() => { // Add page block and surface block at root level const pageBlockId = pageMain.addBlock('affine:page', { title: new Text('Home page, having synced blocks'), @@ -70,11 +67,11 @@ export const synced: InitFn = async (workspace: Workspace, id: string) => { const noteId = pageMain.addBlock('affine:note', {}, pageBlockId); // Add markdown to note block - await MarkdownTransformer.importMarkdown({ + MarkdownTransformer.importMarkdown({ page: pageMain, noteId, markdown: syncedPageMarkdown, - }); + }).catch(console.error); // Add synced block - self pageMain.addBlock( diff --git a/packages/playground/apps/starter/data/utils.ts b/packages/playground/apps/starter/data/utils.ts index 7d7279811fdc..27b170d3b2f0 100644 --- a/packages/playground/apps/starter/data/utils.ts +++ b/packages/playground/apps/starter/data/utils.ts @@ -1,7 +1,7 @@ import { type Workspace } from '@blocksuite/store'; export interface InitFn { - (workspace: Workspace, pageId: string): Promise<void>; + (workspace: Workspace, pageId: string): Promise<void> | void; id: string; displayName: string; description: string; diff --git a/packages/playground/apps/starter/data/version-mismatch.ts b/packages/playground/apps/starter/data/version-mismatch.ts index bbd82094ef1b..69ef75d686b0 100644 --- a/packages/playground/apps/starter/data/version-mismatch.ts +++ b/packages/playground/apps/starter/data/version-mismatch.ts @@ -3,16 +3,12 @@ import { Workspace } from '@blocksuite/store'; import type { InitFn } from './utils.js'; -// eslint-disable-next-line @typescript-eslint/no-misused-promises -export const versionMismatch: InitFn = async ( - workspace: Workspace, - id: string -) => { +export const versionMismatch: InitFn = (workspace: Workspace, id: string) => { const page = workspace.createPage({ id }); const tempPage = workspace.createPage({ id: 'tempPage' }); - await page.load(); + page.load(); - await tempPage.load(() => { + tempPage.load(() => { const pageBlockId = tempPage.addBlock('affine:page', {}); tempPage.addBlock('affine:surface', {}, pageBlockId); const noteId = tempPage.addBlock( diff --git a/packages/playground/apps/starter/utils/workspace.ts b/packages/playground/apps/starter/utils/workspace.ts index ff57e27066e7..ab200da04358 100644 --- a/packages/playground/apps/starter/utils/workspace.ts +++ b/packages/playground/apps/starter/utils/workspace.ts @@ -102,7 +102,7 @@ export async function initStarterPageWorkspace(workspace: Workspace) { // use built-in init function const functionMap = new Map< string, - (workspace: Workspace, id: string) => Promise<void> + (workspace: Workspace, id: string) => Promise<void> | void >(); Object.values( (await import('../data/index.js')) as Record<string, InitFn> diff --git a/packages/playground/apps/sync/websocket/doc.ts b/packages/playground/apps/sync/websocket/doc.ts index f013052b6b30..82d43e0f1b89 100644 --- a/packages/playground/apps/sync/websocket/doc.ts +++ b/packages/playground/apps/sync/websocket/doc.ts @@ -22,10 +22,7 @@ export class WebSocketDocSource implements DocSource { ); } - async pull( - docId: string, - state: Uint8Array - ): Promise<{ data: Uint8Array; state?: Uint8Array | undefined } | null> { + pull(docId: string, state: Uint8Array) { const update = this.docMap.get(docId); if (!update) return null; @@ -33,7 +30,7 @@ export class WebSocketDocSource implements DocSource { return { data: diff, state: encodeStateVectorFromUpdate(update) }; } - async push(docId: string, data: Uint8Array): Promise<void> { + push(docId: string, data: Uint8Array) { const update = this.docMap.get(docId); if (update) { this.docMap.set(docId, mergeUpdates([update, data])); @@ -55,7 +52,7 @@ export class WebSocketDocSource implements DocSource { ); } - async subscribe(cb: (docId: string, data: Uint8Array) => void) { + subscribe(cb: (docId: string, data: Uint8Array) => void) { const abortController = new AbortController(); this.ws.addEventListener( 'message', diff --git a/packages/playground/examples/basic/doc/main.ts b/packages/playground/examples/basic/doc/main.ts index 2f55cd9594b0..2950dc50c14c 100644 --- a/packages/playground/examples/basic/doc/main.ts +++ b/packages/playground/examples/basic/doc/main.ts @@ -4,7 +4,7 @@ import '@blocksuite/presets/themes/affine.css'; import { createEmptyPage, DocEditor } from '@blocksuite/presets'; import { Text } from '@blocksuite/store'; -const page = await createEmptyPage().init(); +const page = createEmptyPage().init(); const editor = new DocEditor(); editor.page = page; document.body.appendChild(editor); diff --git a/packages/playground/examples/basic/edgeless/main.ts b/packages/playground/examples/basic/edgeless/main.ts index 30e582dbd7f3..8a98b80a27aa 100644 --- a/packages/playground/examples/basic/edgeless/main.ts +++ b/packages/playground/examples/basic/edgeless/main.ts @@ -3,7 +3,7 @@ import '@blocksuite/presets/themes/affine.css'; import { createEmptyPage, EdgelessEditor } from '@blocksuite/presets'; -const page = await createEmptyPage().init(); +const page = createEmptyPage().init(); const editor = new EdgelessEditor(); editor.page = page; document.body.appendChild(editor); diff --git a/packages/playground/examples/multiple-editors/doc-doc/main.ts b/packages/playground/examples/multiple-editors/doc-doc/main.ts index 5e72aac4f6c6..f3cdd8e8df27 100644 --- a/packages/playground/examples/multiple-editors/doc-doc/main.ts +++ b/packages/playground/examples/multiple-editors/doc-doc/main.ts @@ -9,14 +9,14 @@ container.style.height = '100%'; container.style.width = '100%'; document.body.appendChild(container); -const page1 = await createEmptyPage().init(); +const page1 = createEmptyPage().init(); const editor1 = new DocEditor(); editor1.page = page1; editor1.style.flex = '1'; editor1.style.borderRight = '1px solid #ccc'; container.appendChild(editor1); -const page2 = await createEmptyPage().init(); +const page2 = createEmptyPage().init(); const editor2 = new DocEditor(); editor2.page = page2; editor2.style.flex = '1'; diff --git a/packages/playground/examples/multiple-editors/doc-edgeless/main.ts b/packages/playground/examples/multiple-editors/doc-edgeless/main.ts index 14f089312b9b..a39520539550 100644 --- a/packages/playground/examples/multiple-editors/doc-edgeless/main.ts +++ b/packages/playground/examples/multiple-editors/doc-edgeless/main.ts @@ -13,14 +13,14 @@ container.style.height = '100%'; container.style.width = '100%'; document.body.appendChild(container); -const page1 = await createEmptyPage().init(); +const page1 = createEmptyPage().init(); const editor1 = new DocEditor(); editor1.page = page1; editor1.style.flex = '2'; editor1.style.borderRight = '1px solid #ccc'; container.appendChild(editor1); -const page2 = await createEmptyPage().init(); +const page2 = createEmptyPage().init(); const editor2 = new EdgelessEditor(); editor2.page = page2; editor2.style.flex = '3'; diff --git a/packages/playground/examples/multiple-editors/edgeless-edgeless/main.ts b/packages/playground/examples/multiple-editors/edgeless-edgeless/main.ts index 462ec49669e2..e161b0a52937 100644 --- a/packages/playground/examples/multiple-editors/edgeless-edgeless/main.ts +++ b/packages/playground/examples/multiple-editors/edgeless-edgeless/main.ts @@ -9,14 +9,14 @@ container.style.height = '100%'; container.style.width = '100%'; document.body.appendChild(container); -const page1 = await createEmptyPage().init(); +const page1 = createEmptyPage().init(); const editor1 = new EdgelessEditor(); editor1.page = page1; editor1.style.flex = '1'; editor1.style.borderRight = '1px solid #ccc'; container.appendChild(editor1); -const page2 = await createEmptyPage().init(); +const page2 = createEmptyPage().init(); const editor2 = new EdgelessEditor(); editor2.page = page2; editor2.style.flex = '1'; diff --git a/packages/playground/scripts/hmr-plugin/fine-tune.ts b/packages/playground/scripts/hmr-plugin/fine-tune.ts index 68abaa68b0e4..76307c881758 100644 --- a/packages/playground/scripts/hmr-plugin/fine-tune.ts +++ b/packages/playground/scripts/hmr-plugin/fine-tune.ts @@ -22,7 +22,7 @@ export function fineTuneHmr({ async configureServer() { await init; }, - transform: async (code, id) => { + transform: (code, id) => { // only handle js/ts files const includeGlob = include.map(i => path.resolve(root, i)); const excludeGlob = exclude.map(i => path.resolve(root, i)); diff --git a/packages/presets/src/__tests__/edgeless/group.spec.ts b/packages/presets/src/__tests__/edgeless/group.spec.ts index 3a663c788ad8..6a285e79ae6d 100644 --- a/packages/presets/src/__tests__/edgeless/group.spec.ts +++ b/packages/presets/src/__tests__/edgeless/group.spec.ts @@ -15,7 +15,7 @@ describe('group', () => { return cleanup; }); - test('remove group without children', async () => { + test('remove group without children', () => { const map = new Workspace.Y.Map<boolean>(); const ids = Array.from({ length: 2 }).map(() => { const id = service.addElement('shape', { diff --git a/packages/presets/src/__tests__/edgeless/last-props.spec.ts b/packages/presets/src/__tests__/edgeless/last-props.spec.ts index 901f19845fca..a84d0710ca2f 100644 --- a/packages/presets/src/__tests__/edgeless/last-props.spec.ts +++ b/packages/presets/src/__tests__/edgeless/last-props.spec.ts @@ -22,7 +22,7 @@ describe('apply last props', () => { return cleanup; }); - test('shape', async () => { + test('shape', () => { const id = service.addElement('shape', { shapeType: 'rect' }); const shape = service.getElementById(id) as ShapeElementModel; expect(shape.fillColor).toBe('--affine-palette-shape-yellow'); @@ -35,7 +35,7 @@ describe('apply last props', () => { expect(secondShape.fillColor).toBe('--affine-palette-shape-orange'); }); - test('connector', async () => { + test('connector', () => { const id = service.addElement('connector', { mode: 0 }); const connector = service.getElementById(id) as ConnectorElementModel; expect(connector.stroke).toBe('--affine-palette-line-black'); @@ -50,7 +50,7 @@ describe('apply last props', () => { expect(secondConnector.strokeWidth).toBe(10); }); - test('brush', async () => { + test('brush', () => { const id = service.addElement('brush', {}); const brush = service.getElementById(id) as BrushElementModel; expect(brush.color).toBe('--affine-palette-line-black'); @@ -62,7 +62,7 @@ describe('apply last props', () => { expect(secondBrush.lineWidth).toBe(10); }); - test('text', async () => { + test('text', () => { const id = service.addElement('text', {}); const text = service.getElementById(id) as TextElementModel; expect(text.fontSize).toBe(24); diff --git a/packages/presets/src/__tests__/edgeless/layer.spec.ts b/packages/presets/src/__tests__/edgeless/layer.spec.ts index 5061ac47fee7..4cb825a8f59a 100644 --- a/packages/presets/src/__tests__/edgeless/layer.spec.ts +++ b/packages/presets/src/__tests__/edgeless/layer.spec.ts @@ -57,7 +57,7 @@ test('add new edgeless blocks or canvas elements should update layer automatical expect(service.layer.layers.length).toBe(2); }); -test('delete element should update layer automatically', async () => { +test('delete element should update layer automatically', () => { const id = addNote(page); const canvasElId = service.addElement('shape', { shapeType: 'rect', diff --git a/packages/presets/src/__tests__/edgeless/surface-model.spec.ts b/packages/presets/src/__tests__/edgeless/surface-model.spec.ts index 1519b0974c26..75a8b5ea7694 100644 --- a/packages/presets/src/__tests__/edgeless/surface-model.spec.ts +++ b/packages/presets/src/__tests__/edgeless/surface-model.spec.ts @@ -132,7 +132,7 @@ describe('group', () => { expect(shape2.group).toBe(group); }); - test('should return null if children property is updated', async () => { + test('should return null if children property is updated', () => { const id = model.addElement({ type: 'shape', }); @@ -350,7 +350,7 @@ describe('stash/pop', () => { expect(elementModel.yMap.get('strokeWidth')).toBe(6); }); - test('assign stashed property should emit event', async () => { + test('assign stashed property should emit event', () => { const id = model.addElement({ type: 'shape', strokeWidth: 4, @@ -366,7 +366,7 @@ describe('stash/pop', () => { expect(onchange).toHaveBeenCalledWith(id); }); - test('stashed property should also trigger derive decorator', async () => { + test('stashed property should also trigger derive decorator', () => { const id = model.addElement({ type: 'brush', points: [ diff --git a/packages/presets/src/__tests__/edgeless/template.spec.ts b/packages/presets/src/__tests__/edgeless/template.spec.ts index 2008672b2e99..f18fa65648aa 100644 --- a/packages/presets/src/__tests__/edgeless/template.spec.ts +++ b/packages/presets/src/__tests__/edgeless/template.spec.ts @@ -19,13 +19,13 @@ test('extension api', async () => { type: 'template', } as Template; const customTemplate = { - list: async () => { + list: () => { return [mockTemplate]; }, - categories: async () => { + categories: () => { return ['custom']; }, - search: async (_, __) => { + search: (_, __) => { return [mockTemplate]; }, } satisfies TemplateManager; diff --git a/packages/presets/src/__tests__/utils/setup.ts b/packages/presets/src/__tests__/utils/setup.ts index 355aac287057..18baa665fb98 100644 --- a/packages/presets/src/__tests__/utils/setup.ts +++ b/packages/presets/src/__tests__/utils/setup.ts @@ -36,7 +36,7 @@ function createWorkspaceOptions() { }; } -async function initWorkspace(workspace: Workspace) { +function initWorkspace(workspace: Workspace) { const page = workspace.createPage({ id: 'page:home' }); page.load(() => { @@ -76,7 +76,7 @@ export async function setupEditor(mode: 'edgeless' | 'page' = 'page') { window.workspace = workspace; - await initWorkspace(workspace); + initWorkspace(workspace); const appElement = await createEditor(workspace, mode); return () => { diff --git a/packages/presets/src/fragments/copilot-panel/chat/logic.ts b/packages/presets/src/fragments/copilot-panel/chat/logic.ts index 5eff3ef84d5a..c1fa2c969343 100644 --- a/packages/presets/src/fragments/copilot-panel/chat/logic.ts +++ b/packages/presets/src/fragments/copilot-panel/chat/logic.ts @@ -420,7 +420,7 @@ export class AIChatLogic { { type: 'action', name: 'Create mind-map', - action: this.createAction('Create mind-map', async input => { + action: this.createAction('Create mind-map', input => { const service = getEdgelessService(this.host); const [x, y] = [service.viewport.centerX, service.viewport.centerY]; const reactiveData = this.reactiveData; @@ -442,7 +442,7 @@ export class AIChatLogic { { type: 'action', name: 'Create presentation', - action: this.createAction('Create mind-map', async input => { + action: this.createAction('Create mind-map', input => { const reactiveData = this.reactiveData; const build = pptBuilder(this.host); return (async function* () { @@ -521,7 +521,7 @@ export class AIChatLogic { return oldTree; } ); - await this.createAction('Part analysis', async input => { + await this.createAction('Part analysis', input => { return (async function* () { const strings = runPartAnalysisAction({ input, path }); let text = ''; diff --git a/packages/presets/src/fragments/copilot-panel/chat/template.ts b/packages/presets/src/fragments/copilot-panel/chat/template.ts index e54209652dd4..c5ad021e7e55 100644 --- a/packages/presets/src/fragments/copilot-panel/chat/template.ts +++ b/packages/presets/src/fragments/copilot-panel/chat/template.ts @@ -48,7 +48,7 @@ const getImageUrlByKeyword = return image.toString(); }; const getImages = async ( - images: Record<string, (w: number, h: number) => Promise<string>>, + images: Record<string, (w: number, h: number) => Promise<string> | string>, // eslint-disable-next-line @typescript-eslint/no-explicit-any template: any ): Promise<TemplateImage[]> => { @@ -129,7 +129,7 @@ const createBasicCover = async ( images: await getImages( { 'section1.image': getImageUrlByKeyword(section1.keywords), - background: async () => + background: () => 'https://cdn.affine.pro/ppt-images/background/basic_cover_background.png', }, template @@ -154,7 +154,7 @@ const basic1section = async ( images: await getImages( { 'section1.image': getImageUrlByKeyword(section1.keywords), - background: async () => + background: () => 'https://cdn.affine.pro/ppt-images/background/basic_1_selection_background.png', }, template @@ -183,7 +183,7 @@ const basic2section = async ( { 'section1.image': getImageUrlByKeyword(section1.keywords), 'section2.image': getImageUrlByKeyword(section2.keywords), - background: async () => + background: () => 'https://cdn.affine.pro/ppt-images/background/basic_2_selection_background.png', }, template @@ -216,7 +216,7 @@ const basic3section = async ( 'section1.image': getImageUrlByKeyword(section1.keywords), 'section2.image': getImageUrlByKeyword(section2.keywords), 'section3.image': getImageUrlByKeyword(section3.keywords), - background: async () => + background: () => 'https://cdn.affine.pro/ppt-images/background/basic_3_selection_background.png', }, template @@ -253,7 +253,7 @@ const basic4section = async ( 'section2.image': getImageUrlByKeyword(section2.keywords), 'section3.image': getImageUrlByKeyword(section3.keywords), 'section4.image': getImageUrlByKeyword(section4.keywords), - background: async () => + background: () => 'https://cdn.affine.pro/ppt-images/background/basic_4_selection_background.png', }, template diff --git a/packages/presets/src/fragments/copilot-panel/edgeless/logic.ts b/packages/presets/src/fragments/copilot-panel/edgeless/logic.ts index 06aad3462c95..fd32861f93bd 100644 --- a/packages/presets/src/fragments/copilot-panel/edgeless/logic.ts +++ b/packages/presets/src/fragments/copilot-panel/edgeless/logic.ts @@ -100,7 +100,7 @@ export class AIEdgelessLogic { ); }; - htmlBlockDemo = async () => { + htmlBlockDemo = () => { const edgelessPage = getEdgelessPageBlockFromEditor(this.host); edgelessPage.page.addBlock( EmbedHtmlBlockSpec.schema.model.flavour, @@ -182,7 +182,7 @@ export class AIEdgelessLogic { return; } const callback = (blob: Blob | null) => { - const run = async () => { + const run = () => { if (blob) { const dataURL = canvas.toDataURL(); const genImage = async (model: FrameBlockModel) => { @@ -235,12 +235,12 @@ export class AIEdgelessLogic { }); } }; - run().catch(console.error); + run(); }; canvas.toBlob(callback); }; - async convertToMindMap() { + convertToMindMap() { const blocks = getPageService(this.host).selectedBlocks; const toTreeNode = (block: BlockModel): TreeNode => { return { @@ -272,10 +272,10 @@ export class AIEdgelessLogic { children: blocks.map(v => toTreeNode(v.model)), }; } - await this.drawMindMap(node); + this.drawMindMap(node); } - async drawMindMap( + drawMindMap( treeNode: TreeNode, options?: { rootId?: string; x?: number; y?: number } ) { diff --git a/packages/presets/src/fragments/copilot-panel/utils/selection-utils.ts b/packages/presets/src/fragments/copilot-panel/utils/selection-utils.ts index 32c2b84632ce..1b45b61a80dc 100644 --- a/packages/presets/src/fragments/copilot-panel/utils/selection-utils.ts +++ b/packages/presets/src/fragments/copilot-panel/utils/selection-utils.ts @@ -82,7 +82,7 @@ export async function getSelectedTextContent(editorHost: EditorHost) { editorHost.std.page, getPageService(editorHost).selectedModels ); - return await getMarkdownFromSlice(editorHost, slice); + return getMarkdownFromSlice(editorHost, slice); } export const stopPropagation = (e: Event) => { diff --git a/packages/presets/src/helpers/index.ts b/packages/presets/src/helpers/index.ts index 9b85abde2333..09ee04fdeda5 100644 --- a/packages/presets/src/helpers/index.ts +++ b/packages/presets/src/helpers/index.ts @@ -8,7 +8,7 @@ export function createEmptyPage() { return { page, - async init() { + init() { page.load(); const pageBlockId = page.addBlock('affine:page', {}); page.addBlock('affine:surface', {}, pageBlockId); diff --git a/tests/attachment.spec.ts b/tests/attachment.spec.ts index 59e682e62aa5..e5fbc5da6a23 100644 --- a/tests/attachment.spec.ts +++ b/tests/attachment.spec.ts @@ -47,7 +47,7 @@ function getAttachment(page: Page) { const renameInput = page.locator('.affine-attachment-rename-container input'); const insertAttachment = async () => { - await page.evaluate(async () => { + await page.evaluate(() => { // Force fallback to input[type=file] in tests // See https://github.com/microsoft/playwright/issues/8850 window.showOpenFilePicker = undefined; diff --git a/tests/clipboard.spec.ts b/tests/clipboard.spec.ts index 080e9139b38f..0210c762af43 100644 --- a/tests/clipboard.spec.ts +++ b/tests/clipboard.spec.ts @@ -75,7 +75,7 @@ import { } from './utils/asserts.js'; import { scoped, test } from './utils/playwright.js'; -test.beforeEach(async ({ page }, testInfo) => { +test.beforeEach(({ page }, testInfo) => { page; testInfo.snapshotSuffix = ''; }); @@ -386,12 +386,8 @@ test(scoped`copy clipItems format`, async ({ page }) => { await pasteContent(page, { 'text/plain': clipData }); await page.waitForTimeout(100); await setSelection(page, 4, 1, 5, 1); - await assertClipItems(page, 'text/plain', 'bc'); - await assertClipItems( - page, - 'text/html', - '<ul><li>b<ul><li>c</li></ul></li></ul>' - ); + assertClipItems(page, 'text/plain', 'bc'); + assertClipItems(page, 'text/html', '<ul><li>b<ul><li>c</li></ul></li></ul>'); await undoByClick(page); await assertRichTexts(page, ['']); }); @@ -406,7 +402,7 @@ test(scoped`copy partially selected text`, async ({ page }) => { // select 456 await setInlineRangeInSelectedRichText(page, 4, 3); await copyByKeyboard(page); - await assertClipItems(page, 'text/plain', '456'); + assertClipItems(page, 'text/plain', '456'); // move to line end await setInlineRangeInSelectedRichText(page, 11, 0); diff --git a/tests/database/actions.ts b/tests/database/actions.ts index d4642505ee62..4089a530e4ee 100644 --- a/tests/database/actions.ts +++ b/tests/database/actions.ts @@ -565,7 +565,7 @@ export async function assertKanbanCardSelected( expect(border).toEqual('1px solid var(--affine-primary-color)'); } -export async function getKanbanCard( +export function getKanbanCard( page: Page, { groupIndex, diff --git a/tests/database/selection.spec.ts b/tests/database/selection.spec.ts index 54109a151c39..57334b90de73 100644 --- a/tests/database/selection.spec.ts +++ b/tests/database/selection.spec.ts @@ -456,7 +456,7 @@ test.describe('kanban view selection', () => { await pressEscape(page); await pressEscape(page); - const card = await getKanbanCard(page, { + const card = getKanbanCard(page, { groupIndex: 1, cardIndex: 0, }); diff --git a/tests/edgeless/basic.spec.ts b/tests/edgeless/basic.spec.ts index 4e7aca69ade0..4e8fc1e64724 100644 --- a/tests/edgeless/basic.spec.ts +++ b/tests/edgeless/basic.spec.ts @@ -254,7 +254,7 @@ test('should close zoom bar when click blank area', async ({ page }) => { await assertZoomLevel(page, 125); const verticalZoomBar = '.edgeless-zoom-toolbar-container.vertical'; - const zoomBar = await page.locator(verticalZoomBar); + const zoomBar = page.locator(verticalZoomBar); await expect(zoomBar).toBeVisible(); // Click Blank Area diff --git a/tests/edgeless/frame.spec.ts b/tests/edgeless/frame.spec.ts index 4efc8c175936..acba8ccf81e9 100644 --- a/tests/edgeless/frame.spec.ts +++ b/tests/edgeless/frame.spec.ts @@ -57,7 +57,7 @@ test.describe('frame', () => { await setEdgelessTool(page, 'frame'); const frameMenu = page.locator('edgeless-frame-menu'); await expect(frameMenu).toBeVisible(); - const button = await page.locator('.frame-add-button:nth-of-type(2)'); + const button = page.locator('.frame-add-button:nth-of-type(2)'); await button.click(); await assertSelectedBound(page, [-500, -550, 1200, 1200]); }); diff --git a/tests/edgeless/note.spec.ts b/tests/edgeless/note.spec.ts index d9914c0285ad..6df98b03a3ff 100644 --- a/tests/edgeless/note.spec.ts +++ b/tests/edgeless/note.spec.ts @@ -539,7 +539,7 @@ test('undo/redo should work correctly after clipping', async ({ page }) => { await selectNoteInEdgeless(page, noteId); await triggerComponentToolbarAction(page, 'changeNoteSlicerSetting'); - const button = await page.locator('.note-slicer-button'); + const button = page.locator('.note-slicer-button'); await button.click(); await expect(page.locator('.edgeless-block-portal-note')).toHaveCount(2); diff --git a/tests/edgeless/selection.spec.ts b/tests/edgeless/selection.spec.ts index 081c077aa827..b10604dc5686 100644 --- a/tests/edgeless/selection.spec.ts +++ b/tests/edgeless/selection.spec.ts @@ -351,7 +351,7 @@ test('should also update dragging area when viewport changes', async ({ await page.mouse.click(200, 300); const selectedRectClass = '.affine-edgeless-selected-rect'; - let selectedRect = await page.locator(selectedRectClass); + let selectedRect = page.locator(selectedRectClass); await expect(selectedRect).toBeHidden(); // set up initial dragging area await page.mouse.move(200, 300); @@ -365,7 +365,7 @@ test('should also update dragging area when viewport changes', async ({ await page.mouse.up(); // Expect to select the empty note - selectedRect = await page.locator(selectedRectClass); + selectedRect = page.locator(selectedRectClass); await page.waitForTimeout(300); await expect(selectedRect).toBeVisible(); await page.waitForTimeout(300); diff --git a/tests/image.spec.ts b/tests/image.spec.ts index 11e0848ac9a8..e90cbc3fc657 100644 --- a/tests/image.spec.ts +++ b/tests/image.spec.ts @@ -200,7 +200,7 @@ test('popup menu should follow position of image when scrolling', async ({ await expect(menu).toBeVisible(); await page.evaluate( - async ([rect]) => { + ([rect]) => { const viewport = document.querySelector('.affine-doc-viewport'); if (!viewport) { throw new Error(); diff --git a/tests/selection/block.spec.ts b/tests/selection/block.spec.ts index 58be14987df2..5902724eec92 100644 --- a/tests/selection/block.spec.ts +++ b/tests/selection/block.spec.ts @@ -1496,7 +1496,7 @@ test('should scroll page properly by wheel after inserting a new block and selec await clickBlockDragHandle(page, lastBlockId); async function getViewportScrollTop() { - return await page.evaluate(() => { + return page.evaluate(() => { const viewport = document.querySelector('.affine-doc-viewport'); if (!viewport) { throw new Error(); @@ -1567,7 +1567,7 @@ test('scroll should update dragging area and select blocks when dragging', async await page.mouse.click(0, 0); async function getViewportScrollTop() { - return await page.evaluate(() => { + return page.evaluate(() => { const viewport = document.querySelector('.affine-doc-viewport'); if (!viewport) { throw new Error(); diff --git a/tests/selection/native.spec.ts b/tests/selection/native.spec.ts index 6873701efc8b..d343726cc66b 100644 --- a/tests/selection/native.spec.ts +++ b/tests/selection/native.spec.ts @@ -1052,7 +1052,7 @@ test('should not crash when mouse over the left side of the list block prefix', await assertRichTexts(page, ['123', '456', '789']); await dragBetweenIndices(page, [1, 2], [1, 0]); await copyByKeyboard(page); - await assertClipItems(page, 'text/plain', '45'); + assertClipItems(page, 'text/plain', '45'); // `456` const prefixIconRect = await page.evaluate(() => { @@ -1081,7 +1081,7 @@ test('should not crash when mouse over the left side of the list block prefix', ); await copyByKeyboard(page); - await assertClipItems(page, 'text/plain', '45'); + assertClipItems(page, 'text/plain', '45'); }); test('should set the last block to end the range after when leaving the affine-note', async ({ @@ -1094,7 +1094,7 @@ test('should set the last block to end the range after when leaving the affine-n await dragBetweenIndices(page, [0, 2], [2, 1]); await copyByKeyboard(page); - await assertClipItems(page, 'text/plain', '34567'); + assertClipItems(page, 'text/plain', '34567'); // blur await page.mouse.click(0, 0); @@ -1106,7 +1106,7 @@ test('should set the last block to end the range after when leaving the affine-n { x: 0, y: 30 } // drag below the bottom of the last block ); await copyByKeyboard(page); - await assertClipItems(page, 'text/plain', '3456789'); + assertClipItems(page, 'text/plain', '3456789'); }); test('should set the first block to start the range before when leaving the affine-note-block-container', async ({ @@ -1119,7 +1119,7 @@ test('should set the first block to start the range before when leaving the affi await dragBetweenIndices(page, [2, 1], [0, 2]); await copyByKeyboard(page); - await assertClipItems(page, 'text/plain', '34567'); + assertClipItems(page, 'text/plain', '34567'); // blur await page.mouse.click(0, 0); @@ -1131,7 +1131,7 @@ test('should set the first block to start the range before when leaving the affi { x: 0, y: -30 } // drag above the top of the first block ); await copyByKeyboard(page); - await assertClipItems(page, 'text/plain', '1234567'); + assertClipItems(page, 'text/plain', '1234567'); }); test('should select texts on cross-note dragging', async ({ page }) => { @@ -1169,7 +1169,7 @@ test('should select texts on cross-note dragging', async ({ page }) => { ); await copyByKeyboard(page); - await assertClipItems(page, 'text/plain', '3456789ABC'); + assertClipItems(page, 'text/plain', '3456789ABC'); }); test('should select full text of the first block when leaving the affine-note-block-container in edgeless mode', async ({ @@ -1186,7 +1186,7 @@ test('should select full text of the first block when leaving the affine-note-bl click: true, }); await copyByKeyboard(page); - await assertClipItems(page, 'text/plain', '34567'); + assertClipItems(page, 'text/plain', '34567'); const containerRect = await page.evaluate(() => { const container = document.querySelector('.affine-note-block-container'); @@ -1544,7 +1544,7 @@ test('should keep native range selection when scrolling backward with the scroll ); await copyByKeyboard(page); - await assertClipItems(page, 'text/plain', '987654321'); + assertClipItems(page, 'text/plain', '987654321'); }); // ↓ @@ -1617,7 +1617,7 @@ test('should keep native range selection when scrolling forward with the scroll ); await copyByKeyboard(page); - await assertClipItems(page, 'text/plain', '123456789'); + assertClipItems(page, 'text/plain', '123456789'); }); test('should not show option menu of image on native selection', async ({ @@ -1648,7 +1648,7 @@ test('should not show option menu of image on native selection', async ({ await waitNextFrame(page); await copyByKeyboard(page); - await assertClipItems(page, 'text/plain', '123'); + assertClipItems(page, 'text/plain', '123'); await page.mouse.click(0, 0); @@ -1663,7 +1663,7 @@ test('should not show option menu of image on native selection', async ({ await waitNextFrame(page); await copyByKeyboard(page); - await assertClipItems(page, 'text/plain', '123'); + assertClipItems(page, 'text/plain', '123'); await expect( page.locator('.affine-embed-editing-state-container') diff --git a/tests/utils/actions/edgeless.ts b/tests/utils/actions/edgeless.ts index 0226a7c92221..abed73a2c563 100644 --- a/tests/utils/actions/edgeless.ts +++ b/tests/utils/actions/edgeless.ts @@ -309,7 +309,7 @@ export async function getEdgelessSelectedRect(page: Page) { } export async function getEdgelessSelectedRectModel(page: Page): Promise<Bound> { - return await page.evaluate(() => { + return page.evaluate(() => { const container = document.querySelector('affine-edgeless-page'); if (!container) throw new Error('container not found'); const bound = container.service.selection.selectedBound; @@ -535,7 +535,7 @@ export async function getNoteBoundBoxInEdgeless(page: Page, noteId: string) { } export async function getAllNoteIds(page: Page) { - return await page.evaluate(() => { + return page.evaluate(() => { return Array.from(document.querySelectorAll('affine-note')).map( note => note.model.id ); @@ -543,7 +543,7 @@ export async function getAllNoteIds(page: Page) { } export async function countBlock(page: Page, flavour: string) { - return await page.evaluate( + return page.evaluate( ([flavour]) => { return Array.from(document.querySelectorAll(flavour)).length; }, @@ -716,7 +716,7 @@ export async function deleteAll(page: Page) { } export async function deleteAllConnectors(page: Page) { - return await page.evaluate(() => { + return page.evaluate(() => { const container = document.querySelector('affine-edgeless-page'); if (!container) throw new Error('container not found'); container.service.getElementsByType('connector').forEach(c => { @@ -1144,7 +1144,7 @@ export async function initThreeNotes(page: Page) { } export async function toViewCoord(page: Page, point: number[]) { - return await page.evaluate(point => { + return page.evaluate(point => { const container = document.querySelector('affine-edgeless-page'); if (!container) throw new Error('container not found'); return container.service.viewport.toViewCoord(point[0], point[1]); @@ -1162,7 +1162,7 @@ export async function dragBetweenViewCoords( } export async function toModelCoord(page: Page, point: number[]) { - return await page.evaluate(point => { + return page.evaluate(point => { const container = document.querySelector('affine-edgeless-page'); if (!container) throw new Error('container not found'); return container.service.viewport.toModelCoord(point[0], point[1]); @@ -1170,7 +1170,7 @@ export async function toModelCoord(page: Page, point: number[]) { } export async function getConnectorSourceConnection(page: Page) { - return await page.evaluate(() => { + return page.evaluate(() => { const container = document.querySelector('affine-edgeless-page'); if (!container) throw new Error('container not found'); return container.service.getElementsByType('connector')[0].source; @@ -1178,7 +1178,7 @@ export async function getConnectorSourceConnection(page: Page) { } export async function getConnectorPath(page: Page, index = 0): Promise<IVec[]> { - return await page.evaluate( + return page.evaluate( ([index]) => { const container = document.querySelector('affine-edgeless-page'); if (!container) throw new Error('container not found'); @@ -1193,7 +1193,7 @@ export async function getSelectedBound( page: Page, index = 0 ): Promise<[number, number, number, number]> { - return await page.evaluate( + return page.evaluate( ([index]) => { const container = document.querySelector('affine-edgeless-page'); if (!container) throw new Error('container not found'); @@ -1205,7 +1205,7 @@ export async function getSelectedBound( } export async function getGroupOfElements(page: Page, ids: string[]) { - return await page.evaluate( + return page.evaluate( ([ids]) => { const container = document.querySelector('affine-edgeless-page'); if (!container) throw new Error('container not found'); @@ -1217,7 +1217,7 @@ export async function getGroupOfElements(page: Page, ids: string[]) { } export async function getGroupIds(page: Page) { - return await page.evaluate(() => { + return page.evaluate(() => { const container = document.querySelector('affine-edgeless-page'); if (!container) throw new Error('container not found'); return container.service.elements.map(el => el.group?.id ?? 'null'); @@ -1225,7 +1225,7 @@ export async function getGroupIds(page: Page) { } export async function getGroupChildrenIds(page: Page, id: string) { - return await page.evaluate( + return page.evaluate( ([id]) => { const container = document.querySelector('affine-edgeless-page'); if (!container) throw new Error('container not found'); @@ -1240,7 +1240,7 @@ export async function getGroupChildrenIds(page: Page, id: string) { } export async function getCanvasElementsCount(page: Page) { - return await page.evaluate(() => { + return page.evaluate(() => { const container = document.querySelector('affine-edgeless-page'); if (!container) throw new Error('container not found'); return container.service.elements.length; @@ -1248,7 +1248,7 @@ export async function getCanvasElementsCount(page: Page) { } export async function getSortedIds(page: Page) { - return await page.evaluate(() => { + return page.evaluate(() => { const container = document.querySelector('affine-edgeless-page'); if (!container) throw new Error('container not found'); return container.service.layer.canvasElements.map(e => e.id); @@ -1256,7 +1256,7 @@ export async function getSortedIds(page: Page) { } export async function getIds(page: Page, filterGroup = false) { - return await page.evaluate( + return page.evaluate( ([filterGroup]) => { const container = document.querySelector('affine-edgeless-page'); if (!container) throw new Error('container not found'); @@ -1269,7 +1269,7 @@ export async function getIds(page: Page, filterGroup = false) { } export async function getFirstGroupId(page: Page, exclude: string[] = []) { - return await page.evaluate( + return page.evaluate( ([exclude]) => { const container = document.querySelector('affine-edgeless-page'); if (!container) throw new Error('container not found'); @@ -1284,7 +1284,7 @@ export async function getFirstGroupId(page: Page, exclude: string[] = []) { } export async function getIndexes(page: Page) { - return await page.evaluate(() => { + return page.evaluate(() => { const container = document.querySelector('affine-edgeless-page'); if (!container) throw new Error('container not found'); return container.service.elements.map(e => e.index); @@ -1292,7 +1292,7 @@ export async function getIndexes(page: Page) { } export async function getSortedIdsInViewport(page: Page) { - return await page.evaluate(() => { + return page.evaluate(() => { const container = document.querySelector('affine-edgeless-page'); if (!container) throw new Error('container not found'); const { service } = container; diff --git a/tests/utils/actions/keyboard.ts b/tests/utils/actions/keyboard.ts index e9c0389768ca..f19e8f866945 100644 --- a/tests/utils/actions/keyboard.ts +++ b/tests/utils/actions/keyboard.ts @@ -166,7 +166,7 @@ export async function createCodeBlock(page: Page) { export async function getCursorBlockIdAndHeight( page: Page ): Promise<[string | null, number | null]> { - return await page.evaluate(() => { + return page.evaluate(() => { const selection = window.getSelection() as Selection; const range = selection.getRangeAt(0); diff --git a/tests/utils/actions/misc.ts b/tests/utils/actions/misc.ts index 76f1e6b257af..5c1e293e5527 100644 --- a/tests/utils/actions/misc.ts +++ b/tests/utils/actions/misc.ts @@ -71,13 +71,13 @@ async function initEmptyEditor({ multiEditor?: boolean; }) { await page.evaluate( - async ([flags, noInit, multiEditor]) => { + ([flags, noInit, multiEditor]) => { const { workspace } = window; async function waitForMountPageEditor( page: ReturnType<typeof workspace.createPage> ) { - if (!page.ready) await page.load(); + if (!page.ready) page.load(); if (!page.root) { await new Promise(resolve => page.slots.rootAdded.once(resolve)); @@ -162,7 +162,7 @@ async function initEmptyEditor({ window.page = firstPage; waitForMountPageEditor(firstPage).catch; } else { - workspace.slots.pageAdded.on(async pageId => { + workspace.slots.pageAdded.on(pageId => { const page = workspace.getPage(pageId); if (!page) { throw new Error(`Failed to get page ${pageId}`); @@ -369,7 +369,7 @@ export async function enterPlaygroundWithList( await initEmptyEditor({ page }); await page.evaluate( - async ({ contents, type }: { contents: string[]; type: ListType }) => { + ({ contents, type }: { contents: string[]; type: ListType }) => { const { page } = window; const pageId = page.addBlock('affine:page', { title: new page.Text(), @@ -392,7 +392,7 @@ export async function enterPlaygroundWithList( // XXX: This doesn't add surface yet, the page state should not be switched to edgeless. export async function initEmptyParagraphState(page: Page, pageId?: string) { - const ids = await page.evaluate(async pageId => { + const ids = await page.evaluate(pageId => { const { page } = window; page.captureSync(); if (!pageId) { @@ -412,7 +412,7 @@ export async function initEmptyParagraphState(page: Page, pageId?: string) { } export async function initEmptyEdgelessState(page: Page) { - const ids = await page.evaluate(async () => { + const ids = await page.evaluate(() => { const { page } = window; const pageId = page.addBlock('affine:page', { title: new page.Text(), @@ -429,7 +429,7 @@ export async function initEmptyEdgelessState(page: Page) { } export async function initEmptyDatabaseState(page: Page, pageId?: string) { - const ids = await page.evaluate(async pageId => { + const ids = await page.evaluate(pageId => { const { page } = window; page.captureSync(); if (!pageId) { @@ -464,7 +464,7 @@ export async function initKanbanViewState( pageId?: string ) { const ids = await page.evaluate( - async ({ pageId, config }) => { + ({ pageId, config }) => { const { page } = window; page.captureSync(); @@ -522,7 +522,7 @@ export async function initEmptyDatabaseWithParagraphState( page: Page, pageId?: string ) { - const ids = await page.evaluate(async pageId => { + const ids = await page.evaluate(pageId => { const { page } = window; page.captureSync(); @@ -612,7 +612,7 @@ export async function initEmptyCodeBlockState( page: Page, codeBlockProps = {} as { language?: string } ) { - const ids = await page.evaluate(async codeBlockProps => { + const ids = await page.evaluate(codeBlockProps => { const { page } = window; page.captureSync(); const pageId = page.addBlock('affine:page'); @@ -730,7 +730,7 @@ export async function initParagraphsByCount(page: Page, count: number) { } export async function getInlineSelectionIndex(page: Page) { - return await page.evaluate(() => { + return page.evaluate(() => { const selection = window.getSelection() as Selection; const range = selection.getRangeAt(0); @@ -741,7 +741,7 @@ export async function getInlineSelectionIndex(page: Page) { } export async function getInlineSelectionText(page: Page) { - return await page.evaluate(() => { + return page.evaluate(() => { const selection = window.getSelection() as Selection; const range = selection.getRangeAt(0); const component = range.startContainer.parentElement?.closest('rich-text'); @@ -750,7 +750,7 @@ export async function getInlineSelectionText(page: Page) { } export async function getSelectedTextByInlineEditor(page: Page) { - return await page.evaluate(() => { + return page.evaluate(() => { const selection = window.getSelection() as Selection; const range = selection.getRangeAt(0); const component = range.startContainer.parentElement?.closest('rich-text'); @@ -767,7 +767,7 @@ export async function getSelectedTextByInlineEditor(page: Page) { } export async function getSelectedText(page: Page) { - return await page.evaluate(() => { + return page.evaluate(() => { let content = ''; const selection = window.getSelection() as Selection; @@ -1089,7 +1089,7 @@ export const getBoundingClientRect: ( page: Page, selector: string ) => Promise<DOMRect> = async (page: Page, selector: string) => { - return await page.evaluate((selector: string) => { + return page.evaluate((selector: string) => { return document.querySelector(selector)?.getBoundingClientRect() as DOMRect; }, selector); }; @@ -1212,7 +1212,7 @@ export async function shamefullyBlurActiveElement(page: Page) { * */ export async function waitForInlineEditorStateUpdated(page: Page) { - return await page.evaluate(async () => { + return page.evaluate(async () => { const selection = window.getSelection() as Selection; if (selection.rangeCount === 0) return; @@ -1261,7 +1261,7 @@ export async function initImageState(page: Page) { } export async function getCurrentEditorPageId(page: Page) { - return await page.evaluate(index => { + return page.evaluate(index => { const editor = document.querySelectorAll('affine-editor-container')[index]; if (!editor) throw new Error("Can't find affine-editor-container"); const pageId = editor.page.id; @@ -1271,7 +1271,7 @@ export async function getCurrentEditorPageId(page: Page) { export async function getCurrentHTMLTheme(page: Page) { const root = page.locator('html'); - return await root.getAttribute('data-theme'); + return root.getAttribute('data-theme'); } export async function getCurrentEditorTheme(page: Page) { diff --git a/tests/utils/actions/selection.ts b/tests/utils/actions/selection.ts index 9737a7e6a46c..7a45259103aa 100644 --- a/tests/utils/actions/selection.ts +++ b/tests/utils/actions/selection.ts @@ -4,7 +4,7 @@ export async function getRichTextBoundingBox( page: Page, blockId: string ): Promise<DOMRect> { - return await page.evaluate(id => { + return page.evaluate(id => { const paragraph = document.querySelector( `[data-block-id="${id}"] .inline-editor` ); diff --git a/tests/utils/asserts.ts b/tests/utils/asserts.ts index 212bcb4e20ad..1c8228db92df 100644 --- a/tests/utils/asserts.ts +++ b/tests/utils/asserts.ts @@ -633,11 +633,7 @@ export async function assertStoreMatchJSX( type MimeType = 'text/plain' | 'blocksuite/x-c+w' | 'text/html'; -export async function assertClipItems( - _page: Page, - _key: MimeType, - _value: unknown -) { +export function assertClipItems(_page: Page, _key: MimeType, _value: unknown) { // FIXME: use original clipboard API // const clipItems = await page.evaluate(() => { // return document diff --git a/tests/utils/inline-editor.ts b/tests/utils/inline-editor.ts index 029faabecd82..0558b256fb14 100644 --- a/tests/utils/inline-editor.ts +++ b/tests/utils/inline-editor.ts @@ -7,7 +7,7 @@ export async function getStringFromRichText( index = 0 ): Promise<string> { await page.waitForTimeout(50); - return await page.evaluate( + return page.evaluate( ([index, currentEditorIndex]) => { const editorHost = document.querySelectorAll('editor-host')[currentEditorIndex];