mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-08-11 22:18:54 +08:00
chore: migrate oxlint & oxfmt (#15464)
#### PR Dependency Tree * **PR #15464** 👈 This tree was auto-generated by [Charcoal](https://github.com/danerwilliams/charcoal) <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Chores** * Replaced the project’s formatting and linting workflow with Oxfmt and Oxlint. * Added shared formatting and linting configuration, editor integration, and updated automated checks. * Updated generated files, scripts, and lint guidance to use the new tooling. * **Style** * Reformatted templates, source code, examples, and configuration files for consistent readability. * No user-facing functionality or rendering behavior changed. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
hooks:
|
||||
afterOneFileWrite:
|
||||
- prettier --write
|
||||
- oxfmt --write
|
||||
config:
|
||||
strict: true
|
||||
maybeValue: T | null
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
"@graphql-codegen/typescript": "^5.0.9",
|
||||
"@graphql-codegen/typescript-operations": "^5.0.9",
|
||||
"@types/lodash-es": "^4.17.12",
|
||||
"prettier": "^3.7.4",
|
||||
"oxfmt": "0.63.0",
|
||||
"vitest": "^4.1.8"
|
||||
},
|
||||
"scripts": {
|
||||
|
||||
@@ -64,7 +64,7 @@ export abstract class FrameworkProvider {
|
||||
|
||||
createEntity = <
|
||||
T extends Entity<any>,
|
||||
Props extends T extends Component<infer P> ? P : never,
|
||||
Props extends (T extends Component<infer P> ? P : never),
|
||||
>(
|
||||
identifier: GeneralIdentifier<T>,
|
||||
...[props]: Props extends Record<string, never> ? [] : [Props]
|
||||
@@ -78,7 +78,7 @@ export abstract class FrameworkProvider {
|
||||
|
||||
createScope = <
|
||||
T extends Scope<any>,
|
||||
Props extends T extends Component<infer P> ? P : never,
|
||||
Props extends (T extends Component<infer P> ? P : never),
|
||||
>(
|
||||
root: GeneralIdentifier<T>,
|
||||
...[props]: Props extends Record<string, never> ? [] : [Props]
|
||||
|
||||
@@ -514,7 +514,7 @@ export class LiveData<T = unknown>
|
||||
const subscription = this.subscribe(v => {
|
||||
if (predicate(v)) {
|
||||
resolve(v as any);
|
||||
// oxlint-disable-next-line @typescript-eslint/no-floating-promises
|
||||
// oxlint-disable-next-line typescript/no-floating-promises
|
||||
Promise.resolve().then(() => {
|
||||
subscription.unsubscribe();
|
||||
});
|
||||
@@ -552,7 +552,7 @@ export class LiveData<T = unknown>
|
||||
throw this.poisonedError;
|
||||
}
|
||||
this.ops$.next('watch');
|
||||
// oxlint-disable-next-line @typescript-eslint/no-floating-promises -- never throw
|
||||
// oxlint-disable-next-line typescript/no-floating-promises -- never throw
|
||||
Promise.resolve().then(() => {
|
||||
this.ops$.next('unwatch');
|
||||
});
|
||||
|
||||
@@ -27,25 +27,29 @@ type Typeof<F extends FieldSchemaBuilder> =
|
||||
F extends FieldSchemaBuilder<infer Type> ? Type : never;
|
||||
|
||||
type RequiredFields<T extends TableSchemaBuilder> = {
|
||||
[K in TableDefinedFieldNames<T> as T[K] extends FieldSchemaBuilder<
|
||||
any,
|
||||
infer Optional
|
||||
>
|
||||
? Optional extends false
|
||||
? K
|
||||
[
|
||||
K in TableDefinedFieldNames<T> as T[K] extends FieldSchemaBuilder<
|
||||
any,
|
||||
infer Optional
|
||||
>
|
||||
? Optional extends false
|
||||
? K
|
||||
: never
|
||||
: never
|
||||
: never]: Typeof<T[K]>;
|
||||
]: Typeof<T[K]>;
|
||||
};
|
||||
|
||||
type OptionalFields<T extends TableSchemaBuilder> = {
|
||||
[K in TableDefinedFieldNames<T> as T[K] extends FieldSchemaBuilder<
|
||||
any,
|
||||
infer Optional
|
||||
>
|
||||
? Optional extends true
|
||||
? K
|
||||
[
|
||||
K in TableDefinedFieldNames<T> as T[K] extends FieldSchemaBuilder<
|
||||
any,
|
||||
infer Optional
|
||||
>
|
||||
? Optional extends true
|
||||
? K
|
||||
: never
|
||||
: never
|
||||
: never]?: Typeof<T[K]> | null;
|
||||
]?: Typeof<T[K]> | null;
|
||||
};
|
||||
|
||||
type PrimaryKeyField<T extends TableSchemaBuilder> = {
|
||||
@@ -104,7 +108,9 @@ export type UpdateEntityInput<T extends TableSchemaBuilder> = Pretty<
|
||||
MaybeDocumentEntityWrapper<
|
||||
T,
|
||||
{
|
||||
[key in NonPrimaryKeyFieldNames<T>]?: key extends keyof TableDefinedEntity<T>
|
||||
[
|
||||
key in NonPrimaryKeyFieldNames<T>
|
||||
]?: key extends keyof TableDefinedEntity<T>
|
||||
? TableDefinedEntity<T>[key]
|
||||
: never;
|
||||
}
|
||||
@@ -115,7 +121,9 @@ export type FindEntityInput<T extends TableSchemaBuilder> = Pretty<
|
||||
MaybeDocumentEntityWrapper<
|
||||
T,
|
||||
{
|
||||
[key in TableDefinedFieldNames<T>]?: key extends keyof TableDefinedEntity<T>
|
||||
[
|
||||
key in TableDefinedFieldNames<T>
|
||||
]?: key extends keyof TableDefinedEntity<T>
|
||||
?
|
||||
| TableDefinedEntity<T>[key]
|
||||
| { not: TableDefinedEntity<T>[key] | null }
|
||||
|
||||
@@ -30,14 +30,21 @@ import type { ConnectionStatus } from '@affine/nbstore';
|
||||
import { IndexedDBDocStorage } from '@affine/nbstore/idb';
|
||||
import { SqliteBlobStorage } from '@affine/nbstore/sqlite';
|
||||
|
||||
const storage = new SpaceStorage([new IndexedDBDocStorage({}), new SqliteBlobStorage({})]);
|
||||
const storage = new SpaceStorage([
|
||||
new IndexedDBDocStorage({}),
|
||||
new SqliteBlobStorage({}),
|
||||
]);
|
||||
|
||||
await storage.connect();
|
||||
storage.on('connection', ({ storage, status, error }) => {
|
||||
ui.show(storage, status, error);
|
||||
});
|
||||
|
||||
await storage.get('doc').pushDocUpdate({ docId: 'my-first-doc', bin: new Uint8Array(), editor: 'me' });
|
||||
await storage.get('doc').pushDocUpdate({
|
||||
docId: 'my-first-doc',
|
||||
bin: new Uint8Array(),
|
||||
editor: 'me',
|
||||
});
|
||||
await storage.tryGet('blob')?.get('img');
|
||||
```
|
||||
|
||||
@@ -61,7 +68,11 @@ client.ob$('connection', ({ storage, status, error }) => {
|
||||
ui.show(storage, status, error);
|
||||
});
|
||||
|
||||
await client.call('pushDocUpdate', { docId: 'my-first-doc', bin: new Uint8Array(), editor: 'me' });
|
||||
await client.call('pushDocUpdate', {
|
||||
docId: 'my-first-doc',
|
||||
bin: new Uint8Array(),
|
||||
editor: 'me',
|
||||
});
|
||||
|
||||
// call unregistered op will leads to Error
|
||||
// Error { message: 'Handler for operation [listHistory] is not registered.' }
|
||||
|
||||
@@ -52,7 +52,7 @@ export class NGramTokenizer implements Tokenizer {
|
||||
|
||||
tokenize(text: string): Token[] {
|
||||
const splitted: Token[] = [];
|
||||
for (let i = 0; i < text.length; ) {
|
||||
for (let i = 0; i < text.length;) {
|
||||
const nextBreak = Graphemer.nextBreak(text, i);
|
||||
const c = text.substring(i, nextBreak);
|
||||
|
||||
@@ -119,7 +119,7 @@ export class GeneralTokenizer implements Tokenizer {
|
||||
let end = 0;
|
||||
let lang: string | null = null;
|
||||
|
||||
for (let i = 0; i < text.length; ) {
|
||||
for (let i = 0; i < text.length;) {
|
||||
const nextBreak = Graphemer.nextBreak(text, i);
|
||||
const c = text.substring(i, nextBreak);
|
||||
|
||||
|
||||
@@ -23,7 +23,7 @@ export class IndexedDBLocker implements Locker {
|
||||
async lock(domain: string, resource: string) {
|
||||
const key = `${domain}:${resource}`;
|
||||
|
||||
// eslint-disable-next-line no-constant-condition
|
||||
// oxlint-disable-next-line no-constant-condition
|
||||
while (true) {
|
||||
const trx = this.db.transaction('locks', 'readwrite');
|
||||
const record = await trx.store.get(key);
|
||||
|
||||
@@ -26,7 +26,7 @@ export class Lock {
|
||||
private release: () => void = () => {};
|
||||
|
||||
async acquire() {
|
||||
// oxlint-disable-next-line @typescript-eslint/no-non-null-assertion
|
||||
// oxlint-disable-next-line typescript/no-non-null-assertion
|
||||
let release: () => void = null!;
|
||||
const nextLock = new Promise<void>(resolve => {
|
||||
release = resolve;
|
||||
|
||||
@@ -190,7 +190,7 @@ export class BlobSyncImpl implements BlobSync {
|
||||
): Promise<void> {
|
||||
return Promise.race([
|
||||
Promise.all(
|
||||
// oxlint-disable-next-line @typescript-eslint/await-thenable
|
||||
// oxlint-disable-next-line typescript/await-thenable
|
||||
peerId
|
||||
? [this.fullDownloadPeer(peerId)]
|
||||
: this.peers.map(p => this.fullDownloadPeer(p.peerId))
|
||||
|
||||
@@ -94,7 +94,7 @@ export class BlobSyncPeer {
|
||||
Math.pow(2, attempts - 1) * backoffRetry.delay,
|
||||
backoffRetry.maxDelay
|
||||
);
|
||||
// oxlint-disable-next-line @typescript-eslint/no-misused-promises
|
||||
// oxlint-disable-next-line typescript/no-misused-promises
|
||||
setTimeout(attempt, waitTime);
|
||||
} else {
|
||||
// reach the max retry times, resolve the promise with false
|
||||
@@ -107,7 +107,7 @@ export class BlobSyncPeer {
|
||||
}
|
||||
};
|
||||
|
||||
// oxlint-disable-next-line @typescript-eslint/no-floating-promises
|
||||
// oxlint-disable-next-line typescript/no-floating-promises
|
||||
attempt();
|
||||
})
|
||||
.catch(error => {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// eslint-disable
|
||||
// oxlint-disable
|
||||
// @ts-nocheck
|
||||
import { Node } from './utils/node';
|
||||
import { encodeLink } from './utils/url';
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// eslint-disable
|
||||
// oxlint-disable
|
||||
// @ts-nocheck
|
||||
import { Node } from './utils/node';
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// eslint-disable
|
||||
// oxlint-disable
|
||||
// @ts-nocheck
|
||||
let id = 0;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user