@earthranger/react-native-jsonforms-formatter 0.1.0 → 1.0.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.
Files changed (35) hide show
  1. package/README.md +94 -16
  2. package/dist/bundle.js +1 -0
  3. package/dist/common/mockData/formatterMockData.d.ts +50 -0
  4. package/dist/common/mockData/formatterMockData.d.ts.map +1 -0
  5. package/dist/src/generateUISchema.d.ts +5 -0
  6. package/dist/src/generateUISchema.d.ts.map +1 -0
  7. package/{src/index.ts → dist/src/index.d.ts} +1 -0
  8. package/dist/src/index.d.ts.map +1 -0
  9. package/dist/src/utils/stringUtils.d.ts +2 -0
  10. package/dist/src/utils/stringUtils.d.ts.map +1 -0
  11. package/dist/src/utils/utils.d.ts +43 -0
  12. package/dist/src/utils/utils.d.ts.map +1 -0
  13. package/dist/src/validateJsonSchema.d.ts +2 -0
  14. package/dist/src/validateJsonSchema.d.ts.map +1 -0
  15. package/dist/test/JsonFormatter.test.d.ts +2 -0
  16. package/dist/test/JsonFormatter.test.d.ts.map +1 -0
  17. package/package.json +16 -7
  18. package/ jest.config.js +0 -4
  19. package/.eslintrc.cjs +0 -18
  20. package/.githooks/pre-commit +0 -3
  21. package/.github/CODEOWNERS +0 -2
  22. package/.github/workflows/npm-build.yml +0 -40
  23. package/babel.config.cjs +0 -6
  24. package/extJestSetup.js +0 -3
  25. package/src/__test__/JsonFormatter.test.tsx +0 -168
  26. package/src/common/mockData/formatterMockData.ts +0 -770
  27. package/src/common/mockData/jsonSchemaExpectedMock.json +0 -318
  28. package/src/common/mockData/jsonSchemaFielSetMock.json +0 -972
  29. package/src/common/mockData/jsonSchemaMock.json +0 -250
  30. package/src/common/mockData/uiSchemaExpectedMock.json +0 -103
  31. package/src/common/mockData/uiSchemaFielSetExpectedMock.json +0 -297
  32. package/src/generateUISchema.ts +0 -164
  33. package/src/utils/utils.ts +0 -83
  34. package/src/validateJsonSchema.ts +0 -275
  35. package/tsconfig.json +0 -32
package/README.md CHANGED
@@ -1,13 +1,14 @@
1
1
  # React Native JSONForms Formatter
2
+
2
3
  ![Build Status][ci-url]
3
4
 
4
5
  [ci-url]: https://github.com/PADAS/react-native-jsonforms-formatter/actions/workflows/npm-build.yml/badge.svg
5
6
 
6
- A [React Native](https://reactnative.dev/) [JSON Schema](https://json-schema.org/) formatter to build mobile forms based on [JSON Forms](https://jsonforms.io/)
7
+ A Node.js library for validating JSONSchema and generating UISchema for a custom ReactNative JSONForms element.
7
8
 
8
- React Native JSON Forms Formatter is an alternative solution for rendering JTD schemas in JSON Forms. It validates JSON Schemas and generates UI schemas compatible with the [JSON Forms library](https://github.com/eclipsesource/jsonforms), even for schemas that are not supported by other JSON Schema libraries.
9
+ ## Installation
9
10
 
10
- ## Install
11
+ You can install the library using npm or yarn:
11
12
 
12
13
  #### Using `yarn`
13
14
 
@@ -23,29 +24,106 @@ npm install --save react-native-jsonforms-formatter
23
24
 
24
25
  ## Usage
25
26
 
26
- ```javascript
27
- import { validateJSONSchema, generateUISchema } 'react-native-jsonforms-formatter';
27
+ The library provides two main functions: `validateJSONSchema` and `generateUISchema`.
28
+
29
+ ### Validating JSONSchema
30
+
31
+ You can use the `validateJSONSchema` function to validate a JSONSchema string:
32
+
33
+ ```typescript
34
+ import { validateJSONSchema } from "react-native-jsonforms-formatter";
35
+
36
+ const stringSchema = `
37
+ {
38
+ "type": "object",
39
+ "properties": {
40
+ "name": {
41
+ "type": "string",
42
+ "title": "Name"
43
+ },
44
+ "age": {
45
+ "type": "integer",
46
+ "title": "Age"
47
+ }
48
+ }
49
+ }
50
+ `;
51
+
52
+ const jsonSchema = validateJSONSchema(stringSchema);
28
53
  ```
29
54
 
30
- Your json schema needs to be validated and formatted in order to make it parsable and valid for JSON Forms library. The library will generate a valid UI schema for input into JSON Forms to be used in a `JsonForms` component.
55
+ 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.
56
+
57
+ ### Generating UISchema
58
+
59
+ You can use the `generateUISchema` function to generate a UISchema object from a valid JSONSchema:
60
+
61
+ ```typescript
62
+ import { generateUISchema } from "react-native-jsonforms-formatter";
63
+
64
+ const uiSchema = generateUISchema(jsonSchema);
65
+ ```
66
+
67
+ The `generateUISchema` function returns a `UISchema` object that can be used with the ReactNative JSONForms library.
68
+
69
+ ## Putting it all together
70
+
71
+ Here's an example of how you can use the library in a ReactNative application:
72
+
73
+ ```typescript
74
+ import { JsonForms } from "@jsonforms/react-native";
75
+ import { RNCells, RNRenderers } from "@jsonforms/react-native-renderers";
76
+ import React from "react";
77
+ import {
78
+ generateUISchema,
79
+ validateJSONSchema,
80
+ } from "react-native-jsonforms-formatter";
81
+
82
+ const stringSchema = `
83
+ {
84
+ "type": "object",
85
+ "properties": {
86
+ "name": {
87
+ "type": "string",
88
+ "title": "Name"
89
+ },
90
+ "age": {
91
+ "type": "integer",
92
+ "title": "Age"
93
+ }
94
+ }
95
+ }
96
+ `;
31
97
 
32
- ```javascript
33
98
  const jsonSchema = validateJSONSchema(stringSchema);
34
- const uiSchema = generateJSONUISchema(jsonSchema);
35
-
36
- <JsonForms
37
- schema={jsonSchema}
38
- uischema={uiSchema}
39
- data={data}
40
- renderers={RNRenderers}
41
- cells={RNCells}
42
- />
99
+ const uiSchema = generateUISchema(jsonSchema);
100
+
101
+ const App = () => {
102
+ const [data, setData] = React.useState({ name: "John Doe", age: 30 });
103
+
104
+ return (
105
+ <JsonForms
106
+ schema={jsonSchema}
107
+ uischema={uiSchema}
108
+ data={data}
109
+ renderers={RNRenderers}
110
+ cells={RNCells}
111
+ onChange={(event) => setData(event.data)}
112
+ />
113
+ );
114
+ };
115
+
116
+ export default App;
43
117
  ```
44
118
 
45
119
  ## Contributors
120
+
121
+ Contributions are welcome! If you find a bug or have a feature request, please open an issue.
122
+
46
123
  <a href="https://github.com/PADAS/react-native-jsonforms-formatter/graphs/contributors">
47
124
  <img src="https://contributors-img.web.app/image?repo=PADAS/react-native-jsonforms-formatter" />
48
125
  </a>
49
126
 
50
127
  ## Licensing
128
+
51
129
  A copy of the license is available in the repository's [LICENSE](LICENSE) file.
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:()=>Je,validateJSONSchema:()=>ot});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 u="object"==typeof global&&global&&global.Object===Object&&global;var s="object"==typeof self&&self&&self.Object===Object&&self;const p=u||s||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,D=N.hasOwnProperty,E=RegExp("^"+P.call(D).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");const F=function(e){return!(!g(e)||function(e){return!!S&&S in e}(e))&&(O(e)?E:M).test(_(e))},T=function(e,t){var r=function(e,t){return null==e?void 0:e[t]}(e,t);return F(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,ue=ce&&ce.exports===ae?p.Buffer:void 0;const se=(ue?ue.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&&u.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||se(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},De=function(e){return!be(e.key)},Ee=function(e){var t=e.toLowerCase().replace(/[\s\\/\\%]/gi,"_");return"fieldset__title_".concat(t)},Fe=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){return e.includes("enum")},Re=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},$e=function(e){return null==e||0===e.trim().length},Ue=function(){return Ue=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},Ue.apply(this,arguments)};!function(e){e.Number="number",e.String="string",e.Array="array"}(ke||(ke={}));var Be=function(e,t,r){return void 0===r&&(r={}),Ue({type:"Control",scope:"#/properties/".concat(e),label:t},r&&{options:r})},Le=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}},Je=function(e){var t=[];return Ae(e.definition)?t.push.apply(t,Ve(e)):Object.keys(e.schema.properties).forEach((function(r){var n=ze(r,e);n&&t.push(n)})),{type:"Category",elements:t}},Ve=function(e){var t=[];return e.definition.forEach((function(r){if("string"==typeof r)t.push(Be(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(Be(Ee(r.title),r.title,We(ge.FormLabel)));break;case Pe(r):r.title&&t.push(Be(Ee(r.title),r.title,We(ge.FormLabel))),r.items.forEach((function(r){if(r instanceof Object){var n=ze(r.key||"",e,r);n&&t.push(n)}else if("string"==typeof r){var i=ze(r,e);i&&t.push(i)}}));break;case De(r):var n=ze(r.key,e);n&&t.push(n)}})),t},We=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},ze=function(e,t,r){void 0===r&&(r=void 0);var n={};switch(t.schema.properties[e].type){case ke.Number:return Be(e,t.schema.properties[e].title||"");case ke.String:var i=Le(e,t,r);return $e(i)?t.schema.properties[e].display&&t.schema.properties[e].display===Oe.Header&&(n=We(ge.FormLabel)):n=We(ge.DateTime,i),Be(e,t.schema.properties[e].title||"",n);case ke.Array:return t.schema.properties[e].items.enum&&t.schema.properties[e].items.enumNames?n=We(ge.MultiSelect):t.schema.properties[e].items&&(n=We(ge.RepeatableField)),Be(e,t.schema.properties[e].title||"",n);case void 0:return i=Le(e,t,r),$e(i)?void 0:(n=We(ge.DateTime,i),Be(e,t.schema.properties[e].title||"",n))}},Ge=function(){return Ge=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},Ge.apply(this,arguments)},Ke=/[^\w\n\s_"](?=[^:\n\s{}[]]*:[\t\n\s]*(\{|\[)+)/g,Qe=/"minimum"(?:[^\\"]|\\\\|\\")*"\d+\.*\d*"/g,Xe=/"maximum"(?:[^\\"]|\\\\|\\")*"\d+\.*\d*"/g,Ye=/"(?=[^"]*(?:"[^"]*)?$)/g,Ze=function(e){return{type:"string",readOnly:!0,isHidden:!1,display:Oe.Header,title:e}},et=function(e){return(null==e?void 0:e.isHidden)||!1},tt=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),Fe(o)&&tt(o.items)}return t.length>0&&(e.required=t),e},rt=function(e){return e.enum.filter((function(t){return!e.inactive_enum.includes(t)}))},nt=function(e){return e.titleMap.filter((function(t){return!e.inactive_titleMap.includes(t.value)}))},it=function(e,t,r,n){var i,o,a,c,u=e.hasCheckboxes,s=e.hasDisabledChoices;if(Me(t)&&r.schema.properties[t])r.schema.properties[t].isHidden=et(r.schema.properties[t]);else{if((_e(t)||De(t))&&t.key&&r.schema.properties[t.key]&&(r.schema.properties[t.key].isHidden=et(r.schema.properties[t.key])),s&&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=nt(t)}else r.definition[r.definition.indexOf(t)].titleMap=nt(t);u&&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,Ge(Ge(Ge({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})))}},ot=function(e){e=function(e){if(null!==e.match(Ke))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(Qe,(function(e){return e.replace(Ye,"")}))).replace(Xe,(function(e){return e.replace(Ye,"")}))}(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),hasEnums:Ie(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 u=c[a],s=t.schema.properties[u];Re(s)&&(t.schema.properties[u].enum=rt(s),0===t.schema.properties[u].enum.length&&(t.schema.properties[u].enum=["0"],t.schema.properties[u].enumNames={0:"No Options"}))}if(o)for(var p=0,l=Object.keys(t.schema.properties);p<l.length;p++)if(u=l[p],(null===(r=t.schema.properties[u].enum)||void 0===r?void 0:r.length)>0&&(n=t.schema.properties[u].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=Ee(i.title);t.schema.properties[o]=Ze(i.title);break;case Pe(i):for(var a=0,c=i.items;a<c.length;a++){var u=c[a];it(e,u,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];it(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]=Ze((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=tt(t.schema)),t};module.exports=t})();
@@ -0,0 +1,50 @@
1
+ import { ElementDisplay } from "../../src/utils/utils";
2
+ export declare const JSON_SCHEMA_SPECIAL_CHARS_FAKE_DATA: string;
3
+ export declare const JSON_SCHEMA_INVALID_DOUBLE_QUOTES_FAKE_DATA: string;
4
+ export declare const JSON_SCHEMA_EMPTY_CHOICES_FAKE_DATA: string;
5
+ export declare const JSON_SCHEMA_ID_$SCHEMA_FAKE_DATA: string;
6
+ export declare const JSON_SCHEMA_INACTIVE_CHOICES_FAKE_DATA: string;
7
+ export declare const JSON_SCHEMA_INACTIVE_TITLE_MAP_FAKE_DATA: string;
8
+ export declare const JSON_SCHEMA_INACTIVE_FIELD_SET_TITLE_MAP_FAKE_DATA: string;
9
+ export declare const JSON_SCHEMA_DUPLICATED_CHOICES_SINGLE_SELECT_FAKE_DATA: string;
10
+ export declare const JSON_SCHEMA_DATE_TIME_FIELD_SETS: string;
11
+ export declare const UI_SCHEMA_ELEMENT_DATE_TIME_FIELD_SETS: {
12
+ type: string;
13
+ scope: string;
14
+ label: string;
15
+ options: {
16
+ format: string;
17
+ display: string;
18
+ };
19
+ };
20
+ export declare const JSON_SCHEMA_INVALID_DEFINITION_LOCATION_FAKE_DATA: string;
21
+ export declare const JSON_SCHEMA_FIELD_SETS_FAKE_DATA: string;
22
+ export declare const FIELD_SET_HEADER_FAKE_DATA: {
23
+ fieldset__title_fieldset_title: {
24
+ type: string;
25
+ readOnly: boolean;
26
+ isHidden: boolean;
27
+ display: ElementDisplay;
28
+ title: string;
29
+ };
30
+ fieldset__title_fieldset_number_title: {
31
+ type: string;
32
+ readOnly: boolean;
33
+ isHidden: boolean;
34
+ display: ElementDisplay;
35
+ title: string;
36
+ };
37
+ };
38
+ export declare const JSON_SCHEMA_COLLECTION_FIELD_FAKE_DATA: string;
39
+ export declare const COLLECTION_FIELD_HEADER_FAKE_DATA: {
40
+ help_value_0: {
41
+ type: string;
42
+ readOnly: boolean;
43
+ isHidden: boolean;
44
+ display: ElementDisplay;
45
+ title: string;
46
+ };
47
+ };
48
+ export declare const JSON_SCHEMA_INLINE_REQUIRED_PROPERTIES: string;
49
+ export declare const JSON_SCHEMA_DEFAULT_VALUES: string;
50
+ //# sourceMappingURL=formatterMockData.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatterMockData.d.ts","sourceRoot":"","sources":["../../../common/mockData/formatterMockData.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,eAAO,MAAM,mCAAmC,QAY3C,CAAC;AAEN,eAAO,MAAM,2CAA2C,QAYnD,CAAC;AAEN,eAAO,MAAM,mCAAmC,QA6B3C,CAAC;AAEN,eAAO,MAAM,gCAAgC,QAcxC,CAAC;AAEN,eAAO,MAAM,sCAAsC,QA+B9C,CAAC;AAEN,eAAO,MAAM,wCAAwC,QAuChD,CAAC;AAEN,eAAO,MAAM,kDAAkD,QAwE1D,CAAC;AAEN,eAAO,MAAM,sDAAsD,QA2B9D,CAAC;AAEN,eAAO,MAAM,gCAAgC,QAwBxC,CAAC;AAEN,eAAO,MAAM,sCAAsC;;;;;;;;CAQlD,CAAC;AAEF,eAAO,MAAM,iDAAiD,QAYzD,CAAC;AAEN,eAAO,MAAM,gCAAgC,QAoCxC,CAAC;AAEN,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;CAetC,CAAC;AAEF,eAAO,MAAM,sCAAsC,QA8C9C,CAAC;AAEN,eAAO,MAAM,iCAAiC;;;;;;;;CAQ7C,CAAC;AAEF,eAAO,MAAM,sCAAsC,QAyO9C,CAAA;AAEL,eAAO,MAAM,0BAA0B,QAuLlC,CAAA"}
@@ -0,0 +1,5 @@
1
+ export declare const generateUISchema: (schema: any) => {
2
+ type: string;
3
+ elements: Object[];
4
+ };
5
+ //# sourceMappingURL=generateUISchema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generateUISchema.d.ts","sourceRoot":"","sources":["../../src/generateUISchema.ts"],"names":[],"mappings":"AAmDA,eAAO,MAAM,gBAAgB,WAAY,GAAG;;;CAiB3C,CAAC"}
@@ -1,2 +1,3 @@
1
1
  export { generateUISchema } from './generateUISchema';
2
2
  export { validateJSONSchema } from './validateJsonSchema';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -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,2 @@
1
+ export declare const isEmptyString: (value: string | undefined) => boolean;
2
+ //# sourceMappingURL=stringUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stringUtils.d.ts","sourceRoot":"","sources":["../../../src/utils/stringUtils.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa,UAAW,MAAM,GAAG,SAAS,YAExB,CAAC"}
@@ -0,0 +1,43 @@
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 ENUM = "enum";
23
+ export declare const isObject: (item: any) => boolean;
24
+ export declare const isString: (item: any) => boolean;
25
+ export declare const isSchemaFieldSet: (definition: any[]) => boolean;
26
+ export declare const isFieldSetTitle: (item: any) => boolean;
27
+ export declare const isFieldSetTitleWithoutItems: (item: any) => boolean;
28
+ export declare const isFieldSet: (item: any) => boolean;
29
+ export declare const isCheckbox: (item: any) => boolean;
30
+ export declare const isPropertyKey: (item: any) => boolean;
31
+ export declare const getFieldSetTitleKey: (title: string) => string;
32
+ export declare const getSchemaValidations: (stringSchema: string) => {
33
+ hasCheckboxes: boolean;
34
+ hasInactiveChoices: boolean;
35
+ hasDisabledChoices: boolean;
36
+ hasEnums: boolean;
37
+ };
38
+ export declare const isArrayProperty: (property: any) => boolean;
39
+ export declare const isRequiredProperty: (property: any) => boolean;
40
+ export declare const isInactiveChoice: (item: any) => boolean;
41
+ export declare const isDisabledChoice: (item: any) => boolean;
42
+ export declare const hasEnumDuplicatedItems: (options: string[]) => boolean;
43
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/utils/utils.ts"],"names":[],"mappings":"AAGA,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;AACtC,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;AAClC,eAAO,MAAM,IAAI,SAAS,CAAC;AAE3B,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;;;;;CAKvD,CAAC;AAEH,eAAO,MAAM,eAAe,aAAc,GAAG,YAChB,CAAC;AAE9B,eAAO,MAAM,kBAAkB,aAAc,GAAG,YAA0D,CAAC;AAU3G,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,2 @@
1
+ export declare const validateJSONSchema: (stringSchema: string) => any;
2
+ //# sourceMappingURL=validateJsonSchema.d.ts.map
@@ -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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=JsonFormatter.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JsonFormatter.test.d.ts","sourceRoot":"","sources":["../../test/JsonFormatter.test.tsx"],"names":[],"mappings":""}
package/package.json CHANGED
@@ -1,16 +1,17 @@
1
1
  {
2
2
  "name": "@earthranger/react-native-jsonforms-formatter",
3
- "version": "0.1.0",
3
+ "version": "1.0.0",
4
4
  "type": "module",
5
5
  "description": "Converts JTD into JSON Schema ",
6
- "main": "src/index.js",
7
- "types": "src/index.d.ts",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
8
  "scripts": {
9
9
  "preinstall": "git config core.hooksPath .githooks",
10
- "build": "tsc",
10
+ "build": "npx webpack",
11
11
  "clean": "rm -rf dist",
12
12
  "lint": "eslint src/ --ext .js,.jsx,.ts,.tsx",
13
- "test": "jest src/.*\\.test\\..* --coverage",
13
+ "lint:test": "eslint 'test/**/*.{ts,tsx}'",
14
+ "test": "jest test/.*\\.test\\..* --coverage",
14
15
  "typecheck": "tsc -b"
15
16
  },
16
17
  "repository": {
@@ -20,6 +21,9 @@
20
21
  "publishConfig": {
21
22
  "access": "public"
22
23
  },
24
+ "files": [
25
+ "./dist"
26
+ ],
23
27
  "keywords": [
24
28
  "json",
25
29
  "schema",
@@ -54,6 +58,8 @@
54
58
  "@babel/preset-typescript": "^7.21.5",
55
59
  "@types/jest": "^29.5.1",
56
60
  "@types/lodash-es": "^4.17.7",
61
+ "@types/node": "^20.12.5",
62
+ "@types/webpack": "^5.28.5",
57
63
  "@typescript-eslint/eslint-plugin": "^6.8.0",
58
64
  "@typescript-eslint/parser": "^6.8.0",
59
65
  "babel-jest": "^29.5.0",
@@ -62,7 +68,10 @@
62
68
  "jest": "^29.5.0",
63
69
  "jest-extended": "^3.2.4",
64
70
  "ts-jest": "^29.1.0",
71
+ "ts-loader": "^9.5.1",
65
72
  "ts-node": "^10.9.1",
66
- "typescript": "^5.2.2"
73
+ "typescript": "^5.2.2",
74
+ "webpack": "^5.91.0",
75
+ "webpack-cli": "^5.1.4"
67
76
  }
68
- }
77
+ }
package/ jest.config.js DELETED
@@ -1,4 +0,0 @@
1
- module.exports = {
2
- preset: 'ts-jest',
3
- testEnvironment: 'node',
4
- };
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
- };
@@ -1,3 +0,0 @@
1
- #!/bin/sh
2
-
3
- yarn run eslint --no-error-on-unmatched-pattern $(git diff --staged --name-only HEAD | grep -E '\.(js|jsx|ts|tsx)$' | xargs)
@@ -1,2 +0,0 @@
1
- # global er-mobile team
2
- * @doneill @leo-ori @Alex79373 @hugohabel
@@ -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
@@ -1,6 +0,0 @@
1
- module.exports = {
2
- presets: [
3
- ['@babel/preset-env', {targets: {node: 'current'}}],
4
- '@babel/preset-typescript',
5
- ],
6
- };
package/extJestSetup.js DELETED
@@ -1,3 +0,0 @@
1
- import * as matchers from 'jest-extended';
2
- expect.extend(matchers);
3
-
@@ -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
- });