From 1046ef2ca00151b799ddf6cc77186e4ea84ed690 Mon Sep 17 00:00:00 2001 From: Universe Date: Fri, 30 May 2025 18:19:10 +0900 Subject: [PATCH 1/7] typecheck guide --- AGENTS.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/AGENTS.md b/AGENTS.md index 6a09210345..d5595ee75c 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -153,4 +153,7 @@ pnpm turbo build # run dev pnpm turbo dev + +# package-specific (if possible) +pnpm typecheck # fallback when build fails due to network issues (nextjs package might fail due to font fetching issues) ``` From e16027c0f7eeba4bf13c8390c429c86bfb819f43 Mon Sep 17 00:00:00 2001 From: Universe Date: Fri, 30 May 2025 19:13:55 +0900 Subject: [PATCH 2/7] add turbo typecheck --- AGENTS.md | 4 ++-- apps/backgrounds/package.json | 3 ++- apps/blog/package.json | 2 +- apps/viewer/package.json | 3 ++- package.json | 1 + turbo.json | 4 ++-- 6 files changed, 10 insertions(+), 7 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index d5595ee75c..8f3d043f98 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -154,6 +154,6 @@ pnpm turbo build # run dev pnpm turbo dev -# package-specific (if possible) -pnpm typecheck # fallback when build fails due to network issues (nextjs package might fail due to font fetching issues) +# run typecheck +pnpm turbo typecheck # fallback when build fails due to network issues (nextjs package might fail due to font fetching issues) ``` diff --git a/apps/backgrounds/package.json b/apps/backgrounds/package.json index 56016fa3ae..472e193a95 100644 --- a/apps/backgrounds/package.json +++ b/apps/backgrounds/package.json @@ -7,7 +7,8 @@ "dev": "next dev --turbopack", "build": "next build", "start": "next start", - "lint": "next lint" + "lint": "next lint", + "typecheck": "tsc --noEmit" }, "dependencies": { "@next/third-parties": "15.3.2", diff --git a/apps/blog/package.json b/apps/blog/package.json index 46e501b439..2bff4cd413 100644 --- a/apps/blog/package.json +++ b/apps/blog/package.json @@ -12,7 +12,7 @@ "serve": "docusaurus serve", "write-translations": "docusaurus write-translations", "write-heading-ids": "docusaurus write-heading-ids", - "typecheck": "tsc" + "typecheck": "tsc --noEmit" }, "dependencies": { "@docusaurus/core": "3.7.0", diff --git a/apps/viewer/package.json b/apps/viewer/package.json index 18635b3dab..2be3e7d954 100644 --- a/apps/viewer/package.json +++ b/apps/viewer/package.json @@ -6,7 +6,8 @@ "dev": "next dev --turbopack", "build": "next build", "start": "next start", - "lint": "next lint" + "lint": "next lint", + "typecheck": "tsc --noEmit" }, "packageManager": "pnpm@10.10.0", "dependencies": { diff --git a/package.json b/package.json index 2d5e01fdbe..1759095a70 100644 --- a/package.json +++ b/package.json @@ -8,6 +8,7 @@ }, "scripts": { "test": "turbo run test", + "typecheck": "turbo run typecheck", "publish-packages": "turbo run build lint test && changeset version && changeset publish" }, "packageManager": "pnpm@10.10.0", diff --git a/turbo.json b/turbo.json index 0bd9b85c4e..3ba63147cc 100644 --- a/turbo.json +++ b/turbo.json @@ -8,8 +8,8 @@ "dependsOn": ["^build"], "outputs": [".next/**", "!.next/cache/**", "build/**", "dist/**"] }, - "check-types": { - "dependsOn": ["^check-types"] + "typecheck": { + "dependsOn": ["^typecheck"] }, "dev": { "persistent": true, From d73932f9ec5e8f2ffedf5f976220f3017193e8c9 Mon Sep 17 00:00:00 2001 From: Universe Date: Fri, 30 May 2025 19:45:29 +0900 Subject: [PATCH 3/7] use fast-deep-equal for canvas parts --- editor/grida-canvas-react/provider.tsx | 2 +- editor/grida-canvas/reducers/index.ts | 2 +- packages/grida-mixed-properties/index.ts | 4 ++-- packages/grida-mixed-properties/package.json | 6 ++---- packages/grida-mixed-properties/tsconfig.json | 1 + pnpm-lock.yaml | 10 +++------- 6 files changed, 10 insertions(+), 15 deletions(-) diff --git a/editor/grida-canvas-react/provider.tsx b/editor/grida-canvas-react/provider.tsx index 7242a6f752..c2edfc3b80 100644 --- a/editor/grida-canvas-react/provider.tsx +++ b/editor/grida-canvas-react/provider.tsx @@ -16,7 +16,7 @@ import { domapi } from "../grida-canvas/backends/dom"; import cmath from "@grida/cmath"; import type { Action } from "@/grida-canvas/action"; import mixed, { PropertyCompareFn } from "@grida/mixed-properties"; -import deepEqual from "deep-equal"; +import deepEqual from "fast-deep-equal"; import { toast } from "sonner"; import { is_direct_component_consumer } from "@/grida-canvas-utils/utils/supports"; import { Editor } from "@/grida-canvas/editor"; diff --git a/editor/grida-canvas/reducers/index.ts b/editor/grida-canvas/reducers/index.ts index 1ddeba1fc8..f41358ba74 100644 --- a/editor/grida-canvas/reducers/index.ts +++ b/editor/grida-canvas/reducers/index.ts @@ -7,7 +7,7 @@ import { } from "./methods"; import eventTargetReducer from "./event-target.reducer"; import documentReducer from "./document.reducer"; -import equal from "deep-equal"; +import equal from "fast-deep-equal"; import grida from "@grida/schema"; import { editor } from "@/grida-canvas"; import nid from "./tools/id"; diff --git a/packages/grida-mixed-properties/index.ts b/packages/grida-mixed-properties/index.ts index 2f720618f0..f3fac3c0c9 100644 --- a/packages/grida-mixed-properties/index.ts +++ b/packages/grida-mixed-properties/index.ts @@ -1,4 +1,4 @@ -import deepEqual from "deep-equal"; +import equal from "fast-deep-equal"; type MixedProperties = { [K in keyof T]: MixedProperty; @@ -89,7 +89,7 @@ export default function mixed, S>( idKey, ignoredKey: ignoredKeys = [], mixed: mixedIndicator, - compare = (_key: any, a: any, b: any) => deepEqual(a, b), + compare = (_key: any, a: any, b: any) => equal(a, b), }: MixedOptions ): MixedProperties { if (!objects.length) return {} as MixedProperties; diff --git a/packages/grida-mixed-properties/package.json b/packages/grida-mixed-properties/package.json index f2b19c9236..03fb5f7795 100644 --- a/packages/grida-mixed-properties/package.json +++ b/packages/grida-mixed-properties/package.json @@ -27,12 +27,10 @@ "dist" ], "dependencies": { - "deep-equal": "^2.2.3" + "fast-deep-equal": "^3.1.3" }, "jest": { "preset": "ts-jest" }, - "devDependencies": { - "@types/deep-equal": "^1.0.4" - } + "devDependencies": {} } diff --git a/packages/grida-mixed-properties/tsconfig.json b/packages/grida-mixed-properties/tsconfig.json index 8866c1b1df..7598e7491d 100644 --- a/packages/grida-mixed-properties/tsconfig.json +++ b/packages/grida-mixed-properties/tsconfig.json @@ -1,5 +1,6 @@ { "compilerOptions": { + "moduleResolution": "bundler", "esModuleInterop": true, "noImplicitAny": true, "strict": true diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2698093c63..d90d8a5616 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1167,13 +1167,9 @@ importers: packages/grida-mixed-properties: dependencies: - deep-equal: - specifier: ^2.2.3 - version: 2.2.3 - devDependencies: - '@types/deep-equal': - specifier: ^1.0.4 - version: 1.0.4 + fast-deep-equal: + specifier: ^3.1.3 + version: 3.1.3 packages/grida-tokens: {} From 731e72f24903dcabf9dd3ae4ca989613096d319b Mon Sep 17 00:00:00 2001 From: Universe Date: Fri, 30 May 2025 20:29:35 +0900 Subject: [PATCH 4/7] optimize --- editor/grida-canvas-react/provider.tsx | 22 ++++++------------- .../modals/import-from-grida-file.tsx | 2 +- 2 files changed, 8 insertions(+), 16 deletions(-) diff --git a/editor/grida-canvas-react/provider.tsx b/editor/grida-canvas-react/provider.tsx index c2edfc3b80..e613fd1225 100644 --- a/editor/grida-canvas-react/provider.tsx +++ b/editor/grida-canvas-react/provider.tsx @@ -16,7 +16,7 @@ import { domapi } from "../grida-canvas/backends/dom"; import cmath from "@grida/cmath"; import type { Action } from "@/grida-canvas/action"; import mixed, { PropertyCompareFn } from "@grida/mixed-properties"; -import deepEqual from "fast-deep-equal"; +import equal from "fast-deep-equal"; import { toast } from "sonner"; import { is_direct_component_consumer } from "@/grida-canvas-utils/utils/supports"; import { Editor } from "@/grida-canvas/editor"; @@ -247,25 +247,17 @@ const compareNodeProperty: PropertyCompareFn< // support gradient (as the id should be ignored) const { id: __, ..._a } = (a ?? {}) as cg.AnyPaint; const { id: _, ..._b } = (b ?? {}) as cg.AnyPaint; - return deepEqual(_a, _b); + return equal(_a, _b); } - return deepEqual(a, b); + return equal(a, b); }; export function useCurrentSelection() { const instance = useCurrentEditor(); - const state = useEditorState(instance, (state) => ({ - selection: state.selection, - document: state.document, - })); - - const selection = state.selection; - - const nodes = useMemo(() => { - return selection.map((node_id) => { - return state.document.nodes[node_id]; - }); - }, [selection, state.document.nodes]); + const selection = useEditorState(instance, (state) => state.selection); + const nodes = useEditorState(instance, (state) => + selection.map((id) => state.document.nodes[id]) + ); const mixedProperties = useMemo( () => diff --git a/editor/scaffolds/playground-canvas/modals/import-from-grida-file.tsx b/editor/scaffolds/playground-canvas/modals/import-from-grida-file.tsx index 2721569374..ee75e0465c 100644 --- a/editor/scaffolds/playground-canvas/modals/import-from-grida-file.tsx +++ b/editor/scaffolds/playground-canvas/modals/import-from-grida-file.tsx @@ -56,7 +56,7 @@ export function ImportFromGridaFileJsonDialog({
- +