@narrative.io/jsonforms-provider-protocols 1.1.0-beta.10 → 1.1.0-beta.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -5,6 +5,7 @@ import JfEnum from "./JfEnum.vue";
5
5
  import JfEnumArray from "./JfEnumArray.vue";
6
6
  import JfBoolean from "./JfBoolean.vue";
7
7
  import type { JsonFormsRendererRegistryEntry } from "@jsonforms/core";
8
+ export declare function createPrimevueRenderers(): JsonFormsRendererRegistryEntry[];
8
9
  export declare const primevueRenderers: JsonFormsRendererRegistryEntry[];
9
10
  export { JfText, JfTextArea, JfNumber, JfEnum, JfEnumArray, JfBoolean };
10
11
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/vue/primevue/index.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,cAAc,CAAC;AAClC,OAAO,UAAU,MAAM,kBAAkB,CAAC;AAC1C,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,MAAM,MAAM,cAAc,CAAC;AAClC,OAAO,WAAW,MAAM,mBAAmB,CAAC;AAC5C,OAAO,SAAS,MAAM,iBAAiB,CAAC;AA+BxC,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,iBAAiB,CAAC;AA2BtE,eAAO,MAAM,iBAAiB,EAAE,8BAA8B,EAAO,CAAC;AA8CtE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/vue/primevue/index.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,cAAc,CAAC;AAClC,OAAO,UAAU,MAAM,kBAAkB,CAAC;AAC1C,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,MAAM,MAAM,cAAc,CAAC;AAClC,OAAO,WAAW,MAAM,mBAAmB,CAAC;AAC5C,OAAO,SAAS,MAAM,iBAAiB,CAAC;AA+BxC,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,iBAAiB,CAAC;AAMtE,wBAAgB,uBAAuB,IAAI,8BAA8B,EAAE,CAqF1E;AAKD,eAAO,MAAM,iBAAiB,EAAE,8BAA8B,EA4B7D,CAAC;AAEF,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC"}
@@ -28,55 +28,98 @@ const injectLayoutStyles = () => {
28
28
  }
29
29
  };
30
30
  injectLayoutStyles();
31
- const isScalarEnum = (s) => {
32
- const schema = s;
33
- return schema && schema.type !== "array" && (Array.isArray(schema.enum) || Array.isArray(schema.oneOf));
34
- };
35
- const isEnumArray = (s) => {
36
- const schema = s;
37
- return schema?.type === "array" && (Array.isArray(schema.items?.enum) || Array.isArray(schema.items?.oneOf));
38
- };
39
31
  const PRIME = 100;
40
- const primevueRenderers = [];
41
- Promise.resolve().then(async () => {
42
- const {
43
- rankWith,
44
- isStringControl,
45
- or,
46
- isNumberControl,
47
- isIntegerControl,
48
- and,
49
- isControl,
50
- schemaMatches,
51
- isBooleanControl
52
- } = await import("@jsonforms/core");
53
- const isMultilineString = (uischema, schema) => {
54
- const controlUischema = uischema;
55
- return and(isStringControl, () => controlUischema?.options?.multi === true)(
56
- uischema,
57
- schema,
58
- {}
32
+ function createPrimevueRenderers() {
33
+ try {
34
+ const jsonformsCore = require("@jsonforms/core");
35
+ const {
36
+ rankWith,
37
+ isStringControl,
38
+ or,
39
+ isNumberControl,
40
+ isIntegerControl,
41
+ and,
42
+ isControl,
43
+ schemaMatches,
44
+ isBooleanControl
45
+ } = jsonformsCore;
46
+ const isScalarEnum = (s) => {
47
+ const schema = s;
48
+ return schema && schema.type !== "array" && (Array.isArray(schema.enum) || Array.isArray(schema.oneOf));
49
+ };
50
+ const isEnumArray = (s) => {
51
+ const schema = s;
52
+ return schema?.type === "array" && (Array.isArray(schema.items?.enum) || Array.isArray(schema.items?.oneOf));
53
+ };
54
+ const isMultilineString = (uischema, schema) => {
55
+ const controlUischema = uischema;
56
+ return and(
57
+ isStringControl,
58
+ () => controlUischema?.options?.multi === true
59
+ )(
60
+ uischema,
61
+ schema,
62
+ {}
63
+ );
64
+ };
65
+ return [
66
+ // Multiline text has higher priority than regular text
67
+ { tester: rankWith(PRIME + 4, isMultilineString), renderer: _sfc_main },
68
+ { tester: rankWith(PRIME + 3, isStringControl), renderer: _sfc_main$1 },
69
+ {
70
+ tester: rankWith(PRIME + 4, or(isNumberControl, isIntegerControl)),
71
+ renderer: _sfc_main$2
72
+ },
73
+ {
74
+ tester: rankWith(
75
+ PRIME + 5,
76
+ and(isControl, schemaMatches(isScalarEnum))
77
+ ),
78
+ renderer: _sfc_main$3
79
+ },
80
+ {
81
+ tester: rankWith(PRIME + 6, and(isControl, schemaMatches(isEnumArray))),
82
+ renderer: _sfc_main$4
83
+ },
84
+ { tester: rankWith(PRIME + 3, isBooleanControl), renderer: _sfc_main$5 }
85
+ ];
86
+ } catch {
87
+ console.warn(
88
+ "@jsonforms/core not available, returning empty renderers array"
59
89
  );
60
- };
61
- primevueRenderers.push(
62
- // Multiline text has higher priority than regular text
63
- { tester: rankWith(PRIME + 4, isMultilineString), renderer: _sfc_main },
64
- { tester: rankWith(PRIME + 3, isStringControl), renderer: _sfc_main$1 },
65
- {
66
- tester: rankWith(PRIME + 4, or(isNumberControl, isIntegerControl)),
67
- renderer: _sfc_main$2
90
+ return [];
91
+ }
92
+ }
93
+ let _cachedRenderers = null;
94
+ const primevueRenderers = new Proxy(
95
+ [],
96
+ {
97
+ get(target, prop) {
98
+ if (_cachedRenderers === null) {
99
+ _cachedRenderers = createPrimevueRenderers();
100
+ }
101
+ return Reflect.get(_cachedRenderers, prop);
68
102
  },
69
- {
70
- tester: rankWith(PRIME + 5, and(isControl, schemaMatches(isScalarEnum))),
71
- renderer: _sfc_main$3
103
+ has(target, prop) {
104
+ if (_cachedRenderers === null) {
105
+ _cachedRenderers = createPrimevueRenderers();
106
+ }
107
+ return Reflect.has(_cachedRenderers, prop);
72
108
  },
73
- {
74
- tester: rankWith(PRIME + 6, and(isControl, schemaMatches(isEnumArray))),
75
- renderer: _sfc_main$4
109
+ ownKeys() {
110
+ if (_cachedRenderers === null) {
111
+ _cachedRenderers = createPrimevueRenderers();
112
+ }
113
+ return Reflect.ownKeys(_cachedRenderers);
76
114
  },
77
- { tester: rankWith(PRIME + 3, isBooleanControl), renderer: _sfc_main$5 }
78
- );
79
- });
115
+ getOwnPropertyDescriptor(_, prop) {
116
+ if (_cachedRenderers === null) {
117
+ _cachedRenderers = createPrimevueRenderers();
118
+ }
119
+ return Reflect.getOwnPropertyDescriptor(_cachedRenderers, prop);
120
+ }
121
+ }
122
+ );
80
123
  export {
81
124
  _sfc_main$5 as JfBoolean,
82
125
  _sfc_main$3 as JfEnum,
@@ -84,6 +127,7 @@ export {
84
127
  _sfc_main$2 as JfNumber,
85
128
  _sfc_main$1 as JfText,
86
129
  _sfc_main as JfTextArea,
130
+ createPrimevueRenderers,
87
131
  primevueRenderers
88
132
  };
89
133
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/vue/primevue/index.ts"],"sourcesContent":["import JfText from \"./JfText.vue\";\nimport JfTextArea from \"./JfTextArea.vue\";\nimport JfNumber from \"./JfNumber.vue\";\nimport JfEnum from \"./JfEnum.vue\";\nimport JfEnumArray from \"./JfEnumArray.vue\";\nimport JfBoolean from \"./JfBoolean.vue\";\n\n// Auto-inject layout styles\nconst injectLayoutStyles = () => {\n if (typeof window !== \"undefined\" && typeof document !== \"undefined\") {\n if (!document.getElementById(\"jsonforms-primevue-styles\")) {\n const style = document.createElement(\"style\");\n style.id = \"jsonforms-primevue-styles\";\n style.textContent = `\n/* JSONForms PrimeVue Provider Protocols Layout Styles */\n.vertical-layout {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n gap: 1rem;\n width: 100%;\n}\n\n.vertical-layout-item {\n width: 100%;\n}\n `;\n document.head.appendChild(style);\n }\n }\n};\n\n// Inject styles when this module is imported\ninjectLayoutStyles();\n\n// Import types only to avoid circular dependencies\nimport type { JsonFormsRendererRegistryEntry } from \"@jsonforms/core\";\n\n// helpers for enum detection\nconst isScalarEnum = (s?: object) => {\n const schema = s as { type?: string; enum?: unknown[]; oneOf?: unknown[] };\n return (\n schema &&\n schema.type !== \"array\" &&\n (Array.isArray(schema.enum) || Array.isArray(schema.oneOf))\n );\n};\n\nconst isEnumArray = (s?: object) => {\n const schema = s as {\n type?: string;\n items?: { enum?: unknown[]; oneOf?: unknown[] };\n };\n return (\n schema?.type === \"array\" &&\n (Array.isArray(schema.items?.enum) || Array.isArray(schema.items?.oneOf))\n );\n};\n\n// Give PrimeVue renderers a high base rank; vanilla commonly uses small ranks (2–5)\nconst PRIME = 100;\n\n// Create empty array first, populate it after module initialization to avoid circular deps\nexport const primevueRenderers: JsonFormsRendererRegistryEntry[] = [];\n\n// Populate the renderers array after a microtask delay to avoid circular dependency\nPromise.resolve().then(async () => {\n const {\n rankWith,\n isStringControl,\n or,\n isNumberControl,\n isIntegerControl,\n and,\n isControl,\n schemaMatches,\n isBooleanControl,\n } = await import(\"@jsonforms/core\");\n\n // helper for multiline detection moved inside async block\n const isMultilineString = (uischema: unknown, schema: unknown) => {\n const controlUischema = uischema as { options?: { multi?: boolean } };\n return and(isStringControl, () => controlUischema?.options?.multi === true)(\n uischema as Parameters<typeof isStringControl>[0],\n schema as Parameters<typeof isStringControl>[1],\n {} as Parameters<typeof isStringControl>[2],\n );\n };\n\n primevueRenderers.push(\n // Multiline text has higher priority than regular text\n { tester: rankWith(PRIME + 4, isMultilineString), renderer: JfTextArea },\n { tester: rankWith(PRIME + 3, isStringControl), renderer: JfText },\n {\n tester: rankWith(PRIME + 4, or(isNumberControl, isIntegerControl)),\n renderer: JfNumber,\n },\n {\n tester: rankWith(PRIME + 5, and(isControl, schemaMatches(isScalarEnum))),\n renderer: JfEnum,\n },\n {\n tester: rankWith(PRIME + 6, and(isControl, schemaMatches(isEnumArray))),\n renderer: JfEnumArray,\n },\n { tester: rankWith(PRIME + 3, isBooleanControl), renderer: JfBoolean },\n );\n});\n\nexport { JfText, JfTextArea, JfNumber, JfEnum, JfEnumArray, JfBoolean };\n"],"names":["JfTextArea","JfText","JfNumber","JfEnum","JfEnumArray","JfBoolean"],"mappings":";;;;;;AAQA,MAAM,qBAAqB,MAAM;AAC/B,MAAI,OAAO,WAAW,eAAe,OAAO,aAAa,aAAa;AACpE,QAAI,CAAC,SAAS,eAAe,2BAA2B,GAAG;AACzD,YAAM,QAAQ,SAAS,cAAc,OAAO;AAC5C,YAAM,KAAK;AACX,YAAM,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAcpB,eAAS,KAAK,YAAY,KAAK;AAAA,IACjC;AAAA,EACF;AACF;AAGA,mBAAA;AAMA,MAAM,eAAe,CAAC,MAAe;AACnC,QAAM,SAAS;AACf,SACE,UACA,OAAO,SAAS,YACf,MAAM,QAAQ,OAAO,IAAI,KAAK,MAAM,QAAQ,OAAO,KAAK;AAE7D;AAEA,MAAM,cAAc,CAAC,MAAe;AAClC,QAAM,SAAS;AAIf,SACE,QAAQ,SAAS,YAChB,MAAM,QAAQ,OAAO,OAAO,IAAI,KAAK,MAAM,QAAQ,OAAO,OAAO,KAAK;AAE3E;AAGA,MAAM,QAAQ;AAGP,MAAM,oBAAsD,CAAA;AAGnE,QAAQ,QAAA,EAAU,KAAK,YAAY;AACjC,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,IACE,MAAM,OAAO,iBAAiB;AAGlC,QAAM,oBAAoB,CAAC,UAAmB,WAAoB;AAChE,UAAM,kBAAkB;AACxB,WAAO,IAAI,iBAAiB,MAAM,iBAAiB,SAAS,UAAU,IAAI;AAAA,MACxE;AAAA,MACA;AAAA,MACA,CAAA;AAAA,IAAC;AAAA,EAEL;AAEA,oBAAkB;AAAA;AAAA,IAEhB,EAAE,QAAQ,SAAS,QAAQ,GAAG,iBAAiB,GAAG,UAAUA,UAAA;AAAA,IAC5D,EAAE,QAAQ,SAAS,QAAQ,GAAG,eAAe,GAAG,UAAUC,YAAA;AAAA,IAC1D;AAAA,MACE,QAAQ,SAAS,QAAQ,GAAG,GAAG,iBAAiB,gBAAgB,CAAC;AAAA,MACjE,UAAUC;AAAAA,IAAA;AAAA,IAEZ;AAAA,MACE,QAAQ,SAAS,QAAQ,GAAG,IAAI,WAAW,cAAc,YAAY,CAAC,CAAC;AAAA,MACvE,UAAUC;AAAAA,IAAA;AAAA,IAEZ;AAAA,MACE,QAAQ,SAAS,QAAQ,GAAG,IAAI,WAAW,cAAc,WAAW,CAAC,CAAC;AAAA,MACtE,UAAUC;AAAAA,IAAA;AAAA,IAEZ,EAAE,QAAQ,SAAS,QAAQ,GAAG,gBAAgB,GAAG,UAAUC,YAAA;AAAA,EAAU;AAEzE,CAAC;"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/vue/primevue/index.ts"],"sourcesContent":["import JfText from \"./JfText.vue\";\nimport JfTextArea from \"./JfTextArea.vue\";\nimport JfNumber from \"./JfNumber.vue\";\nimport JfEnum from \"./JfEnum.vue\";\nimport JfEnumArray from \"./JfEnumArray.vue\";\nimport JfBoolean from \"./JfBoolean.vue\";\n\n// Auto-inject layout styles\nconst injectLayoutStyles = () => {\n if (typeof window !== \"undefined\" && typeof document !== \"undefined\") {\n if (!document.getElementById(\"jsonforms-primevue-styles\")) {\n const style = document.createElement(\"style\");\n style.id = \"jsonforms-primevue-styles\";\n style.textContent = `\n/* JSONForms PrimeVue Provider Protocols Layout Styles */\n.vertical-layout {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n gap: 1rem;\n width: 100%;\n}\n\n.vertical-layout-item {\n width: 100%;\n}\n `;\n document.head.appendChild(style);\n }\n }\n};\n\n// Inject styles when this module is imported\ninjectLayoutStyles();\n\n// Import types only to avoid circular dependencies\nimport type { JsonFormsRendererRegistryEntry } from \"@jsonforms/core\";\n\n// Give PrimeVue renderers a high base rank; vanilla commonly uses small ranks (2–5)\nconst PRIME = 100;\n\n// Function to create renderers - called lazily when needed\nexport function createPrimevueRenderers(): JsonFormsRendererRegistryEntry[] {\n // This will only work if @jsonforms/core is already loaded by the consuming application\n // which should be the case since they need it to use JSONForms\n try {\n // Use require.resolve to check if module is available, then use regular import\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const jsonformsCore = require(\"@jsonforms/core\");\n const {\n rankWith,\n isStringControl,\n or,\n isNumberControl,\n isIntegerControl,\n and,\n isControl,\n schemaMatches,\n isBooleanControl,\n } = jsonformsCore;\n\n // helpers for enum detection\n const isScalarEnum = (s?: object) => {\n const schema = s as {\n type?: string;\n enum?: unknown[];\n oneOf?: unknown[];\n };\n return (\n schema &&\n schema.type !== \"array\" &&\n (Array.isArray(schema.enum) || Array.isArray(schema.oneOf))\n );\n };\n\n const isEnumArray = (s?: object) => {\n const schema = s as {\n type?: string;\n items?: { enum?: unknown[]; oneOf?: unknown[] };\n };\n return (\n schema?.type === \"array\" &&\n (Array.isArray(schema.items?.enum) ||\n Array.isArray(schema.items?.oneOf))\n );\n };\n\n // helper for multiline detection\n const isMultilineString = (uischema: unknown, schema: unknown) => {\n const controlUischema = uischema as { options?: { multi?: boolean } };\n return and(\n isStringControl,\n () => controlUischema?.options?.multi === true,\n )(\n uischema as Parameters<typeof isStringControl>[0],\n schema as Parameters<typeof isStringControl>[1],\n {} as Parameters<typeof isStringControl>[2],\n );\n };\n\n return [\n // Multiline text has higher priority than regular text\n { tester: rankWith(PRIME + 4, isMultilineString), renderer: JfTextArea },\n { tester: rankWith(PRIME + 3, isStringControl), renderer: JfText },\n {\n tester: rankWith(PRIME + 4, or(isNumberControl, isIntegerControl)),\n renderer: JfNumber,\n },\n {\n tester: rankWith(\n PRIME + 5,\n and(isControl, schemaMatches(isScalarEnum)),\n ),\n renderer: JfEnum,\n },\n {\n tester: rankWith(PRIME + 6, and(isControl, schemaMatches(isEnumArray))),\n renderer: JfEnumArray,\n },\n { tester: rankWith(PRIME + 3, isBooleanControl), renderer: JfBoolean },\n ];\n } catch {\n console.warn(\n \"@jsonforms/core not available, returning empty renderers array\",\n );\n return [];\n }\n}\n\n// For backward compatibility - export a lazy-initialized array\nlet _cachedRenderers: JsonFormsRendererRegistryEntry[] | null = null;\n\nexport const primevueRenderers: JsonFormsRendererRegistryEntry[] = new Proxy(\n [],\n {\n get(target, prop) {\n if (_cachedRenderers === null) {\n _cachedRenderers = createPrimevueRenderers();\n }\n return Reflect.get(_cachedRenderers, prop);\n },\n has(target, prop) {\n if (_cachedRenderers === null) {\n _cachedRenderers = createPrimevueRenderers();\n }\n return Reflect.has(_cachedRenderers, prop);\n },\n ownKeys() {\n if (_cachedRenderers === null) {\n _cachedRenderers = createPrimevueRenderers();\n }\n return Reflect.ownKeys(_cachedRenderers);\n },\n getOwnPropertyDescriptor(_, prop) {\n if (_cachedRenderers === null) {\n _cachedRenderers = createPrimevueRenderers();\n }\n return Reflect.getOwnPropertyDescriptor(_cachedRenderers, prop);\n },\n },\n);\n\nexport { JfText, JfTextArea, JfNumber, JfEnum, JfEnumArray, JfBoolean };\n"],"names":["JfTextArea","JfText","JfNumber","JfEnum","JfEnumArray","JfBoolean"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@narrative.io/jsonforms-provider-protocols",
3
- "version": "1.1.0-beta.10",
3
+ "version": "1.1.0-beta.12",
4
4
  "description": "Dynamic data provider capabilities for JSONForms with Vue 3 integration",
5
5
  "type": "module",
6
6
  "author": "Narrative I/O",
@@ -36,75 +36,128 @@ injectLayoutStyles();
36
36
  // Import types only to avoid circular dependencies
37
37
  import type { JsonFormsRendererRegistryEntry } from "@jsonforms/core";
38
38
 
39
- // helpers for enum detection
40
- const isScalarEnum = (s?: object) => {
41
- const schema = s as { type?: string; enum?: unknown[]; oneOf?: unknown[] };
42
- return (
43
- schema &&
44
- schema.type !== "array" &&
45
- (Array.isArray(schema.enum) || Array.isArray(schema.oneOf))
46
- );
47
- };
48
-
49
- const isEnumArray = (s?: object) => {
50
- const schema = s as {
51
- type?: string;
52
- items?: { enum?: unknown[]; oneOf?: unknown[] };
53
- };
54
- return (
55
- schema?.type === "array" &&
56
- (Array.isArray(schema.items?.enum) || Array.isArray(schema.items?.oneOf))
57
- );
58
- };
59
-
60
39
  // Give PrimeVue renderers a high base rank; vanilla commonly uses small ranks (2–5)
61
40
  const PRIME = 100;
62
41
 
63
- // Create empty array first, populate it after module initialization to avoid circular deps
64
- export const primevueRenderers: JsonFormsRendererRegistryEntry[] = [];
42
+ // Function to create renderers - called lazily when needed
43
+ export function createPrimevueRenderers(): JsonFormsRendererRegistryEntry[] {
44
+ // This will only work if @jsonforms/core is already loaded by the consuming application
45
+ // which should be the case since they need it to use JSONForms
46
+ try {
47
+ // Use require.resolve to check if module is available, then use regular import
48
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
49
+ const jsonformsCore = require("@jsonforms/core");
50
+ const {
51
+ rankWith,
52
+ isStringControl,
53
+ or,
54
+ isNumberControl,
55
+ isIntegerControl,
56
+ and,
57
+ isControl,
58
+ schemaMatches,
59
+ isBooleanControl,
60
+ } = jsonformsCore;
61
+
62
+ // helpers for enum detection
63
+ const isScalarEnum = (s?: object) => {
64
+ const schema = s as {
65
+ type?: string;
66
+ enum?: unknown[];
67
+ oneOf?: unknown[];
68
+ };
69
+ return (
70
+ schema &&
71
+ schema.type !== "array" &&
72
+ (Array.isArray(schema.enum) || Array.isArray(schema.oneOf))
73
+ );
74
+ };
65
75
 
66
- // Populate the renderers array after a microtask delay to avoid circular dependency
67
- Promise.resolve().then(async () => {
68
- const {
69
- rankWith,
70
- isStringControl,
71
- or,
72
- isNumberControl,
73
- isIntegerControl,
74
- and,
75
- isControl,
76
- schemaMatches,
77
- isBooleanControl,
78
- } = await import("@jsonforms/core");
76
+ const isEnumArray = (s?: object) => {
77
+ const schema = s as {
78
+ type?: string;
79
+ items?: { enum?: unknown[]; oneOf?: unknown[] };
80
+ };
81
+ return (
82
+ schema?.type === "array" &&
83
+ (Array.isArray(schema.items?.enum) ||
84
+ Array.isArray(schema.items?.oneOf))
85
+ );
86
+ };
79
87
 
80
- // helper for multiline detection moved inside async block
81
- const isMultilineString = (uischema: unknown, schema: unknown) => {
82
- const controlUischema = uischema as { options?: { multi?: boolean } };
83
- return and(isStringControl, () => controlUischema?.options?.multi === true)(
84
- uischema as Parameters<typeof isStringControl>[0],
85
- schema as Parameters<typeof isStringControl>[1],
86
- {} as Parameters<typeof isStringControl>[2],
88
+ // helper for multiline detection
89
+ const isMultilineString = (uischema: unknown, schema: unknown) => {
90
+ const controlUischema = uischema as { options?: { multi?: boolean } };
91
+ return and(
92
+ isStringControl,
93
+ () => controlUischema?.options?.multi === true,
94
+ )(
95
+ uischema as Parameters<typeof isStringControl>[0],
96
+ schema as Parameters<typeof isStringControl>[1],
97
+ {} as Parameters<typeof isStringControl>[2],
98
+ );
99
+ };
100
+
101
+ return [
102
+ // Multiline text has higher priority than regular text
103
+ { tester: rankWith(PRIME + 4, isMultilineString), renderer: JfTextArea },
104
+ { tester: rankWith(PRIME + 3, isStringControl), renderer: JfText },
105
+ {
106
+ tester: rankWith(PRIME + 4, or(isNumberControl, isIntegerControl)),
107
+ renderer: JfNumber,
108
+ },
109
+ {
110
+ tester: rankWith(
111
+ PRIME + 5,
112
+ and(isControl, schemaMatches(isScalarEnum)),
113
+ ),
114
+ renderer: JfEnum,
115
+ },
116
+ {
117
+ tester: rankWith(PRIME + 6, and(isControl, schemaMatches(isEnumArray))),
118
+ renderer: JfEnumArray,
119
+ },
120
+ { tester: rankWith(PRIME + 3, isBooleanControl), renderer: JfBoolean },
121
+ ];
122
+ } catch {
123
+ console.warn(
124
+ "@jsonforms/core not available, returning empty renderers array",
87
125
  );
88
- };
126
+ return [];
127
+ }
128
+ }
89
129
 
90
- primevueRenderers.push(
91
- // Multiline text has higher priority than regular text
92
- { tester: rankWith(PRIME + 4, isMultilineString), renderer: JfTextArea },
93
- { tester: rankWith(PRIME + 3, isStringControl), renderer: JfText },
94
- {
95
- tester: rankWith(PRIME + 4, or(isNumberControl, isIntegerControl)),
96
- renderer: JfNumber,
130
+ // For backward compatibility - export a lazy-initialized array
131
+ let _cachedRenderers: JsonFormsRendererRegistryEntry[] | null = null;
132
+
133
+ export const primevueRenderers: JsonFormsRendererRegistryEntry[] = new Proxy(
134
+ [],
135
+ {
136
+ get(target, prop) {
137
+ if (_cachedRenderers === null) {
138
+ _cachedRenderers = createPrimevueRenderers();
139
+ }
140
+ return Reflect.get(_cachedRenderers, prop);
141
+ },
142
+ has(target, prop) {
143
+ if (_cachedRenderers === null) {
144
+ _cachedRenderers = createPrimevueRenderers();
145
+ }
146
+ return Reflect.has(_cachedRenderers, prop);
97
147
  },
98
- {
99
- tester: rankWith(PRIME + 5, and(isControl, schemaMatches(isScalarEnum))),
100
- renderer: JfEnum,
148
+ ownKeys() {
149
+ if (_cachedRenderers === null) {
150
+ _cachedRenderers = createPrimevueRenderers();
151
+ }
152
+ return Reflect.ownKeys(_cachedRenderers);
101
153
  },
102
- {
103
- tester: rankWith(PRIME + 6, and(isControl, schemaMatches(isEnumArray))),
104
- renderer: JfEnumArray,
154
+ getOwnPropertyDescriptor(_, prop) {
155
+ if (_cachedRenderers === null) {
156
+ _cachedRenderers = createPrimevueRenderers();
157
+ }
158
+ return Reflect.getOwnPropertyDescriptor(_cachedRenderers, prop);
105
159
  },
106
- { tester: rankWith(PRIME + 3, isBooleanControl), renderer: JfBoolean },
107
- );
108
- });
160
+ },
161
+ );
109
162
 
110
163
  export { JfText, JfTextArea, JfNumber, JfEnum, JfEnumArray, JfBoolean };