From f1d76d3f80a7f93277a8fe7ea18bbf66ab644068 Mon Sep 17 00:00:00 2001 From: Daniel Steigerwald Date: Fri, 26 Jan 2024 17:05:12 +0100 Subject: [PATCH] Effect 2.2.2 and Schema 0.61.2 Schema parse renamed to decodeUnknown. --- .changeset/modern-beds-tickle.md | 8 + apps/native/App.tsx | 6 +- apps/native/package.json | 4 +- apps/web/components/NextJsExample.tsx | 8 +- apps/web/package.json | 4 +- apps/web/pages/docs/quickstart.mdx | 2 +- apps/web/pages/index.mdx | 2 +- examples/electron-app/src/Example.tsx | 8 +- examples/nextjs/app/page.tsx | 8 +- examples/remix/app/routes/_index.tsx | 8 +- examples/vite/src/App.tsx | 8 +- packages/eslint-config-evolu/package.json | 2 +- packages/evolu-common/package.json | 8 +- packages/evolu-common/src/Crdt.ts | 12 +- packages/evolu-common/src/Crypto.ts | 6 +- packages/evolu-common/src/Db.ts | 13 +- packages/evolu-common/src/Evolu.ts | 8 +- packages/evolu-common/src/Model.ts | 8 +- packages/evolu-common/test/Crdt.test.ts | 2 +- packages/evolu-common/test/Model.test.ts | 12 +- packages/evolu-common/test/utils.ts | 2 +- packages/evolu-server/package.json | 4 +- pnpm-lock.yaml | 1395 ++++++++++----------- 23 files changed, 766 insertions(+), 772 deletions(-) create mode 100644 .changeset/modern-beds-tickle.md diff --git a/.changeset/modern-beds-tickle.md b/.changeset/modern-beds-tickle.md new file mode 100644 index 000000000..2a02608c6 --- /dev/null +++ b/.changeset/modern-beds-tickle.md @@ -0,0 +1,8 @@ +--- +"@evolu/common": patch +"@evolu/server": patch +--- + +Effect 2.2.2 and Schema 0.61.2 + +Schema parse renamed to decodeUnknown. diff --git a/apps/native/App.tsx b/apps/native/App.tsx index 844bb9c6f..657471db4 100644 --- a/apps/native/App.tsx +++ b/apps/native/App.tsx @@ -122,7 +122,7 @@ const OwnerActions: FC = () => { const [isMnemonicShown, setIsMnemonicShown] = useState(false); const [isRestoreShown, setIsRestoreShown] = useState(false); const [mnemonic, setMnemonic] = useState(""); - const parsedMnemonic = S.parseEither(NonEmptyString1000)(mnemonic); + const parsedMnemonic = S.decodeUnknownEither(NonEmptyString1000)(mnemonic); const handleMnemonicInputEndEditing = (): void => { Either.match(parsedMnemonic, { @@ -210,7 +210,7 @@ const Todos: FC = () => { const { create } = useEvolu(); const [text, setText] = useState(""); - const newTodoTitle = S.parseEither(NonEmptyString1000)(text); + const newTodoTitle = S.decodeUnknownEither(NonEmptyString1000)(text); const handleTextInputEndEditing = (): void => { Either.match(newTodoTitle, { onLeft: Function.constVoid, @@ -334,7 +334,7 @@ const TodoCategories: FC = () => { const { rows } = useQuery(todoCategories); const [text, setText] = useState(""); - const newTodoTitle = S.parseEither(NonEmptyString50)(text); + const newTodoTitle = S.decodeUnknownEither(NonEmptyString50)(text); const handleTextInputEndEditing = (): void => { Either.match(newTodoTitle, { onLeft: Function.constVoid, diff --git a/apps/native/package.json b/apps/native/package.json index bd8b279de..f50021093 100644 --- a/apps/native/package.json +++ b/apps/native/package.json @@ -11,12 +11,12 @@ "clean": "rm -rf .turbo .expo node_modules dist" }, "dependencies": { - "@effect/schema": "^0.60.7", + "@effect/schema": "^0.61.2", "@evolu/react-native": "workspace:*", "@react-native-community/netinfo": "9.3.10", "buffer": "^6.0.3", "crypto-browserify": "^3.12.0", - "effect": "2.2.0", + "effect": "2.2.2", "events": "^3.3.0", "expo": "^49.0.21", "expo-sqlite": "~11.3.3", diff --git a/apps/web/components/NextJsExample.tsx b/apps/web/components/NextJsExample.tsx index 02574bf16..e725d23aa 100644 --- a/apps/web/components/NextJsExample.tsx +++ b/apps/web/components/NextJsExample.tsx @@ -85,11 +85,11 @@ const createFixtures = (): Promise => if (todos.row || categories.row) return; const { id: notUrgentCategoryId } = evolu.create("todoCategory", { - name: S.parseSync(NonEmptyString50)("Not Urgent"), + name: S.decodeSync(NonEmptyString50)("Not Urgent"), }); evolu.create("todo", { - title: S.parseSync(NonEmptyString1000)("Try React Suspense"), + title: S.decodeSync(NonEmptyString1000)("Try React Suspense"), categoryId: notUrgentCategoryId, }); }); @@ -417,13 +417,13 @@ const Button: FC<{ }; const prompt = ( - schema: S.Schema, + schema: S.Schema, message: string, onSuccess: (value: To) => void, ): void => { const value = window.prompt(message); if (value == null) return; // on cancel - const a = S.parseEither(schema)(value); + const a = S.decodeUnknownEither(schema)(value); if (a._tag === "Left") { alert(formatError(a.left)); return; diff --git a/apps/web/package.json b/apps/web/package.json index f9f1402c3..846c3fe37 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -10,11 +10,11 @@ "clean": "rm -rf .turbo .next node_modules" }, "dependencies": { - "@effect/schema": "^0.60.7", + "@effect/schema": "^0.61.2", "@evolu/common": "workspace:*", "@evolu/react": "workspace:*", "clsx": "^2.1.0", - "effect": "2.2.0", + "effect": "2.2.2", "next": "14.1.0", "nextra": "^2.13.2", "nextra-theme-docs": "^2.13.2", diff --git a/apps/web/pages/docs/quickstart.mdx b/apps/web/pages/docs/quickstart.mdx index 6c9704fb1..eb8106b7d 100644 --- a/apps/web/pages/docs/quickstart.mdx +++ b/apps/web/pages/docs/quickstart.mdx @@ -56,7 +56,7 @@ It has to be parsed with the `NonEmptyString1000` schema. Isn't that beautiful? import * as S from "@effect/schema/Schema"; import { NonEmptyString1000 } from "@evolu/react"; -S.parse(NonEmptyString1000)(title); +S.decode(NonEmptyString1000)(title); ``` Learn more about [Schema](https://github.com/effect-ts/schema). diff --git a/apps/web/pages/index.mdx b/apps/web/pages/index.mdx index d0808a38e..c18321ae9 100644 --- a/apps/web/pages/index.mdx +++ b/apps/web/pages/index.mdx @@ -86,7 +86,7 @@ const { rows } = useQuery(allTodos); // Create a todo. const { create } = useEvolu(); create("todo", { - title: S.parseSync(NonEmptyString1000)("Learn Effect"), + title: S.decodeSync(NonEmptyString1000)("Learn Effect"), }); // Update a todo. diff --git a/examples/electron-app/src/Example.tsx b/examples/electron-app/src/Example.tsx index 3999c02c9..3cbf4fdec 100644 --- a/examples/electron-app/src/Example.tsx +++ b/examples/electron-app/src/Example.tsx @@ -80,11 +80,11 @@ const createFixtures = (): Promise => if (todos.row || categories.row) return; const { id: notUrgentCategoryId } = evolu.create("todoCategory", { - name: S.parseSync(NonEmptyString50)("Not Urgent"), + name: S.decodeSync(NonEmptyString50)("Not Urgent"), }); evolu.create("todo", { - title: S.parseSync(NonEmptyString1000)("Try React Suspense"), + title: S.decodeSync(NonEmptyString1000)("Try React Suspense"), categoryId: notUrgentCategoryId, }); }); @@ -412,13 +412,13 @@ const Button: FC<{ }; const prompt = ( - schema: S.Schema, + schema: S.Schema, message: string, onSuccess: (value: To) => void, ): void => { const value = window.prompt(message); if (value == null) return; // on cancel - const a = S.parseEither(schema)(value); + const a = S.decodeUnknownEither(schema)(value); if (a._tag === "Left") { alert(formatError(a.left)); return; diff --git a/examples/nextjs/app/page.tsx b/examples/nextjs/app/page.tsx index 10595bb01..42818636f 100644 --- a/examples/nextjs/app/page.tsx +++ b/examples/nextjs/app/page.tsx @@ -82,11 +82,11 @@ const createFixtures = (): Promise => if (todos.row || categories.row) return; const { id: notUrgentCategoryId } = evolu.create("todoCategory", { - name: S.parseSync(NonEmptyString50)("Not Urgent"), + name: S.decodeSync(NonEmptyString50)("Not Urgent"), }); evolu.create("todo", { - title: S.parseSync(NonEmptyString1000)("Try React Suspense"), + title: S.decodeSync(NonEmptyString1000)("Try React Suspense"), categoryId: notUrgentCategoryId, }); }); @@ -414,13 +414,13 @@ const Button: FC<{ }; const prompt = ( - schema: S.Schema, + schema: S.Schema, message: string, onSuccess: (value: To) => void, ): void => { const value = window.prompt(message); if (value == null) return; // on cancel - const a = S.parseEither(schema)(value); + const a = S.decodeUnknownEither(schema)(value); if (a._tag === "Left") { alert(formatError(a.left)); return; diff --git a/examples/remix/app/routes/_index.tsx b/examples/remix/app/routes/_index.tsx index 800eb4bed..ac9398acb 100644 --- a/examples/remix/app/routes/_index.tsx +++ b/examples/remix/app/routes/_index.tsx @@ -84,11 +84,11 @@ const createFixtures = (): Promise => if (todos.row || categories.row) return; const { id: notUrgentCategoryId } = evolu.create("todoCategory", { - name: S.parseSync(NonEmptyString50)("Not Urgent"), + name: S.decodeSync(NonEmptyString50)("Not Urgent"), }); evolu.create("todo", { - title: S.parseSync(NonEmptyString1000)("Try React Suspense"), + title: S.decodeSync(NonEmptyString1000)("Try React Suspense"), categoryId: notUrgentCategoryId, }); }); @@ -416,13 +416,13 @@ const Button: FC<{ }; const prompt = ( - schema: S.Schema, + schema: S.Schema, message: string, onSuccess: (value: To) => void, ): void => { const value = window.prompt(message); if (value == null) return; // on cancel - const a = S.parseEither(schema)(value); + const a = S.decodeUnknownEither(schema)(value); if (a._tag === "Left") { alert(formatError(a.left)); return; diff --git a/examples/vite/src/App.tsx b/examples/vite/src/App.tsx index c83c5773e..1cc9e101d 100644 --- a/examples/vite/src/App.tsx +++ b/examples/vite/src/App.tsx @@ -80,11 +80,11 @@ const createFixtures = (): Promise => if (todos.row || categories.row) return; const { id: notUrgentCategoryId } = evolu.create("todoCategory", { - name: S.parseSync(NonEmptyString50)("Not Urgent"), + name: S.decodeSync(NonEmptyString50)("Not Urgent"), }); evolu.create("todo", { - title: S.parseSync(NonEmptyString1000)("Try React Suspense"), + title: S.decodeSync(NonEmptyString1000)("Try React Suspense"), categoryId: notUrgentCategoryId, }); }); @@ -412,13 +412,13 @@ const Button: FC<{ }; const prompt = ( - schema: S.Schema, + schema: S.Schema, message: string, onSuccess: (value: To) => void, ): void => { const value = window.prompt(message); if (value == null) return; // on cancel - const a = S.parseEither(schema)(value); + const a = S.decodeUnknownEither(schema)(value); if (a._tag === "Left") { alert(formatError(a.left)); return; diff --git a/packages/eslint-config-evolu/package.json b/packages/eslint-config-evolu/package.json index 74e8b4507..270252d0d 100644 --- a/packages/eslint-config-evolu/package.json +++ b/packages/eslint-config-evolu/package.json @@ -12,7 +12,7 @@ "eslint-config-next": "14.1.0", "eslint-config-prettier": "^9.1.0", "eslint-config-turbo": "^1.11.1", - "eslint-plugin-jsdoc": "^48.0.2", + "eslint-plugin-jsdoc": "^48.0.4", "eslint-plugin-node": "^11.1.0", "next": "14.1.0", "react": "^18.2.0", diff --git a/packages/evolu-common/package.json b/packages/evolu-common/package.json index 79d81e95c..97dc32cac 100644 --- a/packages/evolu-common/package.json +++ b/packages/evolu-common/package.json @@ -61,20 +61,20 @@ "nanoid": "^5.0.4" }, "devDependencies": { - "@effect/schema": "^0.60.7", + "@effect/schema": "^0.61.2", "@evolu/tsconfig": "workspace:*", "@protobuf-ts/plugin": "^2.9.3", "@protobuf-ts/protoc": "^2.9.3", "array-shuffle": "^3.0.0", - "effect": "2.2.0", + "effect": "2.2.2", "eslint": "^8.56.0", "eslint-config-evolu": "workspace:*", "typescript": "^5.3.3", "vitest": "^1.2.1" }, "peerDependencies": { - "@effect/schema": "^0.60.7", - "effect": "2.2.0" + "@effect/schema": "^0.61.2", + "effect": "2.2.2" }, "publishConfig": { "access": "public" diff --git a/packages/evolu-common/src/Crdt.ts b/packages/evolu-common/src/Crdt.ts index baa7ae384..3ae9e7667 100644 --- a/packages/evolu-common/src/Crdt.ts +++ b/packages/evolu-common/src/Crdt.ts @@ -44,14 +44,14 @@ export const Millis = S.number.pipe( export type Millis = S.Schema.To; -export const initialMillis = S.parseSync(Millis)( +export const initialMillis = S.decodeSync(Millis)( AllowedTimeRange.greaterThan + 1, ); export const Counter = S.number.pipe(S.between(0, 65535), S.brand("Counter")); export type Counter = S.Schema.To; -const initialCounter = S.parseSync(Counter)(0); +const initialCounter = S.decodeSync(Counter)(0); export type TimestampHash = number & Brand.Brand<"TimestampHash">; @@ -76,7 +76,7 @@ export const unsafeTimestampFromString = (s: TimestampString): Timestamp => { export const timestampToHash = (t: Timestamp): TimestampHash => murmurhash(timestampToString(t)) as TimestampHash; -const syncNodeId = S.parseSync(NodeId)("0000000000000000"); +const syncNodeId = S.decodeSync(NodeId)("0000000000000000"); export const makeSyncTimestamp = ( millis: Millis = initialMillis, @@ -106,7 +106,7 @@ export const Time = Context.Tag