diff --git a/.changeset/cache-form-correctness.md b/.changeset/cache-form-correctness.md deleted file mode 100644 index a2f73b35..00000000 --- a/.changeset/cache-form-correctness.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -'@cleverbrush/server': minor -'@cleverbrush/client': minor -'@cleverbrush/deep': minor -'@cleverbrush/react-form': minor ---- - -Use one browser-safe, deterministic `ct2:` cache key encoder across server and client helpers, response caches, and external invalidation. Selected properties and plain-object keys are sorted, values retain their types, and dates retain millisecond precision. Unsupported values fail explicitly. **Breaking:** every computed key changes, including property-free tags. Upgrade external cache writers and invalidators together, and flush or expire previous entries; literal base invalidation names and TTL settings remain unchanged. Successful mutations invalidate cached aliases and prevent older in-flight reads from refilling them; failed writes preserve entries. - -Synchronize mounted schema-form fields with form/field setters and reset baselines, using descriptor identities and stable external-store subscriptions. Discard obsolete async validation after value changes or reset. Add `handleSubmit`, reactive `submitting`/`error`, duplicate-submit protection, explicit success/failure results and opt-in error translation. Add `defineFieldRenderer` and `createFormSystem` for typed renderer values, variants, props and composable registries while retaining existing form APIs. See the cache/form migration guide for semantics and examples. - -Add reusable `deepClone` for plain objects, arrays and Dates with cycle/shared-reference preservation, sparse-array lengths, null prototypes and safe enumerable own string/symbol properties. React forms now use `deepClone` and `deepEqual` from `@cleverbrush/deep` for snapshots and dirty checks. **Breaking:** correct existing `deepEqual` semantics for null/type mismatches, equivalent cycles and shared references, signed zero, invalid Dates, symbol keys and sparse arrays. Opaque values such as Files, Maps, Sets and custom instances compare only by identity and remain references when cloned. Unordered arrays preserve duplicate/hole counts without hash-based matching or input mutation. Review consumers relying on the old outcomes; `deepExtend`, `HashObject` and `Transaction` are unchanged. diff --git a/.changeset/defaulted-form-fields.md b/.changeset/defaulted-form-fields.md deleted file mode 100644 index e8a02108..00000000 --- a/.changeset/defaulted-form-fields.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@cleverbrush/react-form': minor ---- - -Accept defaulted schema properties in typed Field, headless useField, and renderer schema bounds without losing value inference. Return a named TypedFormSystem so shared UI packages can export inferred registries while emitting declarations. diff --git a/libs/async/CHANGELOG.md b/libs/async/CHANGELOG.md index 74d85258..21115472 100644 --- a/libs/async/CHANGELOG.md +++ b/libs/async/CHANGELOG.md @@ -1,5 +1,7 @@ # @cleverbrush/async +## 4.5.0 + ## 4.4.3 ## 4.4.2 diff --git a/libs/async/package.json b/libs/async/package.json index 105a032b..9b9718d5 100644 --- a/libs/async/package.json +++ b/libs/async/package.json @@ -41,5 +41,5 @@ }, "type": "module", "types": "./dist/index.d.ts", - "version": "4.4.3" + "version": "4.5.0" } diff --git a/libs/auth/CHANGELOG.md b/libs/auth/CHANGELOG.md index 7bfda465..2fbbacd7 100644 --- a/libs/auth/CHANGELOG.md +++ b/libs/auth/CHANGELOG.md @@ -1,5 +1,11 @@ # @cleverbrush/auth +## 4.5.0 + +### Patch Changes + +- @cleverbrush/schema@4.5.0 + ## 4.4.3 ### Patch Changes diff --git a/libs/auth/package.json b/libs/auth/package.json index 5f48cf85..121c0c0e 100644 --- a/libs/auth/package.json +++ b/libs/auth/package.json @@ -5,7 +5,7 @@ "email": "andrew_zol@cleverbrush.com" }, "dependencies": { - "@cleverbrush/schema": "^4.4.3" + "@cleverbrush/schema": "^4.5.0" }, "description": "Transport-agnostic authentication & authorization — JWT, cookies, role-based policies, schema-typed principals", "files": [ @@ -46,5 +46,5 @@ }, "type": "module", "types": "./dist/index.d.ts", - "version": "4.4.3" + "version": "4.5.0" } diff --git a/libs/client/CHANGELOG.md b/libs/client/CHANGELOG.md index a2f204e8..96aff3f4 100644 --- a/libs/client/CHANGELOG.md +++ b/libs/client/CHANGELOG.md @@ -1,5 +1,21 @@ # @cleverbrush/client +## 4.5.0 + +### Minor Changes + +- f7c65ae: Use one browser-safe, deterministic `ct2:` cache key encoder across server and client helpers, response caches, and external invalidation. Selected properties and plain-object keys are sorted, values retain their types, and dates retain millisecond precision. Unsupported values fail explicitly. **Breaking:** every computed key changes, including property-free tags. Upgrade external cache writers and invalidators together, and flush or expire previous entries; literal base invalidation names and TTL settings remain unchanged. Successful mutations invalidate cached aliases and prevent older in-flight reads from refilling them; failed writes preserve entries. + + Synchronize mounted schema-form fields with form/field setters and reset baselines, using descriptor identities and stable external-store subscriptions. Discard obsolete async validation after value changes or reset. Add `handleSubmit`, reactive `submitting`/`error`, duplicate-submit protection, explicit success/failure results and opt-in error translation. Add `defineFieldRenderer` and `createFormSystem` for typed renderer values, variants, props and composable registries while retaining existing form APIs. See the cache/form migration guide for semantics and examples. + + Add reusable `deepClone` for plain objects, arrays and Dates with cycle/shared-reference preservation, sparse-array lengths, null prototypes and safe enumerable own string/symbol properties. React forms now use `deepClone` and `deepEqual` from `@cleverbrush/deep` for snapshots and dirty checks. **Breaking:** correct existing `deepEqual` semantics for null/type mismatches, equivalent cycles and shared references, signed zero, invalid Dates, symbol keys and sparse arrays. Opaque values such as Files, Maps, Sets and custom instances compare only by identity and remain references when cloned. Unordered arrays preserve duplicate/hole counts without hash-based matching or input mutation. Review consumers relying on the old outcomes; `deepExtend`, `HashObject` and `Transaction` are unchanged. + +### Patch Changes + +- Updated dependencies [f7c65ae] + - @cleverbrush/server@4.5.0 + - @cleverbrush/schema@4.5.0 + ## 4.4.3 ### Patch Changes diff --git a/libs/client/package.json b/libs/client/package.json index b2191cd6..1d71611d 100644 --- a/libs/client/package.json +++ b/libs/client/package.json @@ -5,8 +5,8 @@ "email": "andrew_zol@cleverbrush.com" }, "dependencies": { - "@cleverbrush/schema": "^4.4.3", - "@cleverbrush/server": "^4.4.3" + "@cleverbrush/schema": "^4.5.0", + "@cleverbrush/server": "^4.5.0" }, "devDependencies": { "@tanstack/react-query": "^5.75.0", @@ -105,5 +105,5 @@ }, "type": "module", "types": "./dist/index.d.ts", - "version": "4.4.3" + "version": "4.5.0" } diff --git a/libs/deep/CHANGELOG.md b/libs/deep/CHANGELOG.md index f7be9560..cb4d2b32 100644 --- a/libs/deep/CHANGELOG.md +++ b/libs/deep/CHANGELOG.md @@ -1,5 +1,15 @@ # @cleverbrush/deep +## 4.5.0 + +### Minor Changes + +- f7c65ae: Use one browser-safe, deterministic `ct2:` cache key encoder across server and client helpers, response caches, and external invalidation. Selected properties and plain-object keys are sorted, values retain their types, and dates retain millisecond precision. Unsupported values fail explicitly. **Breaking:** every computed key changes, including property-free tags. Upgrade external cache writers and invalidators together, and flush or expire previous entries; literal base invalidation names and TTL settings remain unchanged. Successful mutations invalidate cached aliases and prevent older in-flight reads from refilling them; failed writes preserve entries. + + Synchronize mounted schema-form fields with form/field setters and reset baselines, using descriptor identities and stable external-store subscriptions. Discard obsolete async validation after value changes or reset. Add `handleSubmit`, reactive `submitting`/`error`, duplicate-submit protection, explicit success/failure results and opt-in error translation. Add `defineFieldRenderer` and `createFormSystem` for typed renderer values, variants, props and composable registries while retaining existing form APIs. See the cache/form migration guide for semantics and examples. + + Add reusable `deepClone` for plain objects, arrays and Dates with cycle/shared-reference preservation, sparse-array lengths, null prototypes and safe enumerable own string/symbol properties. React forms now use `deepClone` and `deepEqual` from `@cleverbrush/deep` for snapshots and dirty checks. **Breaking:** correct existing `deepEqual` semantics for null/type mismatches, equivalent cycles and shared references, signed zero, invalid Dates, symbol keys and sparse arrays. Opaque values such as Files, Maps, Sets and custom instances compare only by identity and remain references when cloned. Unordered arrays preserve duplicate/hole counts without hash-based matching or input mutation. Review consumers relying on the old outcomes; `deepExtend`, `HashObject` and `Transaction` are unchanged. + ## 4.4.3 ### Patch Changes diff --git a/libs/deep/package.json b/libs/deep/package.json index fcac13a4..9383ac01 100644 --- a/libs/deep/package.json +++ b/libs/deep/package.json @@ -40,5 +40,5 @@ }, "type": "module", "types": "./dist/index.d.ts", - "version": "4.4.3" + "version": "4.5.0" } diff --git a/libs/di/CHANGELOG.md b/libs/di/CHANGELOG.md index cc6a5d64..cbc8e632 100644 --- a/libs/di/CHANGELOG.md +++ b/libs/di/CHANGELOG.md @@ -1,5 +1,11 @@ # @cleverbrush/di +## 4.5.0 + +### Patch Changes + +- @cleverbrush/schema@4.5.0 + ## 4.4.3 ### Patch Changes diff --git a/libs/di/package.json b/libs/di/package.json index a3d1d5da..fa26069a 100644 --- a/libs/di/package.json +++ b/libs/di/package.json @@ -5,7 +5,7 @@ "email": "andrew_zol@cleverbrush.com" }, "dependencies": { - "@cleverbrush/schema": "^4.4.3" + "@cleverbrush/schema": "^4.5.0" }, "description": ".NET-style dependency injection container for TypeScript — schema-driven service registration, three lifetimes, function injection", "files": [ @@ -46,5 +46,5 @@ }, "type": "module", "types": "./dist/index.d.ts", - "version": "4.4.3" + "version": "4.5.0" } diff --git a/libs/env/CHANGELOG.md b/libs/env/CHANGELOG.md index 2b34e186..23797a56 100644 --- a/libs/env/CHANGELOG.md +++ b/libs/env/CHANGELOG.md @@ -1,5 +1,12 @@ # @cleverbrush/env +## 4.5.0 + +### Patch Changes + +- Updated dependencies [f7c65ae] + - @cleverbrush/deep@4.5.0 + ## 4.4.3 ### Patch Changes diff --git a/libs/env/package.json b/libs/env/package.json index 7f3a7add..1e575299 100644 --- a/libs/env/package.json +++ b/libs/env/package.json @@ -5,7 +5,7 @@ "email": "andrew_zol@cleverbrush.com" }, "dependencies": { - "@cleverbrush/deep": "^4.4.3" + "@cleverbrush/deep": "^4.5.0" }, "peerDependencies": { "@cleverbrush/schema": "^4.0.0" @@ -54,5 +54,5 @@ "@types/node": "^25.4.0" }, "types": "./dist/index.d.ts", - "version": "4.4.3" + "version": "4.5.0" } diff --git a/libs/knex-clickhouse/CHANGELOG.md b/libs/knex-clickhouse/CHANGELOG.md index d7d0a7a6..b94f6427 100644 --- a/libs/knex-clickhouse/CHANGELOG.md +++ b/libs/knex-clickhouse/CHANGELOG.md @@ -1,5 +1,13 @@ # @cleverbrush/knex-clickhouse +## 4.5.0 + +### Patch Changes + +- Updated dependencies [f7c65ae] + - @cleverbrush/deep@4.5.0 + - @cleverbrush/async@4.5.0 + ## 4.4.3 ### Patch Changes diff --git a/libs/knex-clickhouse/package.json b/libs/knex-clickhouse/package.json index 1254e757..2ed2a671 100644 --- a/libs/knex-clickhouse/package.json +++ b/libs/knex-clickhouse/package.json @@ -5,8 +5,8 @@ "email": "andrew_zol@cleverbrush.com" }, "dependencies": { - "@cleverbrush/async": "^4.4.3", - "@cleverbrush/deep": "^4.4.3", + "@cleverbrush/async": "^4.5.0", + "@cleverbrush/deep": "^4.5.0", "@clickhouse/client": "^1.18.2" }, "peerDependencies": { @@ -48,5 +48,5 @@ }, "type": "module", "types": "./dist/index.d.ts", - "version": "4.4.3" + "version": "4.5.0" } diff --git a/libs/knex-schema/CHANGELOG.md b/libs/knex-schema/CHANGELOG.md index 68cc4bf1..727d2ee0 100644 --- a/libs/knex-schema/CHANGELOG.md +++ b/libs/knex-schema/CHANGELOG.md @@ -1,5 +1,11 @@ # @cleverbrush/knex-schema +## 4.5.0 + +### Patch Changes + +- @cleverbrush/schema@4.5.0 + ## 4.4.3 ### Patch Changes diff --git a/libs/knex-schema/package.json b/libs/knex-schema/package.json index f593183a..2c774b61 100644 --- a/libs/knex-schema/package.json +++ b/libs/knex-schema/package.json @@ -5,7 +5,7 @@ "email": "andrew_zol@cleverbrush.com" }, "dependencies": { - "@cleverbrush/schema": "^4.4.3" + "@cleverbrush/schema": "^4.5.0" }, "peerDependencies": { "knex": ">=3.1.0" @@ -55,5 +55,5 @@ }, "type": "module", "types": "./dist/index.d.ts", - "version": "4.4.3" + "version": "4.5.0" } diff --git a/libs/log/CHANGELOG.md b/libs/log/CHANGELOG.md index 4995df4f..d0459a47 100644 --- a/libs/log/CHANGELOG.md +++ b/libs/log/CHANGELOG.md @@ -1,5 +1,12 @@ # @cleverbrush/log +## 4.5.0 + +### Patch Changes + +- @cleverbrush/schema@4.5.0 +- @cleverbrush/async@4.5.0 + ## 4.4.3 ### Patch Changes diff --git a/libs/log/package.json b/libs/log/package.json index c99aeb34..081a65ce 100644 --- a/libs/log/package.json +++ b/libs/log/package.json @@ -44,8 +44,8 @@ "clean": "rm -rf dist tsconfig.tsbuildinfo" }, "dependencies": { - "@cleverbrush/schema": "^4.4.3", - "@cleverbrush/async": "^4.4.3" + "@cleverbrush/schema": "^4.5.0", + "@cleverbrush/async": "^4.5.0" }, "peerDependencies": { "@cleverbrush/di": "^4.0.0", @@ -71,5 +71,5 @@ }, "type": "module", "types": "./dist/index.d.ts", - "version": "4.4.3" + "version": "4.5.0" } diff --git a/libs/mapper/CHANGELOG.md b/libs/mapper/CHANGELOG.md index 82f94246..ac903bae 100644 --- a/libs/mapper/CHANGELOG.md +++ b/libs/mapper/CHANGELOG.md @@ -1,5 +1,11 @@ # @cleverbrush/mapper +## 4.5.0 + +### Patch Changes + +- @cleverbrush/schema@4.5.0 + ## 4.4.3 ### Patch Changes diff --git a/libs/mapper/package.json b/libs/mapper/package.json index b8d75392..7f03c05e 100644 --- a/libs/mapper/package.json +++ b/libs/mapper/package.json @@ -5,7 +5,7 @@ "email": "andrew_zol@cleverbrush.com" }, "dependencies": { - "@cleverbrush/schema": "^4.4.3" + "@cleverbrush/schema": "^4.5.0" }, "description": "Type-safe, schema-driven object mapper for @cleverbrush/schema — compile-time completeness, selector-based field mapping, auto-mapping", "files": [ @@ -45,5 +45,5 @@ }, "type": "module", "types": "./dist/index.d.ts", - "version": "4.4.3" + "version": "4.5.0" } diff --git a/libs/orm-cli/CHANGELOG.md b/libs/orm-cli/CHANGELOG.md index d39807ef..b7e29510 100644 --- a/libs/orm-cli/CHANGELOG.md +++ b/libs/orm-cli/CHANGELOG.md @@ -1,5 +1,11 @@ # @cleverbrush/orm-cli +## 4.5.0 + +### Patch Changes + +- @cleverbrush/knex-schema@4.5.0 + ## 4.4.3 ### Patch Changes diff --git a/libs/orm-cli/package.json b/libs/orm-cli/package.json index e1a53ebc..81ac2341 100644 --- a/libs/orm-cli/package.json +++ b/libs/orm-cli/package.json @@ -51,5 +51,5 @@ }, "type": "module", "types": "./dist/index.d.ts", - "version": "4.4.3" + "version": "4.5.0" } diff --git a/libs/orm/CHANGELOG.md b/libs/orm/CHANGELOG.md index a06ebe63..1e1092ba 100644 --- a/libs/orm/CHANGELOG.md +++ b/libs/orm/CHANGELOG.md @@ -1,5 +1,12 @@ # @cleverbrush/orm +## 4.5.0 + +### Patch Changes + +- @cleverbrush/schema@4.5.0 +- @cleverbrush/knex-schema@4.5.0 + ## 4.4.3 ### Patch Changes diff --git a/libs/orm/package.json b/libs/orm/package.json index 57c787cb..cd40c69b 100644 --- a/libs/orm/package.json +++ b/libs/orm/package.json @@ -5,8 +5,8 @@ "email": "andrew_zol@cleverbrush.com" }, "dependencies": { - "@cleverbrush/schema": "^4.4.3", - "@cleverbrush/knex-schema": "^4.4.3" + "@cleverbrush/schema": "^4.5.0", + "@cleverbrush/knex-schema": "^4.5.0" }, "peerDependencies": { "knex": ">=3.1.0" @@ -56,5 +56,5 @@ }, "type": "module", "types": "./dist/index.d.ts", - "version": "4.4.3" + "version": "4.5.0" } diff --git a/libs/otel/CHANGELOG.md b/libs/otel/CHANGELOG.md index 9ed9576f..83f68bd6 100644 --- a/libs/otel/CHANGELOG.md +++ b/libs/otel/CHANGELOG.md @@ -1,5 +1,7 @@ # @cleverbrush/otel +## 4.5.0 + ## 4.4.3 ## 4.4.2 diff --git a/libs/otel/package.json b/libs/otel/package.json index b98dbab4..1d49573b 100644 --- a/libs/otel/package.json +++ b/libs/otel/package.json @@ -110,5 +110,5 @@ }, "type": "module", "types": "./dist/index.d.ts", - "version": "4.4.3" + "version": "4.5.0" } diff --git a/libs/react-form/CHANGELOG.md b/libs/react-form/CHANGELOG.md index fae0e421..384e8f14 100644 --- a/libs/react-form/CHANGELOG.md +++ b/libs/react-form/CHANGELOG.md @@ -1,5 +1,23 @@ # @cleverbrush/react-form +## 4.5.0 + +### Minor Changes + +- f7c65ae: Use one browser-safe, deterministic `ct2:` cache key encoder across server and client helpers, response caches, and external invalidation. Selected properties and plain-object keys are sorted, values retain their types, and dates retain millisecond precision. Unsupported values fail explicitly. **Breaking:** every computed key changes, including property-free tags. Upgrade external cache writers and invalidators together, and flush or expire previous entries; literal base invalidation names and TTL settings remain unchanged. Successful mutations invalidate cached aliases and prevent older in-flight reads from refilling them; failed writes preserve entries. + + Synchronize mounted schema-form fields with form/field setters and reset baselines, using descriptor identities and stable external-store subscriptions. Discard obsolete async validation after value changes or reset. Add `handleSubmit`, reactive `submitting`/`error`, duplicate-submit protection, explicit success/failure results and opt-in error translation. Add `defineFieldRenderer` and `createFormSystem` for typed renderer values, variants, props and composable registries while retaining existing form APIs. See the cache/form migration guide for semantics and examples. + + Add reusable `deepClone` for plain objects, arrays and Dates with cycle/shared-reference preservation, sparse-array lengths, null prototypes and safe enumerable own string/symbol properties. React forms now use `deepClone` and `deepEqual` from `@cleverbrush/deep` for snapshots and dirty checks. **Breaking:** correct existing `deepEqual` semantics for null/type mismatches, equivalent cycles and shared references, signed zero, invalid Dates, symbol keys and sparse arrays. Opaque values such as Files, Maps, Sets and custom instances compare only by identity and remain references when cloned. Unordered arrays preserve duplicate/hole counts without hash-based matching or input mutation. Review consumers relying on the old outcomes; `deepExtend`, `HashObject` and `Transaction` are unchanged. + +- 0d480e9: Accept defaulted schema properties in typed Field, headless useField, and renderer schema bounds without losing value inference. Return a named TypedFormSystem so shared UI packages can export inferred registries while emitting declarations. + +### Patch Changes + +- Updated dependencies [f7c65ae] + - @cleverbrush/deep@4.5.0 + - @cleverbrush/schema@4.5.0 + ## 4.4.3 ### Patch Changes diff --git a/libs/react-form/package.json b/libs/react-form/package.json index 5d172e99..8ff25dfd 100644 --- a/libs/react-form/package.json +++ b/libs/react-form/package.json @@ -5,8 +5,8 @@ "email": "andrew_zol@cleverbrush.com" }, "dependencies": { - "@cleverbrush/deep": "^4.4.3", - "@cleverbrush/schema": "^4.4.3" + "@cleverbrush/deep": "^4.5.0", + "@cleverbrush/schema": "^4.5.0" }, "devDependencies": { "@types/react": "^19.0.0", @@ -51,5 +51,5 @@ }, "type": "module", "types": "./dist/index.d.ts", - "version": "4.4.3" + "version": "4.5.0" } diff --git a/libs/scheduler/CHANGELOG.md b/libs/scheduler/CHANGELOG.md index e498be2a..909a0d80 100644 --- a/libs/scheduler/CHANGELOG.md +++ b/libs/scheduler/CHANGELOG.md @@ -1,5 +1,11 @@ # @cleverbrush/scheduler +## 4.5.0 + +### Patch Changes + +- @cleverbrush/schema@4.5.0 + ## 4.4.3 ### Patch Changes diff --git a/libs/scheduler/package.json b/libs/scheduler/package.json index 89326d7a..895c6f59 100644 --- a/libs/scheduler/package.json +++ b/libs/scheduler/package.json @@ -5,7 +5,7 @@ "email": "andrew_zol@cleverbrush.com" }, "dependencies": { - "@cleverbrush/schema": "^4.4.3" + "@cleverbrush/schema": "^4.5.0" }, "devDependencies": { "@types/node": "^25.4.0" @@ -46,5 +46,5 @@ }, "type": "module", "types": "./dist/index.d.ts", - "version": "4.4.3" + "version": "4.5.0" } diff --git a/libs/schema-json/CHANGELOG.md b/libs/schema-json/CHANGELOG.md index 634e634d..0dddf86a 100644 --- a/libs/schema-json/CHANGELOG.md +++ b/libs/schema-json/CHANGELOG.md @@ -1,5 +1,7 @@ # @cleverbrush/schema-json +## 4.5.0 + ## 4.4.3 ## 4.4.2 diff --git a/libs/schema-json/package.json b/libs/schema-json/package.json index 99777769..6ff20583 100644 --- a/libs/schema-json/package.json +++ b/libs/schema-json/package.json @@ -47,5 +47,5 @@ }, "type": "module", "types": "./dist/index.d.ts", - "version": "4.4.3" + "version": "4.5.0" } diff --git a/libs/schema/CHANGELOG.md b/libs/schema/CHANGELOG.md index 7a479fe1..8a8c17c4 100644 --- a/libs/schema/CHANGELOG.md +++ b/libs/schema/CHANGELOG.md @@ -1,5 +1,7 @@ # @cleverbrush/schema +## 4.5.0 + ## 4.4.3 ## 4.4.2 diff --git a/libs/schema/package.json b/libs/schema/package.json index 873b752b..f831e644 100644 --- a/libs/schema/package.json +++ b/libs/schema/package.json @@ -109,9 +109,9 @@ }, "type": "module", "types": "./dist/index.d.ts", - "version": "4.4.3", + "version": "4.5.0", "devDependencies": { - "@cleverbrush/deep": "^4.4.3" + "@cleverbrush/deep": "^4.5.0" }, "peerDependencies": { "@standard-schema/spec": "^1.1.0" diff --git a/libs/server-openapi/CHANGELOG.md b/libs/server-openapi/CHANGELOG.md index 038f5626..1fcf2dcf 100644 --- a/libs/server-openapi/CHANGELOG.md +++ b/libs/server-openapi/CHANGELOG.md @@ -1,5 +1,7 @@ # @cleverbrush/server-openapi +## 4.5.0 + ## 4.4.3 ## 4.4.2 diff --git a/libs/server-openapi/package.json b/libs/server-openapi/package.json index 163e5cf6..a32bd1a6 100644 --- a/libs/server-openapi/package.json +++ b/libs/server-openapi/package.json @@ -54,5 +54,5 @@ }, "type": "module", "types": "./dist/index.d.ts", - "version": "4.4.3" + "version": "4.5.0" } diff --git a/libs/server/CHANGELOG.md b/libs/server/CHANGELOG.md index 347477f2..27bf66df 100644 --- a/libs/server/CHANGELOG.md +++ b/libs/server/CHANGELOG.md @@ -1,5 +1,21 @@ # @cleverbrush/server +## 4.5.0 + +### Minor Changes + +- f7c65ae: Use one browser-safe, deterministic `ct2:` cache key encoder across server and client helpers, response caches, and external invalidation. Selected properties and plain-object keys are sorted, values retain their types, and dates retain millisecond precision. Unsupported values fail explicitly. **Breaking:** every computed key changes, including property-free tags. Upgrade external cache writers and invalidators together, and flush or expire previous entries; literal base invalidation names and TTL settings remain unchanged. Successful mutations invalidate cached aliases and prevent older in-flight reads from refilling them; failed writes preserve entries. + + Synchronize mounted schema-form fields with form/field setters and reset baselines, using descriptor identities and stable external-store subscriptions. Discard obsolete async validation after value changes or reset. Add `handleSubmit`, reactive `submitting`/`error`, duplicate-submit protection, explicit success/failure results and opt-in error translation. Add `defineFieldRenderer` and `createFormSystem` for typed renderer values, variants, props and composable registries while retaining existing form APIs. See the cache/form migration guide for semantics and examples. + + Add reusable `deepClone` for plain objects, arrays and Dates with cycle/shared-reference preservation, sparse-array lengths, null prototypes and safe enumerable own string/symbol properties. React forms now use `deepClone` and `deepEqual` from `@cleverbrush/deep` for snapshots and dirty checks. **Breaking:** correct existing `deepEqual` semantics for null/type mismatches, equivalent cycles and shared references, signed zero, invalid Dates, symbol keys and sparse arrays. Opaque values such as Files, Maps, Sets and custom instances compare only by identity and remain references when cloned. Unordered arrays preserve duplicate/hole counts without hash-based matching or input mutation. Review consumers relying on the old outcomes; `deepExtend`, `HashObject` and `Transaction` are unchanged. + +### Patch Changes + +- @cleverbrush/schema@4.5.0 +- @cleverbrush/auth@4.5.0 +- @cleverbrush/di@4.5.0 + ## 4.4.3 ### Patch Changes diff --git a/libs/server/package.json b/libs/server/package.json index 96c83d44..8bae2427 100644 --- a/libs/server/package.json +++ b/libs/server/package.json @@ -5,9 +5,9 @@ "email": "andrew_zol@cleverbrush.com" }, "dependencies": { - "@cleverbrush/auth": "^4.4.3", - "@cleverbrush/di": "^4.4.3", - "@cleverbrush/schema": "^4.4.3", + "@cleverbrush/auth": "^4.5.0", + "@cleverbrush/di": "^4.5.0", + "@cleverbrush/schema": "^4.5.0", "@fastify/busboy": "^3.2.2", "ws": "^8.22.0" }, @@ -58,5 +58,5 @@ }, "type": "module", "types": "./dist/index.d.ts", - "version": "4.4.3" + "version": "4.5.0" } diff --git a/package-lock.json b/package-lock.json index cad43712..c331d06d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -136,7 +136,7 @@ }, "libs/async": { "name": "@cleverbrush/async", - "version": "4.4.3", + "version": "4.5.0", "license": "BSD-3-Clause", "devDependencies": { "@types/node": "^25.4.0" @@ -157,10 +157,10 @@ }, "libs/auth": { "name": "@cleverbrush/auth", - "version": "4.4.3", + "version": "4.5.0", "license": "BSD-3-Clause", "dependencies": { - "@cleverbrush/schema": "^4.4.3" + "@cleverbrush/schema": "^4.5.0" }, "engines": { "node": ">=24" @@ -178,11 +178,11 @@ }, "libs/client": { "name": "@cleverbrush/client", - "version": "4.4.3", + "version": "4.5.0", "license": "BSD-3-Clause", "dependencies": { - "@cleverbrush/schema": "^4.4.3", - "@cleverbrush/server": "^4.4.3" + "@cleverbrush/schema": "^4.5.0", + "@cleverbrush/server": "^4.5.0" }, "devDependencies": { "@tanstack/react-query": "^5.75.0", @@ -209,7 +209,7 @@ }, "libs/deep": { "name": "@cleverbrush/deep", - "version": "4.4.3", + "version": "4.5.0", "license": "BSD-3-Clause", "engines": { "node": ">=24" @@ -217,10 +217,10 @@ }, "libs/di": { "name": "@cleverbrush/di", - "version": "4.4.3", + "version": "4.5.0", "license": "BSD-3-Clause", "dependencies": { - "@cleverbrush/schema": "^4.4.3" + "@cleverbrush/schema": "^4.5.0" }, "engines": { "node": ">=24" @@ -228,10 +228,10 @@ }, "libs/env": { "name": "@cleverbrush/env", - "version": "4.4.3", + "version": "4.5.0", "license": "BSD-3-Clause", "dependencies": { - "@cleverbrush/deep": "^4.4.3" + "@cleverbrush/deep": "^4.5.0" }, "devDependencies": { "@cleverbrush/schema": "*", @@ -256,11 +256,11 @@ }, "libs/knex-clickhouse": { "name": "@cleverbrush/knex-clickhouse", - "version": "4.4.3", + "version": "4.5.0", "license": "BSD-3-Clause", "dependencies": { - "@cleverbrush/async": "^4.4.3", - "@cleverbrush/deep": "^4.4.3", + "@cleverbrush/async": "^4.5.0", + "@cleverbrush/deep": "^4.5.0", "@clickhouse/client": "^1.18.2" }, "engines": { @@ -272,10 +272,10 @@ }, "libs/knex-schema": { "name": "@cleverbrush/knex-schema", - "version": "4.4.3", + "version": "4.5.0", "license": "BSD-3-Clause", "dependencies": { - "@cleverbrush/schema": "^4.4.3" + "@cleverbrush/schema": "^4.5.0" }, "engines": { "node": ">=24" @@ -286,11 +286,11 @@ }, "libs/log": { "name": "@cleverbrush/log", - "version": "4.4.3", + "version": "4.5.0", "license": "BSD-3-Clause", "dependencies": { - "@cleverbrush/async": "^4.4.3", - "@cleverbrush/schema": "^4.4.3" + "@cleverbrush/async": "^4.5.0", + "@cleverbrush/schema": "^4.5.0" }, "devDependencies": { "@cleverbrush/di": "*", @@ -330,10 +330,10 @@ }, "libs/mapper": { "name": "@cleverbrush/mapper", - "version": "4.4.3", + "version": "4.5.0", "license": "BSD-3-Clause", "dependencies": { - "@cleverbrush/schema": "^4.4.3" + "@cleverbrush/schema": "^4.5.0" }, "engines": { "node": ">=24" @@ -341,11 +341,11 @@ }, "libs/orm": { "name": "@cleverbrush/orm", - "version": "4.4.3", + "version": "4.5.0", "license": "BSD-3-Clause", "dependencies": { - "@cleverbrush/knex-schema": "^4.4.3", - "@cleverbrush/schema": "^4.4.3" + "@cleverbrush/knex-schema": "^4.5.0", + "@cleverbrush/schema": "^4.5.0" }, "engines": { "node": ">=24" @@ -356,7 +356,7 @@ }, "libs/orm-cli": { "name": "@cleverbrush/orm-cli", - "version": "4.4.3", + "version": "4.5.0", "license": "BSD-3-Clause", "dependencies": { "@cleverbrush/knex-schema": "*", @@ -374,7 +374,7 @@ }, "libs/otel": { "name": "@cleverbrush/otel", - "version": "4.4.3", + "version": "4.5.0", "license": "BSD-3-Clause", "dependencies": { "@opentelemetry/api": "^1.9.0", @@ -449,11 +449,11 @@ }, "libs/react-form": { "name": "@cleverbrush/react-form", - "version": "4.4.3", + "version": "4.5.0", "license": "BSD-3-Clause", "dependencies": { - "@cleverbrush/deep": "^4.4.3", - "@cleverbrush/schema": "^4.4.3" + "@cleverbrush/deep": "^4.5.0", + "@cleverbrush/schema": "^4.5.0" }, "devDependencies": { "@types/react": "^19.0.0", @@ -468,10 +468,10 @@ }, "libs/scheduler": { "name": "@cleverbrush/scheduler", - "version": "4.4.3", + "version": "4.5.0", "license": "BSD-3-Clause", "dependencies": { - "@cleverbrush/schema": "^4.4.3" + "@cleverbrush/schema": "^4.5.0" }, "devDependencies": { "@types/node": "^25.4.0" @@ -523,10 +523,10 @@ }, "libs/schema": { "name": "@cleverbrush/schema", - "version": "4.4.3", + "version": "4.5.0", "license": "BSD-3-Clause", "devDependencies": { - "@cleverbrush/deep": "^4.4.3" + "@cleverbrush/deep": "^4.5.0" }, "engines": { "node": ">=24" @@ -537,7 +537,7 @@ }, "libs/schema-json": { "name": "@cleverbrush/schema-json", - "version": "4.4.3", + "version": "4.5.0", "license": "BSD-3-Clause", "devDependencies": { "@cleverbrush/schema": "*" @@ -552,12 +552,12 @@ }, "libs/server": { "name": "@cleverbrush/server", - "version": "4.4.3", + "version": "4.5.0", "license": "BSD-3-Clause", "dependencies": { - "@cleverbrush/auth": "^4.4.3", - "@cleverbrush/di": "^4.4.3", - "@cleverbrush/schema": "^4.4.3", + "@cleverbrush/auth": "^4.5.0", + "@cleverbrush/di": "^4.5.0", + "@cleverbrush/schema": "^4.5.0", "@fastify/busboy": "^3.2.2", "ws": "^8.22.0" }, @@ -581,7 +581,7 @@ }, "libs/server-openapi": { "name": "@cleverbrush/server-openapi", - "version": "4.4.3", + "version": "4.5.0", "license": "BSD-3-Clause", "devDependencies": { "@cleverbrush/auth": "*",