diff --git a/package.json b/package.json index 5ddeb459..e223c1e3 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,7 @@ "lint:fix:danger": "oxlint . --fix-dangerously", "format": "oxfmt --check", "format:fix": "oxfmt", - "typecheck": "tsc --noEmit && pnpm run -F @markput/website check", + "typecheck": "pnpm -r run typecheck", "clean": "git clean -xdf", "clean:dry": "git clean -xdn", "preinstall": "npx only-allow pnpm", diff --git a/packages/common/core/package.json b/packages/common/core/package.json index 096a0e52..57536445 100644 --- a/packages/common/core/package.json +++ b/packages/common/core/package.json @@ -10,6 +10,7 @@ "./styles.module.css": "./styles.module.css" }, "scripts": { + "typecheck": "tsc --noEmit", "build": "vite build", "build:watch": "vite build -w", "test": "vitest run", @@ -24,6 +25,7 @@ "@faker-js/faker": "catalog:", "@vitest/coverage-v8": "catalog:", "@vitest/ui": "catalog:", + "typescript": "catalog:", "vite": "catalog:", "vitest": "catalog:" } diff --git a/packages/common/core/src/features/store/Store.ts b/packages/common/core/src/features/store/Store.ts index 39cdf5f9..3722e4db 100644 --- a/packages/common/core/src/features/store/Store.ts +++ b/packages/common/core/src/features/store/Store.ts @@ -1,4 +1,4 @@ -import {defineState, defineEvents, type UseHookFactory} from '../../shared/classes' +import {defineState, defineEvents, type UseHookFactory, type StateObject} from '../../shared/classes' import {KeyGenerator} from '../../shared/classes/KeyGenerator' import {NodeProxy} from '../../shared/classes/NodeProxy' import type {MarkputHandler, MarkputState, OverlayMatch} from '../../shared/types' @@ -22,7 +22,7 @@ export class Store { input: new NodeProxy(undefined, this), } - readonly state: ReturnType> + readonly state: StateObject readonly events = defineEvents<{ change: void @@ -49,7 +49,7 @@ export class Store { readonly lifecycle = new Lifecycle(this) constructor(options: StoreOptions) { - this.state = defineState( + this.state = defineState( { tokens: [], parser: undefined, diff --git a/packages/common/core/src/shared/classes/defineState.ts b/packages/common/core/src/shared/classes/defineState.ts index 98400894..c8dbfade 100644 --- a/packages/common/core/src/shared/classes/defineState.ts +++ b/packages/common/core/src/shared/classes/defineState.ts @@ -2,15 +2,16 @@ import {Reactive} from './Reactive' /** * Framework adapters can return any reactive wrapper from `use`. - * React returns plain values, while Vue can return `Ref`. + * The actual return type of `use()` is overridden per-framework via module augmentation. + * React returns plain T, Vue augments Signal so that `use()` returns Ref. */ -export type UseHookFactory = (signal: Signal) => () => any +export type UseHookFactory = (signal: Signal) => () => unknown -export type Signal = { +export interface Signal { get(): T set(value: T): void on(fn: (value: T) => void): () => void - use: () => T + use(): T } function createSignal(reactive: Reactive, createUseHook: UseHookFactory): Signal { @@ -18,7 +19,7 @@ function createSignal(reactive: Reactive, createUseHook: UseHookFactory): signal.get = () => reactive.get() signal.set = (value: T) => reactive.set(value) signal.on = (fn: (value: T) => void) => reactive.on(fn) - signal.use = createUseHook(signal) + signal.use = createUseHook(signal) as Signal['use'] return signal } diff --git a/packages/common/core/src/shared/classes/index.ts b/packages/common/core/src/shared/classes/index.ts index c089e4a8..7f60525a 100644 --- a/packages/common/core/src/shared/classes/index.ts +++ b/packages/common/core/src/shared/classes/index.ts @@ -1,5 +1,5 @@ export {Reactive} from './Reactive' -export type {Signal, UseHookFactory} from './defineState' +export type {Signal, UseHookFactory, StateObject} from './defineState' export {defineState} from './defineState' export type {Emitter} from './defineEvents' export {defineEvents} from './defineEvents' diff --git a/packages/react/markput/package.json b/packages/react/markput/package.json index dc742656..9153c9c0 100644 --- a/packages/react/markput/package.json +++ b/packages/react/markput/package.json @@ -27,6 +27,7 @@ } }, "scripts": { + "typecheck": "tsc --noEmit", "build": "vite build && tsc && node prepack.js", "publish": "pnpm publish dist --no-git-checks --json --access public --provenance" }, diff --git a/packages/vue/markput/package.json b/packages/vue/markput/package.json index 897e3c11..bc8b2538 100644 --- a/packages/vue/markput/package.json +++ b/packages/vue/markput/package.json @@ -27,6 +27,7 @@ } }, "scripts": { + "typecheck": "vue-tsc --noEmit", "build": "vite build && vue-tsc --declaration --emitDeclarationOnly && node prepack.js", "publish": "pnpm publish dist --no-git-checks --json --access public --provenance" }, diff --git a/packages/vue/markput/src/components/BlockContainer.vue b/packages/vue/markput/src/components/BlockContainer.vue index 7cb663f4..22742133 100644 --- a/packages/vue/markput/src/components/BlockContainer.vue +++ b/packages/vue/markput/src/components/BlockContainer.vue @@ -1,7 +1,7 @@