@earthranger/react-native-jsonforms-formatter 0.1.0 → 0.2.0
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.
- package/README.md +85 -16
- package/dist/bundle.js +1 -0
- package/dist/generateUISchema.d.ts +5 -0
- package/dist/generateUISchema.d.ts.map +1 -0
- package/{src/index.ts → dist/index.d.ts} +1 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/utils/utils.d.ts +41 -0
- package/dist/utils/utils.d.ts.map +1 -0
- package/dist/validateJsonSchema.d.ts +2 -0
- package/dist/validateJsonSchema.d.ts.map +1 -0
- package/package.json +14 -6
- package/ jest.config.js +0 -4
- package/.eslintrc.cjs +0 -18
- package/.githooks/pre-commit +0 -3
- package/.github/CODEOWNERS +0 -2
- package/.github/workflows/npm-build.yml +0 -40
- package/babel.config.cjs +0 -6
- package/extJestSetup.js +0 -3
- package/src/__test__/JsonFormatter.test.tsx +0 -168
- package/src/common/mockData/formatterMockData.ts +0 -770
- package/src/common/mockData/jsonSchemaExpectedMock.json +0 -318
- package/src/common/mockData/jsonSchemaFielSetMock.json +0 -972
- package/src/common/mockData/jsonSchemaMock.json +0 -250
- package/src/common/mockData/uiSchemaExpectedMock.json +0 -103
- package/src/common/mockData/uiSchemaFielSetExpectedMock.json +0 -297
- package/src/generateUISchema.ts +0 -164
- package/src/utils/utils.ts +0 -83
- package/src/validateJsonSchema.ts +0 -275
- package/tsconfig.json +0 -32
package/README.md
CHANGED
|
@@ -3,11 +3,11 @@
|
|
|
3
3
|
|
|
4
4
|
[ci-url]: https://github.com/PADAS/react-native-jsonforms-formatter/actions/workflows/npm-build.yml/badge.svg
|
|
5
5
|
|
|
6
|
-
A
|
|
6
|
+
A Node.js library for validating JSONSchema and generating UISchema for a custom ReactNative JSONForms element.
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
## Installation
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
You can install the library using npm or yarn:
|
|
11
11
|
|
|
12
12
|
#### Using `yarn`
|
|
13
13
|
|
|
@@ -22,27 +22,96 @@ npm install --save react-native-jsonforms-formatter
|
|
|
22
22
|
```
|
|
23
23
|
|
|
24
24
|
## Usage
|
|
25
|
+
The library provides two main functions: `validateJSONSchema` and `generateUISchema`.
|
|
25
26
|
|
|
26
|
-
|
|
27
|
-
|
|
27
|
+
### Validating JSONSchema
|
|
28
|
+
|
|
29
|
+
You can use the `validateJSONSchema` function to validate a JSONSchema string:
|
|
30
|
+
|
|
31
|
+
```typescript
|
|
32
|
+
import { validateJSONSchema } from 'react-native-jsonforms-formatter';
|
|
33
|
+
|
|
34
|
+
const stringSchema = `
|
|
35
|
+
{
|
|
36
|
+
"type": "object",
|
|
37
|
+
"properties": {
|
|
38
|
+
"name": {
|
|
39
|
+
"type": "string",
|
|
40
|
+
"title": "Name"
|
|
41
|
+
},
|
|
42
|
+
"age": {
|
|
43
|
+
"type": "integer",
|
|
44
|
+
"title": "Age"
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
`;
|
|
49
|
+
|
|
50
|
+
const jsonSchema = validateJSONSchema(stringSchema);
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
The `validateJSONSchema` function returns a valid JSONSchema object if the input string is a valid JSONSchema. If the input is not valid, it will throw an error.
|
|
54
|
+
|
|
55
|
+
### Generating UISchema
|
|
56
|
+
You can use the `generateUISchema` function to generate a UISchema object from a valid JSONSchema:
|
|
57
|
+
|
|
58
|
+
```typescript
|
|
59
|
+
import { generateUISchema } from 'react-native-jsonforms-formatter';
|
|
60
|
+
|
|
61
|
+
const uiSchema = generateUISchema(jsonSchema);
|
|
28
62
|
```
|
|
29
63
|
|
|
30
|
-
|
|
64
|
+
The `generateUISchema` function returns a `UISchema` object that can be used with the ReactNative JSONForms library.
|
|
65
|
+
|
|
66
|
+
## Putting it all together
|
|
67
|
+
Here's an example of how you can use the library in a ReactNative application:
|
|
68
|
+
|
|
69
|
+
```typescript
|
|
70
|
+
import React from 'react';
|
|
71
|
+
import { JsonForms } from '@jsonforms/react-native';
|
|
72
|
+
import { validateJSONSchema, generateUISchema } from 'react-native-jsonforms-formatter';
|
|
73
|
+
import { RNRenderers, RNCells } from '@jsonforms/react-native-renderers';
|
|
74
|
+
|
|
75
|
+
const stringSchema = `
|
|
76
|
+
{
|
|
77
|
+
"type": "object",
|
|
78
|
+
"properties": {
|
|
79
|
+
"name": {
|
|
80
|
+
"type": "string",
|
|
81
|
+
"title": "Name"
|
|
82
|
+
},
|
|
83
|
+
"age": {
|
|
84
|
+
"type": "integer",
|
|
85
|
+
"title": "Age"
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
`;
|
|
31
90
|
|
|
32
|
-
```javascript
|
|
33
91
|
const jsonSchema = validateJSONSchema(stringSchema);
|
|
34
|
-
const uiSchema =
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
92
|
+
const uiSchema = generateUISchema(jsonSchema);
|
|
93
|
+
|
|
94
|
+
const App = () => {
|
|
95
|
+
const [data, setData] = React.useState({ name: 'John Doe', age: 30 });
|
|
96
|
+
|
|
97
|
+
return (
|
|
98
|
+
<JsonForms
|
|
99
|
+
schema={jsonSchema}
|
|
100
|
+
uischema={uiSchema}
|
|
101
|
+
data={data}
|
|
102
|
+
renderers={RNRenderers}
|
|
103
|
+
cells={RNCells}
|
|
104
|
+
onChange={(event) => setData(event.data)}
|
|
105
|
+
/>
|
|
106
|
+
);
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
export default App;
|
|
43
110
|
```
|
|
44
111
|
|
|
45
112
|
## Contributors
|
|
113
|
+
Contributions are welcome! If you find a bug or have a feature request, please open an issue.
|
|
114
|
+
|
|
46
115
|
<a href="https://github.com/PADAS/react-native-jsonforms-formatter/graphs/contributors">
|
|
47
116
|
<img src="https://contributors-img.web.app/image?repo=PADAS/react-native-jsonforms-formatter" />
|
|
48
117
|
</a>
|
package/dist/bundle.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(()=>{"use strict";var e={d:(t,r)=>{for(var n in r)e.o(r,n)&&!e.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:r[n]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{void 0!==l&&l.toStringTag&&Object.defineProperty(e,l.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};e.r(t),e.d(t,{generateUISchema:()=>Ue,validateJSONSchema:()=>rt});var r=Object.prototype;const n=function(e){var t=e&&e.constructor;return e===("function"==typeof t&&t.prototype||r)},i=(o=Object.keys,a=Object,function(e){return o(a(e))});var o,a,c=Object.prototype.hasOwnProperty;const s="object"==typeof global&&global&&global.Object===Object&&global;var u="object"==typeof self&&self&&self.Object===Object&&self;const p=s||u||Function("return this")();var l=p.Symbol;const f=l;var d=Object.prototype,m=d.hasOwnProperty,h=d.toString,v=f?f.toStringTag:void 0;var y=Object.prototype.toString;var b=f?f.toStringTag:void 0;const j=function(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":b&&b in Object(e)?function(e){var t=m.call(e,v),r=e[v];try{e[v]=void 0;var n=!0}catch(e){}var i=h.call(e);return n&&(t?e[v]=r:delete e[v]),i}(e):function(e){return y.call(e)}(e)},g=function(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)},O=function(e){if(!g(e))return!1;var t=j(e);return"[object Function]"==t||"[object GeneratorFunction]"==t||"[object AsyncFunction]"==t||"[object Proxy]"==t},k=p["__core-js_shared__"];var w,S=(w=/[^.]+$/.exec(k&&k.keys&&k.keys.IE_PROTO||""))?"Symbol(src)_1."+w:"";var x=Function.prototype.toString;const _=function(e){if(null!=e){try{return x.call(e)}catch(e){}try{return e+""}catch(e){}}return""};var M=/^\[object .+?Constructor\]$/,A=Function.prototype,N=Object.prototype,P=A.toString,F=N.hasOwnProperty,D=RegExp("^"+P.call(F).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");const E=function(e){return!(!g(e)||function(e){return!!S&&S in e}(e))&&(O(e)?D:M).test(_(e))},T=function(e,t){var r=function(e,t){return null==e?void 0:e[t]}(e,t);return E(r)?r:void 0},C=T(p,"DataView"),q=T(p,"Map"),H=T(p,"Promise"),I=T(p,"Set"),R=T(p,"WeakMap");var $="[object Map]",U="[object Promise]",B="[object Set]",L="[object WeakMap]",J="[object DataView]",V=_(C),W=_(q),z=_(H),G=_(I),K=_(R),Q=j;(C&&Q(new C(new ArrayBuffer(1)))!=J||q&&Q(new q)!=$||H&&Q(H.resolve())!=U||I&&Q(new I)!=B||R&&Q(new R)!=L)&&(Q=function(e){var t=j(e),r="[object Object]"==t?e.constructor:void 0,n=r?_(r):"";if(n)switch(n){case V:return J;case W:return $;case z:return U;case G:return B;case K:return L}return t});const X=Q,Y=function(e){return null!=e&&"object"==typeof e},Z=function(e){return Y(e)&&"[object Arguments]"==j(e)};var ee=Object.prototype,te=ee.hasOwnProperty,re=ee.propertyIsEnumerable;const ne=Z(function(){return arguments}())?Z:function(e){return Y(e)&&te.call(e,"callee")&&!re.call(e,"callee")},ie=Array.isArray,oe=function(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=9007199254740991};var ae="object"==typeof exports&&exports&&!exports.nodeType&&exports,ce=ae&&"object"==typeof module&&module&&!module.nodeType&&module,se=ce&&ce.exports===ae?p.Buffer:void 0;const ue=(se?se.isBuffer:void 0)||function(){return!1};var pe={};pe["[object Float32Array]"]=pe["[object Float64Array]"]=pe["[object Int8Array]"]=pe["[object Int16Array]"]=pe["[object Int32Array]"]=pe["[object Uint8Array]"]=pe["[object Uint8ClampedArray]"]=pe["[object Uint16Array]"]=pe["[object Uint32Array]"]=!0,pe["[object Arguments]"]=pe["[object Array]"]=pe["[object ArrayBuffer]"]=pe["[object Boolean]"]=pe["[object DataView]"]=pe["[object Date]"]=pe["[object Error]"]=pe["[object Function]"]=pe["[object Map]"]=pe["[object Number]"]=pe["[object Object]"]=pe["[object RegExp]"]=pe["[object Set]"]=pe["[object String]"]=pe["[object WeakMap]"]=!1;var le="object"==typeof exports&&exports&&!exports.nodeType&&exports,fe=le&&"object"==typeof module&&module&&!module.nodeType&&module,de=fe&&fe.exports===le&&s.process,me=function(){try{return fe&&fe.require&&fe.require("util").types||de&&de.binding&&de.binding("util")}catch(e){}}(),he=me&&me.isTypedArray;const ve=he?function(e){return function(t){return e(t)}}(he):function(e){return Y(e)&&oe(e.length)&&!!pe[j(e)]};var ye=Object.prototype.hasOwnProperty;const be=function(e){if(null==e)return!0;if(function(e){return null!=e&&oe(e.length)&&!O(e)}(e)&&(ie(e)||"string"==typeof e||"function"==typeof e.splice||ue(e)||ve(e)||ne(e)))return!e.length;var t=X(e);if("[object Map]"==t||"[object Set]"==t)return!e.size;if(n(e))return!function(e){if(!n(e))return i(e);var t=[];for(var r in Object(e))c.call(e,r)&&"constructor"!=r&&t.push(r);return t}(e).length;for(var r in e)if(ye.call(e,r))return!1;return!0};var je,ge,Oe;!function(e){e.DateTime="date-time",e.Date="date"}(je||(je={})),function(e){e.DateTime="date-time",e.MultiSelect="multiselect",e.RepeatableField="repeatable-field",e.FormLabel="form-label"}(ge||(ge={})),function(e){e.Header="header"}(Oe||(Oe={}));var ke,we="fieldset",Se="checkboxes",xe="string",_e=function(e){return e instanceof Object},Me=function(e){return typeof e===xe},Ae=function(e){return 0!==e.length&&void 0!==e.find((function(e){return _e(e)&&e&&(e.type||"")===we}))},Ne=function(e){return _e(e)&&e.type===we&&!be(e.title)},Pe=function(e){return _e(e)&&e.type===we&&e.items.length>0},Fe=function(e){return!be(e.key)},De=function(e){var t=e.toLowerCase().replace(/[\s\\/\\%]/gi,"_");return"fieldset__title_".concat(t)},Ee=function(e){var t,r;return"array"===e.type&&!(null===(t=e.items)||void 0===t?void 0:t.enum)&&!(null===(r=e.items)||void 0===r?void 0:r.enumNames)},Te=function(e){return"true"===e.required||e.required>0},Ce=function(e){return e.includes(Se)},qe=function(e){return e.includes("inactive_enum")},He=function(e){return e.includes("inactive_titleMap")},Ie=function(e){var t,r;return e.type===xe&&(null===(t=e.enum)||void 0===t?void 0:t.length)>0&&(null===(r=e.inactive_enum)||void 0===r?void 0:r.length)>0},Re=function(){return Re=Object.assign||function(e){for(var t,r=1,n=arguments.length;r<n;r++)for(var i in t=arguments[r])Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e},Re.apply(this,arguments)};!function(e){e.Number="number",e.String="string",e.Array="array"}(ke||(ke={}));var $e=function(e,t,r){return void 0===r&&(r={}),Re({type:"Control",scope:"#/properties/".concat(e),label:t},r&&{options:r})},Ue=function(e){var t=[];return Ae(e.definition)?t.push.apply(t,Be(e)):Object.keys(e.schema.properties).forEach((function(r){var n=Je(r,e);n&&t.push(n)})),{type:"Category",elements:t}},Be=function(e){var t=[];return e.definition.forEach((function(r){if("string"==typeof r)t.push($e(r,e.schema.properties[r].title||""));else if(r instanceof Object)switch(!0){case function(e){return _e(e)&&e.type===we&&0===e.items.length&&!be(e.title)}(r):t.push($e(De(r.title),r.title,Le(ge.FormLabel)));break;case Pe(r):r.title&&t.push($e(De(r.title),r.title,Le(ge.FormLabel))),r.items.forEach((function(r){if(r instanceof Object){var n=Je(r.key||"",e,r);n&&t.push(n)}else if("string"==typeof r){var i=Je(r,e);i&&t.push(i)}}));break;case Fe(r):var n=Je(r.key,e);n&&t.push(n)}})),t},Le=function(e,t){if(void 0===e&&(e=""),void 0===t&&(t=""),be(e))return{};var r={format:e};return be(t)||(r.display=t),r},Je=function(e,t,r){void 0===r&&(r=void 0);var n={};switch(t.schema.properties[e].type){case ke.Number:return $e(e,t.schema.properties[e].title||"");case ke.String:var i=function(e,t,r){void 0===r&&(r=void 0);try{var n=r||t.definition.find((function(t){return t.key===e}));if("date-time-picker json-schema"===n.fieldHtmlClass||n&&"datetime"===(n.type||""))return"date"===t.schema.properties[e].format?je.Date:je.DateTime;if("date-picker json-schema"===n.fieldHtmlClass||"date"===t.schema.properties[e].format)return je.Date}catch(e){return}}(e,t,r);return be(i)?t.schema.properties[e].display&&t.schema.properties[e].display===Oe.Header&&(n=Le(ge.FormLabel)):n=Le(ge.DateTime,i),$e(e,t.schema.properties[e].title||"",n);case ke.Array:return t.schema.properties[e].items.enum&&t.schema.properties[e].items.enumNames?n=Le(ge.MultiSelect):t.schema.properties[e].items&&(n=Le(ge.RepeatableField)),$e(e,t.schema.properties[e].title||"",n)}},Ve=function(){return Ve=Object.assign||function(e){for(var t,r=1,n=arguments.length;r<n;r++)for(var i in t=arguments[r])Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e},Ve.apply(this,arguments)},We=/[^\w\n\s_"](?=[^:\n\s{}[]]*:[\t\n\s]*(\{|\[)+)/g,ze=/"minimum"(?:[^\\"]|\\\\|\\")*"\d+\.*\d*"/g,Ge=/"maximum"(?:[^\\"]|\\\\|\\")*"\d+\.*\d*"/g,Ke=/"(?=[^"]*(?:"[^"]*)?$)/g,Qe=function(e){return{type:"string",readOnly:!0,isHidden:!1,display:Oe.Header,title:e}},Xe=function(e){return(null==e?void 0:e.isHidden)||!1},Ye=function(e){for(var t=[],r=0,n=Object.keys(e.properties);r<n.length;r++){var i=n[r],o=e.properties[i];Te(o)&&(t.push(i),delete e.properties[i].required),Ee(o)&&Ye(o.items)}return t.length>0&&(e.required=t),e},Ze=function(e){return e.enum.filter((function(t){return!e.inactive_enum.includes(t)}))},et=function(e){return e.titleMap.filter((function(t){return!e.inactive_titleMap.includes(t.value)}))},tt=function(e,t,r,n){var i,o,a,c,s=e.hasCheckboxes,u=e.hasDisabledChoices;if(Me(t)&&r.schema.properties[t])r.schema.properties[t].isHidden=Xe(r.schema.properties[t]);else{if((_e(t)||Fe(t))&&t.key&&r.schema.properties[t.key]&&(r.schema.properties[t.key].isHidden=Xe(r.schema.properties[t.key])),u&&function(e){var t,r;return _e(e)&&e.type===Se&&(null===(t=e.inactive_titleMap)||void 0===t?void 0:t.length)>0&&(null===(r=e.titleMap)||void 0===r?void 0:r.length)>0}(t))if(n){var p=r.definition.indexOf(n),l=r.definition[p].items.indexOf(t);r.definition[p].items[l].titleMap=et(t)}else r.definition[r.definition.indexOf(t)].titleMap=et(t);s&&function(e){return _e(e)&&e.type===Se}(t)&&(r.schema.properties[t.key]=(i=t,o=r.schema.properties[t.key].title||"",a=r.schema.properties[t.key].required||!1,c=r.schema.properties[t.key].default||!1,Ve(Ve(Ve({type:"array",uniqueItems:!0,isHidden:!1},a&&{required:a}),{title:o||i.title,items:{enum:i.titleMap.map((function(e){return e.value})),enumNames:i.titleMap.map((function(e){return e.name}))}}),c&&{default:c})))}},rt=function(e){e=function(e){if(null!==e.match(We))throw Error("Special characters not supported in JSON Schema");return(e=(e=(e=(e=(e=e.replace(/([“”])/g,'"')).replace(new RegExp('\\"enum\\"\\n*\\s*\\:\\n*\\s*\\[\\n*\\s*\\]',"g"),'"enum": ["0"]')).replace(new RegExp('\\"enumNames\\"\\n*\\s*\\:\\n*\\s*\\{\\n*\\s*\\}',"g"),'"enumNames": {"0":"No Options"}')).replace(new RegExp('\\"titleMap\\"\\n*\\s*\\:\\n*\\s*\\[\\n*\\s*\\]',"g"),'"titleMap": [{"value":"no_option", "name":"No Option"}]')).replace(ze,(function(e){return e.replace(Ke,"")}))).replace(Ge,(function(e){return e.replace(Ke,"")}))}(e);var t=JSON.parse(e);delete t.schema.$schema,delete t.schema.id,function(e){if(e.schema.definition){var t=e.schema.definition;delete e.schema.definition,e.definition=t}}(t);var r=function(e){return{hasCheckboxes:Ce(e),hasInactiveChoices:qe(e),hasDisabledChoices:He(e)}}(e);return function(e,t){var r,n,i=e.hasInactiveChoices,o=e.hasEnums;if(i)for(var a=0,c=Object.keys(t.schema.properties);a<c.length;a++){var s=c[a],u=t.schema.properties[s];Ie(u)&&(t.schema.properties[s].enum=Ze(u),0===t.schema.properties[s].enum.length&&(t.schema.properties[s].enum=["0"],t.schema.properties[s].enumNames={0:"No Options"}))}if(o)for(var p=0,l=Object.keys(t.schema.properties);p<l.length;p++)if(s=l[p],(null===(r=t.schema.properties[s].enum)||void 0===r?void 0:r.length)>0&&(n=t.schema.properties[s].enum,new Set(n).size!==n.length))throw new Error("Duplicated items")}(r,t),function(e,t){var r;if(Ae(t.definition))!function(e,t){for(var r=0,n=t.definition;r<n.length;r++){var i=n[r];switch(!0){case Me(i):break;case Ne(i):var o=De(i.title);t.schema.properties[o]=Qe(i.title);break;case Pe(i):for(var a=0,c=i.items;a<c.length;a++){var s=c[a];tt(e,s,t,i)}}}}(e,t);else if((null===(r=t.definition)||void 0===r?void 0:r.length)>0)for(var n=0,i=t.definition;n<i.length;n++){var o=i[n];tt(e,o,t)}}(r,t),e.includes("helpvalue")&&function(e){for(var t={},r=0,n=0,i=e.definition;n<i.length;n++){var o=i[n];if(Me(o))t[o]=e.schema.properties[o],delete e.schema.properties[o];else if(_e(o))if(o.helpvalue){var a="help_value_".concat(r);r+=1,t[a]=Qe((o.helpvalue||"").replace(/(<.+?>)/g,""))}else o.key&&(t[o.key]=e.schema.properties[o.key],delete e.schema.properties[o.key])}e.schema.properties=Object.assign(t,e.schema.properties)}(t),e.includes("required")&&(t.schema=Ye(t.schema)),t};module.exports=t})();
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generateUISchema.d.ts","sourceRoot":"","sources":["../src/generateUISchema.ts"],"names":[],"mappings":"AAkDA,eAAO,MAAM,gBAAgB,WAAY,GAAG;;;CAiB3C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
export declare enum DateTimeFormat {
|
|
2
|
+
DateTime = "date-time",
|
|
3
|
+
Date = "date"
|
|
4
|
+
}
|
|
5
|
+
export declare enum PropertyFormat {
|
|
6
|
+
DateTime = "date-time",
|
|
7
|
+
MultiSelect = "multiselect",
|
|
8
|
+
RepeatableField = "repeatable-field",
|
|
9
|
+
FormLabel = "form-label"
|
|
10
|
+
}
|
|
11
|
+
export declare enum ElementDisplay {
|
|
12
|
+
Header = "header"
|
|
13
|
+
}
|
|
14
|
+
export declare const FIELD_SET = "fieldset";
|
|
15
|
+
export declare const HELP_VALUE = "helpvalue";
|
|
16
|
+
export declare const REQUIRED_PROPERTY = "required";
|
|
17
|
+
export declare const CHECKBOXES = "checkboxes";
|
|
18
|
+
export declare const INACTIVE_ENUM = "inactive_enum";
|
|
19
|
+
export declare const DISABLED_ENUM = "inactive_titleMap";
|
|
20
|
+
export declare const STRING_TYPE = "string";
|
|
21
|
+
export declare const ARRAY_TYPE = "array";
|
|
22
|
+
export declare const isObject: (item: any) => boolean;
|
|
23
|
+
export declare const isString: (item: any) => boolean;
|
|
24
|
+
export declare const isSchemaFieldSet: (definition: any[]) => boolean;
|
|
25
|
+
export declare const isFieldSetTitle: (item: any) => boolean;
|
|
26
|
+
export declare const isFieldSetTitleWithoutItems: (item: any) => boolean;
|
|
27
|
+
export declare const isFieldSet: (item: any) => boolean;
|
|
28
|
+
export declare const isCheckbox: (item: any) => boolean;
|
|
29
|
+
export declare const isPropertyKey: (item: any) => boolean;
|
|
30
|
+
export declare const getFieldSetTitleKey: (title: string) => string;
|
|
31
|
+
export declare const getSchemaValidations: (stringSchema: string) => {
|
|
32
|
+
hasCheckboxes: boolean;
|
|
33
|
+
hasInactiveChoices: boolean;
|
|
34
|
+
hasDisabledChoices: boolean;
|
|
35
|
+
};
|
|
36
|
+
export declare const isArrayProperty: (property: any) => boolean;
|
|
37
|
+
export declare const isRequiredProperty: (property: any) => boolean;
|
|
38
|
+
export declare const isInactiveChoice: (item: any) => boolean;
|
|
39
|
+
export declare const isDisabledChoice: (item: any) => boolean;
|
|
40
|
+
export declare const hasEnumDuplicatedItems: (options: string[]) => boolean;
|
|
41
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils/utils.ts"],"names":[],"mappings":"AAIA,oBAAY,cAAc;IACxB,QAAQ,cAAc;IACtB,IAAI,SAAS;CACd;AAED,oBAAY,cAAc;IACxB,QAAQ,cAAc;IACtB,WAAW,gBAAgB;IAC3B,eAAe,qBAAqB;IACpC,SAAS,eAAe;CACzB;AAED,oBAAY,cAAc;IACxB,MAAM,WAAW;CAClB;AAED,eAAO,MAAM,SAAS,aAAa,CAAC;AACpC,eAAO,MAAM,UAAU,cAAc,CAAC;AAEtC,eAAO,MAAM,iBAAiB,aAAa,CAAC;AAC5C,eAAO,MAAM,UAAU,eAAe,CAAC;AACvC,eAAO,MAAM,aAAa,kBAAkB,CAAC;AAC7C,eAAO,MAAM,aAAa,sBAAsB,CAAC;AACjD,eAAO,MAAM,WAAW,WAAW,CAAC;AACpC,eAAO,MAAM,UAAU,UAAU,CAAC;AAElC,eAAO,MAAM,QAAQ,SAAU,GAAG,YAA2B,CAAC;AAE9D,eAAO,MAAM,QAAQ,SAAU,GAAG,YAAgC,CAAC;AACnE,eAAO,MAAM,gBAAgB,eAAgB,GAAG,EAAE,YAOjD,CAAC;AAEF,eAAO,MAAM,eAAe,SAAU,GAAG,YAChB,CAAC;AAE1B,eAAO,MAAM,2BAA2B,SAAU,GAAG,YACD,CAAC;AAErD,eAAO,MAAM,UAAU,SAAU,GAAG,YAAuE,CAAC;AAE5G,eAAO,MAAM,UAAU,SAAU,GAAG,YAA+C,CAAC;AAEpF,eAAO,MAAM,aAAa,SAAU,GAAG,YAAuB,CAAC;AAE/D,eAAO,MAAM,mBAAmB,UAAW,MAAM,WAGhD,CAAC;AAEF,eAAO,MAAM,oBAAoB,iBAAkB,MAAM;;;;CAIvD,CAAC;AAEH,eAAO,MAAM,eAAe,aAAc,GAAG,YAChB,CAAC;AAE9B,eAAO,MAAM,kBAAkB,aAAc,GAAG,YAA0D,CAAC;AAQ3G,eAAO,MAAM,gBAAgB,SAAU,GAAG,YACiB,CAAC;AAE5D,eAAO,MAAM,gBAAgB,SAAU,GAAG,YACZ,CAAC;AAE/B,eAAO,MAAM,sBAAsB,YAAa,MAAM,EAAE,YAA+C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validateJsonSchema.d.ts","sourceRoot":"","sources":["../src/validateJsonSchema.ts"],"names":[],"mappings":"AAsPA,eAAO,MAAM,kBAAkB,iBAAkB,MAAM,QA4BtD,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@earthranger/react-native-jsonforms-formatter",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Converts JTD into JSON Schema ",
|
|
6
|
-
"main": "
|
|
7
|
-
"types": "
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
8
|
"scripts": {
|
|
9
9
|
"preinstall": "git config core.hooksPath .githooks",
|
|
10
|
-
"build": "
|
|
10
|
+
"build": "npx webpack",
|
|
11
11
|
"clean": "rm -rf dist",
|
|
12
12
|
"lint": "eslint src/ --ext .js,.jsx,.ts,.tsx",
|
|
13
|
-
"test": "jest
|
|
13
|
+
"test": "jest test/.*\\.test\\..* --coverage",
|
|
14
14
|
"typecheck": "tsc -b"
|
|
15
15
|
},
|
|
16
16
|
"repository": {
|
|
@@ -20,6 +20,9 @@
|
|
|
20
20
|
"publishConfig": {
|
|
21
21
|
"access": "public"
|
|
22
22
|
},
|
|
23
|
+
"files": [
|
|
24
|
+
"./dist"
|
|
25
|
+
],
|
|
23
26
|
"keywords": [
|
|
24
27
|
"json",
|
|
25
28
|
"schema",
|
|
@@ -54,6 +57,8 @@
|
|
|
54
57
|
"@babel/preset-typescript": "^7.21.5",
|
|
55
58
|
"@types/jest": "^29.5.1",
|
|
56
59
|
"@types/lodash-es": "^4.17.7",
|
|
60
|
+
"@types/node": "^20.12.5",
|
|
61
|
+
"@types/webpack": "^5.28.5",
|
|
57
62
|
"@typescript-eslint/eslint-plugin": "^6.8.0",
|
|
58
63
|
"@typescript-eslint/parser": "^6.8.0",
|
|
59
64
|
"babel-jest": "^29.5.0",
|
|
@@ -62,7 +67,10 @@
|
|
|
62
67
|
"jest": "^29.5.0",
|
|
63
68
|
"jest-extended": "^3.2.4",
|
|
64
69
|
"ts-jest": "^29.1.0",
|
|
70
|
+
"ts-loader": "^9.5.1",
|
|
65
71
|
"ts-node": "^10.9.1",
|
|
66
|
-
"typescript": "^5.2.2"
|
|
72
|
+
"typescript": "^5.2.2",
|
|
73
|
+
"webpack": "^5.91.0",
|
|
74
|
+
"webpack-cli": "^5.1.4"
|
|
67
75
|
}
|
|
68
76
|
}
|
package/ jest.config.js
DELETED
package/.eslintrc.cjs
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
/* eslint-env node */
|
|
2
|
-
module.exports = {
|
|
3
|
-
extends: ['eslint:recommended', 'plugin:@typescript-eslint/recommended'],
|
|
4
|
-
parser: '@typescript-eslint/parser',
|
|
5
|
-
parserOptions: {
|
|
6
|
-
ecmaVersion: 13,
|
|
7
|
-
project: './tsconfig.json',
|
|
8
|
-
sourceType: 'module',
|
|
9
|
-
},
|
|
10
|
-
plugins: ['@typescript-eslint'],
|
|
11
|
-
rules: {
|
|
12
|
-
'import/prefer-default-export': 'off',
|
|
13
|
-
'react/require-default-props': 'off',
|
|
14
|
-
'@typescript-eslint/no-use-before-define': 'off',
|
|
15
|
-
'no-plusplus': [2, { allowForLoopAfterthoughts: true }]
|
|
16
|
-
},
|
|
17
|
-
root: true,
|
|
18
|
-
};
|
package/.githooks/pre-commit
DELETED
package/.github/CODEOWNERS
DELETED
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
name: Node.js build
|
|
2
|
-
|
|
3
|
-
on:
|
|
4
|
-
push:
|
|
5
|
-
branches: [ develop ]
|
|
6
|
-
pull_request:
|
|
7
|
-
branches: [ develop ]
|
|
8
|
-
|
|
9
|
-
jobs:
|
|
10
|
-
build:
|
|
11
|
-
runs-on: ubuntu-latest
|
|
12
|
-
|
|
13
|
-
strategy:
|
|
14
|
-
matrix:
|
|
15
|
-
node-version: [16.x]
|
|
16
|
-
|
|
17
|
-
steps:
|
|
18
|
-
- uses: actions/checkout@v4
|
|
19
|
-
- name: Use Node.js ${{ matrix.node-version }}
|
|
20
|
-
uses: actions/setup-node@v4
|
|
21
|
-
with:
|
|
22
|
-
node-version: ${{ matrix.node-version }}
|
|
23
|
-
cache: 'npm'
|
|
24
|
-
- run: npm ci
|
|
25
|
-
- run: npm run build --if-present
|
|
26
|
-
- run: npm test
|
|
27
|
-
|
|
28
|
-
# publish-npm:
|
|
29
|
-
# needs: build
|
|
30
|
-
# runs-on: ubuntu-latest
|
|
31
|
-
# steps:
|
|
32
|
-
# - uses: actions/checkout@v3
|
|
33
|
-
# - uses: actions/setup-node@v3
|
|
34
|
-
# with:
|
|
35
|
-
# node-version: 16
|
|
36
|
-
# registry-url: https://registry.npmjs.org/
|
|
37
|
-
# - run: npm ci
|
|
38
|
-
# - run: npm publish
|
|
39
|
-
# env:
|
|
40
|
-
# NODE_AUTH_TOKEN: ${{secrets.npm_token}}
|
package/babel.config.cjs
DELETED
package/extJestSetup.js
DELETED
|
@@ -1,168 +0,0 @@
|
|
|
1
|
-
// Internal Dependencies
|
|
2
|
-
import jsonSchema from "../common/mockData/jsonSchemaMock.json";
|
|
3
|
-
import jsonSchemaFieldSets from "../common/mockData/jsonSchemaFielSetMock.json";
|
|
4
|
-
import expectedSchema from "../common/mockData/jsonSchemaExpectedMock.json";
|
|
5
|
-
import expectedUISchema from "../common/mockData/uiSchemaExpectedMock.json";
|
|
6
|
-
import expectedFieldSetUISchema from "../common/mockData/uiSchemaFielSetExpectedMock.json";
|
|
7
|
-
import { validateJSONSchema } from "../validateJsonSchema";
|
|
8
|
-
import { generateUISchema } from "../generateUISchema";
|
|
9
|
-
import {
|
|
10
|
-
JSON_SCHEMA_ID_$SCHEMA_FAKE_DATA,
|
|
11
|
-
JSON_SCHEMA_EMPTY_CHOICES_FAKE_DATA,
|
|
12
|
-
JSON_SCHEMA_INVALID_DOUBLE_QUOTES_FAKE_DATA,
|
|
13
|
-
JSON_SCHEMA_SPECIAL_CHARS_FAKE_DATA,
|
|
14
|
-
JSON_SCHEMA_INACTIVE_CHOICES_FAKE_DATA,
|
|
15
|
-
JSON_SCHEMA_INVALID_DEFINITION_LOCATION_FAKE_DATA,
|
|
16
|
-
JSON_SCHEMA_FIELD_SETS_FAKE_DATA,
|
|
17
|
-
FIELD_SET_HEADER_FAKE_DATA,
|
|
18
|
-
JSON_SCHEMA_COLLECTION_FIELD_FAKE_DATA,
|
|
19
|
-
COLLECTION_FIELD_HEADER_FAKE_DATA,
|
|
20
|
-
JSON_SCHEMA_INLINE_REQUIRED_PROPERTIES,
|
|
21
|
-
JSON_SCHEMA_INACTIVE_TITLE_MAP_FAKE_DATA,
|
|
22
|
-
JSON_SCHEMA_INACTIVE_FIELD_SET_TITLE_MAP_FAKE_DATA, JSON_SCHEMA_DEFAULT_VALUES,
|
|
23
|
-
} from "../common/mockData/formatterMockData";
|
|
24
|
-
|
|
25
|
-
describe('JSON Schema validation', () => {
|
|
26
|
-
|
|
27
|
-
it('Special chars should throw an exception', () => {
|
|
28
|
-
expect(() => { validateJSONSchema(JSON_SCHEMA_SPECIAL_CHARS_FAKE_DATA) }).toThrowError('Special characters not supported in JSON Schema');
|
|
29
|
-
});
|
|
30
|
-
|
|
31
|
-
it('Validate invalid double quotes', () => {
|
|
32
|
-
expect(validateJSONSchema(JSON_SCHEMA_INVALID_DOUBLE_QUOTES_FAKE_DATA).toString).not.toContain(/([“”])/g);
|
|
33
|
-
});
|
|
34
|
-
|
|
35
|
-
it('Validate empty choices', () => {
|
|
36
|
-
const validSchema = validateJSONSchema(JSON_SCHEMA_EMPTY_CHOICES_FAKE_DATA).toString;
|
|
37
|
-
expect(validSchema).not.toContain(/\"enum\"\n*\s*\:\n*\s*\[\n*\s*\]/g);
|
|
38
|
-
expect(validSchema).not.toContain(/\"enumNames\"\n*\s*\:\n*\s*\{\n*\s*\}/g);
|
|
39
|
-
expect(validSchema).not.toContain(/\"titleMap\"\n*\s*\:\n*\s*\[\n*\s*\]/g);
|
|
40
|
-
});
|
|
41
|
-
|
|
42
|
-
it('Validate remove $schema and id properties', () => {
|
|
43
|
-
const validSchema = validateJSONSchema(JSON_SCHEMA_ID_$SCHEMA_FAKE_DATA);
|
|
44
|
-
expect(validSchema.schema.$schema).toBeUndefined();
|
|
45
|
-
expect(validSchema.schema.id).toBeUndefined();
|
|
46
|
-
});
|
|
47
|
-
|
|
48
|
-
it('Validate field default values', () => {
|
|
49
|
-
const validSchema = validateJSONSchema(JSON_SCHEMA_DEFAULT_VALUES);
|
|
50
|
-
expect(validSchema.schema.properties.test_one_date.default).toBe('2023-08-14 15:15');
|
|
51
|
-
expect(validSchema.schema.properties.test_two_string.default).toBe('Test 2');
|
|
52
|
-
expect(validSchema.schema.properties.test_three_number.default).toBe(25);
|
|
53
|
-
expect(validSchema.schema.properties.test_four_number.default).toBe(6);
|
|
54
|
-
expect(validSchema.schema.properties.test_five_enumString.default).toBe('behavior1');
|
|
55
|
-
expect(validSchema.schema.properties.test_six_enum_dictionary.default).toBe('testone');
|
|
56
|
-
expect(validSchema.schema.properties.testseven.default).toMatchObject(['testseventhree']);
|
|
57
|
-
expect(validSchema.schema.properties.test_eight_checkbox_query.default).toMatchObject(['9b5cb19e-b7bd-4fa8-9263-8e34502e35ca']);
|
|
58
|
-
expect(validSchema.schema.properties.test_nine_dropdown_query.default).toBe('9b5cb19e-b7bd-4fa8-9263-8e34502e35ca');
|
|
59
|
-
expect(validSchema.schema.properties.testElevenArrayTest.default).toMatchObject([
|
|
60
|
-
{
|
|
61
|
-
"test_array_number": 1,
|
|
62
|
-
"test_array_string": "string"
|
|
63
|
-
}
|
|
64
|
-
]);
|
|
65
|
-
expect(validSchema.schema.properties.test_fourteen_textarea.default).toBe('Test 14');
|
|
66
|
-
});
|
|
67
|
-
|
|
68
|
-
it('Validate remove inactive enum choices', () => {
|
|
69
|
-
const validSchema = validateJSONSchema(JSON_SCHEMA_INACTIVE_CHOICES_FAKE_DATA);
|
|
70
|
-
expect(validSchema.schema.properties.invasivespecies_urgency.enum).not.toContain('test');
|
|
71
|
-
});
|
|
72
|
-
|
|
73
|
-
it('Validate remove disabled titleMap choices', () => {
|
|
74
|
-
const validSchema = validateJSONSchema(JSON_SCHEMA_INACTIVE_TITLE_MAP_FAKE_DATA);
|
|
75
|
-
expect(validSchema.schema.properties.behavior.items.enum).not.toContain('phot_evidence_collected');
|
|
76
|
-
});
|
|
77
|
-
|
|
78
|
-
it('Validate remove disabled fieldset titleMap choices', () => {
|
|
79
|
-
const validSchema = validateJSONSchema(JSON_SCHEMA_INACTIVE_FIELD_SET_TITLE_MAP_FAKE_DATA);
|
|
80
|
-
expect(validSchema.schema.properties.reportorigin.items.enum).not.toContain('phot_evidence_collected');
|
|
81
|
-
});
|
|
82
|
-
|
|
83
|
-
it('Format schema definition location', () => {
|
|
84
|
-
const validSchema = validateJSONSchema(JSON_SCHEMA_INVALID_DEFINITION_LOCATION_FAKE_DATA);
|
|
85
|
-
expect(validSchema.schema.definition).toBeUndefined();
|
|
86
|
-
expect(validSchema.definition).not.toBeUndefined();
|
|
87
|
-
});
|
|
88
|
-
|
|
89
|
-
it('Format readonly properties for field set headers', () => {
|
|
90
|
-
const validSchema = validateJSONSchema(JSON_SCHEMA_FIELD_SETS_FAKE_DATA);
|
|
91
|
-
expect(validSchema.schema.properties['fieldset__title_fieldset_title']).toMatchObject(FIELD_SET_HEADER_FAKE_DATA.fieldset__title_fieldset_title);
|
|
92
|
-
expect(validSchema.schema.properties['fieldset__title_fieldset_number_title']).toMatchObject(FIELD_SET_HEADER_FAKE_DATA.fieldset__title_fieldset_number_title);
|
|
93
|
-
});
|
|
94
|
-
|
|
95
|
-
it('Format collection field headers', () => {
|
|
96
|
-
const validSchema = validateJSONSchema(JSON_SCHEMA_COLLECTION_FIELD_FAKE_DATA);
|
|
97
|
-
expect(validSchema.schema.properties['help_value_0']).toMatchObject(COLLECTION_FIELD_HEADER_FAKE_DATA.help_value_0);
|
|
98
|
-
});
|
|
99
|
-
|
|
100
|
-
it('Validate field visibility', () => {
|
|
101
|
-
const validSchema = validateJSONSchema(JSON.stringify(jsonSchema));
|
|
102
|
-
expect(validSchema.schema.properties['string'].isHidden).toBe(false);
|
|
103
|
-
expect(validSchema.schema.properties['paragraph'].isHidden).toBe(false);
|
|
104
|
-
expect(validSchema.schema.properties['number_no_min_max'].isHidden).toBe(false);
|
|
105
|
-
expect(validSchema.schema.properties['number_with_min'].isHidden).toBe(false);
|
|
106
|
-
expect(validSchema.schema.properties['number_with_max'].isHidden).toBe(false);
|
|
107
|
-
expect(validSchema.schema.properties['number_with_min_and_max'].isHidden).toBe(false);
|
|
108
|
-
expect(validSchema.schema.properties['single_select'].isHidden).toBe(false);
|
|
109
|
-
expect(validSchema.schema.properties['single_select_choices'].isHidden).toBe(false);
|
|
110
|
-
expect(validSchema.schema.properties['collection'].isHidden).toBe(false);
|
|
111
|
-
expect(validSchema.schema.properties['calendar'].isHidden).toBe(false);
|
|
112
|
-
expect(validSchema.schema.properties['checkbox_static_choice'].isHidden).toBe(false);
|
|
113
|
-
expect(validSchema.schema.properties['checkbox_query'].isHidden).toBe(false);
|
|
114
|
-
});
|
|
115
|
-
|
|
116
|
-
it('Format required inline properties', () => {
|
|
117
|
-
const validSchema = validateJSONSchema(JSON_SCHEMA_INLINE_REQUIRED_PROPERTIES);
|
|
118
|
-
expect(validSchema.schema.properties['string'].required).toBeUndefined();
|
|
119
|
-
expect(validSchema.schema.properties['paragraph'].required).toBeUndefined();
|
|
120
|
-
expect(validSchema.schema.properties['number_no_min_max'].required).toBeUndefined();
|
|
121
|
-
expect(validSchema.schema.properties['number_with_min'].required).toBeUndefined();
|
|
122
|
-
expect(validSchema.schema.properties['number_with_max'].required).toBeUndefined();
|
|
123
|
-
expect(validSchema.schema.properties['number_with_min_and_max'].required).toBeUndefined();
|
|
124
|
-
expect(validSchema.schema.properties['single_select'].required).toBeUndefined();
|
|
125
|
-
expect(validSchema.schema.properties['single_select_choices'].required).toBeUndefined();
|
|
126
|
-
expect(validSchema.schema.properties['collection'].required).toBeUndefined();
|
|
127
|
-
expect(validSchema.schema.properties['collection'].items.properties['ItemConfiscated'].required).toBeUndefined();
|
|
128
|
-
expect(validSchema.schema.properties['collection'].items.properties['ItemNumber'].required).toBeUndefined();
|
|
129
|
-
expect(validSchema.schema.properties['calendar'].required).toBeUndefined();
|
|
130
|
-
expect(validSchema.schema.properties['checkbox_static_choice'].required).toBeUndefined();
|
|
131
|
-
expect(validSchema.schema.properties['checkbox_query'].required).toBeUndefined();
|
|
132
|
-
// @ts-ignore
|
|
133
|
-
expect(validSchema.schema.required).toIncludeAllMembers([
|
|
134
|
-
'string',
|
|
135
|
-
'paragraph',
|
|
136
|
-
'number_no_min_max',
|
|
137
|
-
'number_with_min',
|
|
138
|
-
'number_with_max',
|
|
139
|
-
'number_with_min_and_max',
|
|
140
|
-
'single_select',
|
|
141
|
-
'single_select_choices',
|
|
142
|
-
'collection',
|
|
143
|
-
'calendar',
|
|
144
|
-
'checkbox_static_choice',
|
|
145
|
-
'checkbox_query',
|
|
146
|
-
]);
|
|
147
|
-
});
|
|
148
|
-
|
|
149
|
-
it('Validate schema validator should match expected json schema', () => {
|
|
150
|
-
const validSchema = validateJSONSchema(JSON.stringify(jsonSchema));
|
|
151
|
-
expect(validSchema).toMatchObject(expectedSchema);
|
|
152
|
-
});
|
|
153
|
-
});
|
|
154
|
-
|
|
155
|
-
describe('JSON UI Schema generation', () => {
|
|
156
|
-
|
|
157
|
-
it('Generate UI Schema for all renderers', () => {
|
|
158
|
-
const validSchema = validateJSONSchema(JSON.stringify(jsonSchema));
|
|
159
|
-
const uiSchema = generateUISchema(validSchema);
|
|
160
|
-
expect(uiSchema).toMatchObject(expectedUISchema);
|
|
161
|
-
});
|
|
162
|
-
|
|
163
|
-
it('Generate UI Schema for field sets', () => {
|
|
164
|
-
const validSchema = validateJSONSchema(JSON.stringify(jsonSchemaFieldSets));
|
|
165
|
-
const uiSchema = generateUISchema(validSchema);
|
|
166
|
-
expect(uiSchema).toMatchObject(expectedFieldSetUISchema);
|
|
167
|
-
});
|
|
168
|
-
});
|