From 27df868ea8991d7588d182d071c24b7aa3cd3f86 Mon Sep 17 00:00:00 2001 From: Lucas Koehler Date: Thu, 16 Apr 2026 10:27:51 +0200 Subject: [PATCH 1/2] vue: add jest testing hints on imports and add exports to package.json - Add documentation on import order for jest (or other) unit tests using CJS transformations - Add explicit `exports` property to vue's package.json to facilitate tools finding the correct bundle Mitigates #2250 --- packages/vue/README.md | 21 +++++++++++++++++++++ packages/vue/package.json | 7 +++++++ 2 files changed, 28 insertions(+) diff --git a/packages/vue/README.md b/packages/vue/README.md index a03c58463e..1f9dba0737 100644 --- a/packages/vue/README.md +++ b/packages/vue/README.md @@ -289,6 +289,27 @@ const myComponent = defineComponent({ The injected `jsonforms` object is not meant to be modified directly. Instead it should be modified via the provided `dispatch` and by changing the props of the `json-forms` component. +### Testing with Jest / Vitest + +When testing custom renderers with Jest or Vitest using CJS transforms, `vue` must be imported **before** `@jsonforms/vue` in your renderer files. +This is due to the CJS bundle eagerly evaluating Vue component definitions at `require()` time, which can cause issues when Jest's module resolution processes imports sequentially. + +```ts +// Correct - import vue before @jsonforms/vue +import { defineComponent } from 'vue'; +import { rendererProps, useJsonFormsControl } from '@jsonforms/vue'; +``` + +```ts +// May cause errors in tests: +// "Property 'controlWrapper' was accessed during render but is not defined on instance" +import { rendererProps, useJsonFormsControl } from '@jsonforms/vue'; +import { defineComponent } from 'vue'; +``` + +This only affects test environments using CJS module transforms. +Browser builds using Webpack, Vite, or other ESM-aware bundlers are not affected. + ## License The JSON Forms project is licensed under the MIT License. See the [LICENSE file](https://github.com/eclipsesource/jsonforms/blob/master/LICENSE) for more information. diff --git a/packages/vue/package.json b/packages/vue/package.json index e3b1d62e8b..636a0ac7a6 100644 --- a/packages/vue/package.json +++ b/packages/vue/package.json @@ -34,6 +34,13 @@ "main": "lib/jsonforms-vue.cjs.js", "module": "lib/jsonforms-vue.esm.js", "types": "lib/index.d.ts", + "exports": { + ".": { + "import": "./lib/jsonforms-vue.esm.js", + "require": "./lib/jsonforms-vue.cjs.js", + "types": "./lib/index.d.ts" + } + }, "files": [ "lib/*", "src/*" From fe0d5310a671f11fb95eb6ffc213e5fdecdf90bb Mon Sep 17 00:00:00 2001 From: Lucas Koehler Date: Thu, 16 Apr 2026 17:33:43 +0200 Subject: [PATCH 2/2] remove explicit "exports" from vue package.json again --- packages/vue/package.json | 7 ------- 1 file changed, 7 deletions(-) diff --git a/packages/vue/package.json b/packages/vue/package.json index 636a0ac7a6..e3b1d62e8b 100644 --- a/packages/vue/package.json +++ b/packages/vue/package.json @@ -34,13 +34,6 @@ "main": "lib/jsonforms-vue.cjs.js", "module": "lib/jsonforms-vue.esm.js", "types": "lib/index.d.ts", - "exports": { - ".": { - "import": "./lib/jsonforms-vue.esm.js", - "require": "./lib/jsonforms-vue.cjs.js", - "types": "./lib/index.d.ts" - } - }, "files": [ "lib/*", "src/*"