@earthranger/react-native-jsonforms-formatter 2.0.0-beta.2 → 2.0.0-beta.20

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 (68) hide show
  1. package/README.md +6 -0
  2. package/dist/bundle.js +1 -1
  3. package/dist/common/schemaUtils.d.ts +23 -0
  4. package/dist/common/schemaUtils.d.ts.map +1 -0
  5. package/dist/common/schemaUtils.js +56 -0
  6. package/dist/common/schemaUtils.js.map +1 -0
  7. package/dist/{src/common → common}/types.d.ts +24 -0
  8. package/dist/common/types.d.ts.map +1 -0
  9. package/dist/common/types.js +2 -0
  10. package/dist/common/types.js.map +1 -0
  11. package/dist/index.d.ts +5 -0
  12. package/dist/index.d.ts.map +1 -0
  13. package/dist/index.js +9 -0
  14. package/dist/index.js.map +1 -0
  15. package/dist/v1/generateUISchema.d.ts.map +1 -0
  16. package/dist/v1/generateUISchema.js +181 -0
  17. package/dist/v1/generateUISchema.js.map +1 -0
  18. package/dist/v1/index.d.ts.map +1 -0
  19. package/dist/v1/index.js +3 -0
  20. package/dist/v1/index.js.map +1 -0
  21. package/dist/v1/utils/utils.d.ts.map +1 -0
  22. package/dist/v1/utils/utils.js +149 -0
  23. package/dist/v1/utils/utils.js.map +1 -0
  24. package/dist/v1/validateJsonSchema.d.ts.map +1 -0
  25. package/dist/v1/validateJsonSchema.js +286 -0
  26. package/dist/v1/validateJsonSchema.js.map +1 -0
  27. package/dist/v1.d.ts.map +1 -0
  28. package/dist/v1.js +3 -0
  29. package/dist/v1.js.map +1 -0
  30. package/dist/v2/conditions.d.ts +51 -0
  31. package/dist/v2/conditions.d.ts.map +1 -0
  32. package/dist/v2/conditions.js +190 -0
  33. package/dist/v2/conditions.js.map +1 -0
  34. package/dist/{src/v2 → v2}/generateUISchema.d.ts +1 -0
  35. package/dist/v2/generateUISchema.d.ts.map +1 -0
  36. package/dist/v2/generateUISchema.js +120 -0
  37. package/dist/v2/generateUISchema.js.map +1 -0
  38. package/dist/v2/index.d.ts +5 -0
  39. package/dist/v2/index.d.ts.map +1 -0
  40. package/dist/v2/index.js +7 -0
  41. package/dist/v2/index.js.map +1 -0
  42. package/dist/v2/mockData.d.ts.map +1 -0
  43. package/dist/v2/mockData.js +343 -0
  44. package/dist/v2/mockData.js.map +1 -0
  45. package/dist/{src/v2 → v2}/utils.d.ts +10 -4
  46. package/dist/v2/utils.d.ts.map +1 -0
  47. package/dist/v2/utils.js +300 -0
  48. package/dist/v2/utils.js.map +1 -0
  49. package/package.json +16 -10
  50. package/dist/src/common/types.d.ts.map +0 -1
  51. package/dist/src/index.d.ts +0 -4
  52. package/dist/src/index.d.ts.map +0 -1
  53. package/dist/src/v1/generateUISchema.d.ts.map +0 -1
  54. package/dist/src/v1/index.d.ts.map +0 -1
  55. package/dist/src/v1/utils/utils.d.ts.map +0 -1
  56. package/dist/src/v1/validateJsonSchema.d.ts.map +0 -1
  57. package/dist/src/v1.d.ts.map +0 -1
  58. package/dist/src/v2/generateUISchema.d.ts.map +0 -1
  59. package/dist/src/v2/index.d.ts +0 -3
  60. package/dist/src/v2/index.d.ts.map +0 -1
  61. package/dist/src/v2/mockData.d.ts.map +0 -1
  62. package/dist/src/v2/utils.d.ts.map +0 -1
  63. /package/dist/{src/v1 → v1}/generateUISchema.d.ts +0 -0
  64. /package/dist/{src/v1 → v1}/index.d.ts +0 -0
  65. /package/dist/{src/v1 → v1}/utils/utils.d.ts +0 -0
  66. /package/dist/{src/v1 → v1}/validateJsonSchema.d.ts +0 -0
  67. /package/dist/{src/v1.d.ts → v1.d.ts} +0 -0
  68. /package/dist/{src/v2 → v2}/mockData.d.ts +0 -0
@@ -0,0 +1,190 @@
1
+ /**
2
+ * Builds a JSON Schema for the CONTAINS operator.
3
+ * Matches strings that contain the specified value as a substring.
4
+ */
5
+ export var buildContainsSchema = function (value) {
6
+ return {
7
+ pattern: value,
8
+ type: 'string',
9
+ };
10
+ };
11
+ /**
12
+ * Builds a JSON Schema for the DOES_NOT_HAVE_INPUT operator.
13
+ * Matches when the field has no meaningful input (null, undefined, empty string, empty array, empty object).
14
+ */
15
+ export var buildDoesNotHaveInputSchema = function () {
16
+ return {
17
+ anyOf: [
18
+ { not: {} }, // undefined/not required
19
+ { type: 'array', maxItems: 0 }, // empty array
20
+ { type: 'object', maxProperties: 0 }, // empty object
21
+ { type: 'string', maxLength: 0 }, // empty string
22
+ { type: 'null' }, // null value
23
+ ],
24
+ };
25
+ };
26
+ /**
27
+ * Builds a JSON Schema for the HAS_INPUT operator.
28
+ * Matches when the field has meaningful input (non-null, non-empty).
29
+ */
30
+ export var buildHasInputSchema = function () {
31
+ return {
32
+ allOf: [
33
+ { not: { type: 'null' } },
34
+ {
35
+ anyOf: [
36
+ { type: 'array', minItems: 1 },
37
+ { type: 'boolean' },
38
+ { type: 'number' },
39
+ { type: 'object', minProperties: 1 },
40
+ { type: 'string', minLength: 1 },
41
+ ],
42
+ },
43
+ ],
44
+ };
45
+ };
46
+ /**
47
+ * Builds a JSON Schema for the INPUT_IS_EXACTLY operator.
48
+ * Matches when the field value equals the specified value exactly.
49
+ */
50
+ export var buildInputIsExactlySchema = function (value) {
51
+ // Handle different value types
52
+ if (typeof value === 'boolean') {
53
+ return { const: value, type: 'boolean' };
54
+ }
55
+ if (typeof value === 'number') {
56
+ return {
57
+ anyOf: [
58
+ { const: value, type: 'number' },
59
+ { const: String(value), type: 'string' },
60
+ ],
61
+ };
62
+ }
63
+ if (value === null) {
64
+ return { type: 'null' };
65
+ }
66
+ // String value - also allow numeric match if the string is a valid number
67
+ var numValue = Number(value);
68
+ if (!isNaN(numValue) && value !== '') {
69
+ return {
70
+ anyOf: [
71
+ { const: numValue, type: 'number' },
72
+ { const: value, type: 'string' },
73
+ ],
74
+ };
75
+ }
76
+ return { const: value, type: 'string' };
77
+ };
78
+ var VALID_OPERATORS = [
79
+ 'CONTAINS',
80
+ 'DOES_NOT_HAVE_INPUT',
81
+ 'HAS_INPUT',
82
+ 'INPUT_IS_EXACTLY',
83
+ ];
84
+ /**
85
+ * Gets the operator schema for a condition (without field wrapper).
86
+ * Used internally by buildConditionSchema and buildSchemaBasedCondition.
87
+ */
88
+ export var getOperatorSchema = function (condition) {
89
+ switch (condition.operator) {
90
+ case 'CONTAINS':
91
+ if (condition.value === undefined || condition.value === null) {
92
+ throw new Error("CONTAINS operator requires a value for condition '".concat(condition.id, "'"));
93
+ }
94
+ return buildContainsSchema(String(condition.value));
95
+ case 'DOES_NOT_HAVE_INPUT':
96
+ return buildDoesNotHaveInputSchema();
97
+ case 'HAS_INPUT':
98
+ return buildHasInputSchema();
99
+ case 'INPUT_IS_EXACTLY':
100
+ if (condition.value === undefined) {
101
+ throw new Error("INPUT_IS_EXACTLY operator requires a value for condition '".concat(condition.id, "'"));
102
+ }
103
+ return buildInputIsExactlySchema(condition.value);
104
+ default:
105
+ throw new Error("Unknown operator '".concat(condition.operator, "' in condition '").concat(condition.id, "'"));
106
+ }
107
+ };
108
+ /**
109
+ * Builds a JSON Schema for a single condition based on its operator.
110
+ * Wraps the operator schema in a properties structure for root scope validation.
111
+ */
112
+ export var buildConditionSchema = function (condition) {
113
+ var _a;
114
+ var operatorSchema = getOperatorSchema(condition);
115
+ // Wrap in properties structure for the field (used with scope: "#")
116
+ return {
117
+ properties: (_a = {},
118
+ _a[condition.field] = operatorSchema,
119
+ _a),
120
+ required: [condition.field],
121
+ };
122
+ };
123
+ /**
124
+ * Builds a JSONForms schema-based condition from one or more V2 conditions.
125
+ *
126
+ * For single conditions: Uses field-specific scope (e.g., "#/properties/fieldName")
127
+ * which is the standard JSONForms pattern and most reliable across implementations.
128
+ *
129
+ * For multiple conditions: Uses root scope "#" with allOf combining property schemas.
130
+ */
131
+ export var buildSchemaBasedCondition = function (conditions) {
132
+ if (conditions.length === 0) {
133
+ throw new Error('At least one condition is required');
134
+ }
135
+ if (conditions.length === 1) {
136
+ // Single condition: use field-specific scope for better compatibility
137
+ var condition = conditions[0];
138
+ return {
139
+ scope: "#/properties/".concat(condition.field),
140
+ schema: getOperatorSchema(condition),
141
+ };
142
+ }
143
+ // Multiple conditions: use root scope with allOf
144
+ var allOfSchemas = conditions.map(function (condition) {
145
+ return buildConditionSchema(condition);
146
+ });
147
+ return {
148
+ scope: '#',
149
+ schema: {
150
+ allOf: allOfSchemas,
151
+ },
152
+ };
153
+ };
154
+ /**
155
+ * Creates a complete JSONForms rule for a section with the given conditions.
156
+ * Uses SHOW effect by default.
157
+ */
158
+ export var createSectionRule = function (conditions) {
159
+ return {
160
+ effect: 'SHOW',
161
+ condition: buildSchemaBasedCondition(conditions),
162
+ };
163
+ };
164
+ /**
165
+ * Validates conditions for a section.
166
+ * Throws an error if any condition is invalid.
167
+ */
168
+ export var validateConditions = function (conditions, fieldNames) {
169
+ for (var _i = 0, conditions_1 = conditions; _i < conditions_1.length; _i++) {
170
+ var condition = conditions_1[_i];
171
+ // Validate operator
172
+ if (!VALID_OPERATORS.includes(condition.operator)) {
173
+ throw new Error("Invalid operator '".concat(condition.operator, "'"));
174
+ }
175
+ // Validate field exists
176
+ if (!fieldNames.includes(condition.field)) {
177
+ throw new Error("Unknown field '".concat(condition.field, "'"));
178
+ }
179
+ // Validate required values
180
+ if (condition.operator === 'CONTAINS' &&
181
+ (condition.value === undefined || condition.value === null)) {
182
+ throw new Error("CONTAINS operator requires a value");
183
+ }
184
+ if (condition.operator === 'INPUT_IS_EXACTLY' &&
185
+ condition.value === undefined) {
186
+ throw new Error("INPUT_IS_EXACTLY operator requires a value");
187
+ }
188
+ }
189
+ };
190
+ //# sourceMappingURL=conditions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conditions.js","sourceRoot":"","sources":["../../src/v2/conditions.ts"],"names":[],"mappings":"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"}
@@ -9,6 +9,7 @@ import { V2Schema, JSONFormsUISchema } from '../common/types';
9
9
  *
10
10
  * @param schema - EarthRanger V2 schema with json and ui properties
11
11
  * @returns JSONForms UI schema with single-column VerticalLayout for React Native
12
+ * @throws Error if schema has invalid structure or unsupported field configurations
12
13
  */
13
14
  export declare const generateUISchema: (schema: V2Schema) => JSONFormsUISchema;
14
15
  //# sourceMappingURL=generateUISchema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generateUISchema.d.ts","sourceRoot":"","sources":["../../src/v2/generateUISchema.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EACR,iBAAiB,EAElB,MAAM,iBAAiB,CAAC;AAoFzB;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,gBAAgB,WAAY,QAAQ,KAAG,iBAuCnD,CAAC"}
@@ -0,0 +1,120 @@
1
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
2
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
3
+ if (ar || !(i in from)) {
4
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
5
+ ar[i] = from[i];
6
+ }
7
+ }
8
+ return to.concat(ar || Array.prototype.slice.call(from));
9
+ };
10
+ import { createControl, createSectionLayout, extractConditionalProperties, getVisibleFields, groupFieldsBySection } from './utils';
11
+ import { validateConditions } from './conditions';
12
+ /**
13
+ * Validates V2 schema structure for known issues
14
+ */
15
+ var validateV2Schema = function (schema) {
16
+ var invalidFields = [];
17
+ var supportedFieldTypes = ['TEXT', 'NUMERIC', 'DATE_TIME', 'CHOICE_LIST', 'LOCATION', 'COLLECTION', 'ATTACHMENT'];
18
+ // Check each field for validity
19
+ Object.entries(schema.json.properties).forEach(function (_a) {
20
+ var _b;
21
+ var fieldName = _a[0], property = _a[1];
22
+ var uiField = schema.ui.fields[fieldName];
23
+ // Skip deprecated fields without UI definitions (they won't be rendered anyway)
24
+ if (!uiField && property.deprecated) {
25
+ return;
26
+ }
27
+ if (!uiField) {
28
+ invalidFields.push("".concat(fieldName, ": missing UI field definition"));
29
+ return;
30
+ }
31
+ // Check for unsupported field types
32
+ if (!supportedFieldTypes.includes(uiField.type)) {
33
+ invalidFields.push("".concat(fieldName, ": unsupported field type '").concat(uiField.type, "'"));
34
+ return;
35
+ }
36
+ // Check CHOICE_LIST fields for valid structure (not content)
37
+ if (uiField.type === 'CHOICE_LIST') {
38
+ var hasValidStructure = false;
39
+ if (property.type === 'array' && ((_b = property.items) === null || _b === void 0 ? void 0 : _b.anyOf)) {
40
+ // Check for oneOf arrays in anyOf items for array types (no $ref support)
41
+ hasValidStructure = property.items.anyOf.some(function (anyOfItem) {
42
+ return anyOfItem.oneOf && Array.isArray(anyOfItem.oneOf);
43
+ } // Empty arrays are valid
44
+ );
45
+ }
46
+ else if (property.anyOf) {
47
+ // Check direct anyOf structure for string types (no $ref support)
48
+ hasValidStructure = property.anyOf.some(function (anyOfItem) {
49
+ return anyOfItem.oneOf && Array.isArray(anyOfItem.oneOf);
50
+ } // Empty arrays are valid
51
+ );
52
+ }
53
+ if (!hasValidStructure) {
54
+ invalidFields.push("".concat(fieldName, ": CHOICE_LIST field requires embedded oneOf arrays - $ref not supported"));
55
+ }
56
+ }
57
+ });
58
+ // Validate section conditions
59
+ // Include both top-level and conditional properties
60
+ var conditionalProperties = extractConditionalProperties(schema);
61
+ var fieldNames = __spreadArray(__spreadArray([], Object.keys(schema.json.properties), true), Object.keys(conditionalProperties), true);
62
+ Object.entries(schema.ui.sections).forEach(function (_a) {
63
+ var sectionId = _a[0], section = _a[1];
64
+ if (section.conditions && section.conditions.length > 0) {
65
+ try {
66
+ validateConditions(section.conditions, fieldNames);
67
+ }
68
+ catch (error) {
69
+ invalidFields.push("Section '".concat(sectionId, "': ").concat(error.message));
70
+ }
71
+ }
72
+ });
73
+ if (invalidFields.length > 0) {
74
+ throw new Error("Invalid V2 schema structure: ".concat(invalidFields.join(', ')));
75
+ }
76
+ };
77
+ /**
78
+ * Generates a JSONForms-compatible UI schema from a EarthRanger V2 schema format
79
+ *
80
+ * React Native Optimization:
81
+ * - All layouts are converted to single-column VerticalLayout
82
+ * - Multi-column sections are flattened: leftColumn fields first, then rightColumn fields
83
+ * - Optimized for mobile form rendering
84
+ *
85
+ * @param schema - EarthRanger V2 schema with json and ui properties
86
+ * @returns JSONForms UI schema with single-column VerticalLayout for React Native
87
+ * @throws Error if schema has invalid structure or unsupported field configurations
88
+ */
89
+ export var generateUISchema = function (schema) {
90
+ // Validate schema structure first
91
+ validateV2Schema(schema);
92
+ // Get all visible (non-deprecated) fields
93
+ var visibleFields = getVisibleFields(schema);
94
+ // Group fields by their parent sections
95
+ var fieldsBySection = groupFieldsBySection(visibleFields, schema.ui.sections);
96
+ // Create section layouts in the specified order
97
+ var sectionLayouts = [];
98
+ schema.ui.order.forEach(function (sectionId) {
99
+ var section = schema.ui.sections[sectionId];
100
+ var sectionFields = fieldsBySection[sectionId] || [];
101
+ // Check if section has any content (fields or headers)
102
+ var hasFields = sectionFields.length > 0;
103
+ var hasHeaders = __spreadArray(__spreadArray([], section.leftColumn, true), section.rightColumn, true).some(function (item) { return item.type === 'header' && schema.ui.headers[item.name]; });
104
+ // Only create layout if section is active and has content
105
+ if ((section === null || section === void 0 ? void 0 : section.isActive) && (hasFields || hasHeaders)) {
106
+ var sectionControls = sectionFields.map(function (_a) {
107
+ var name = _a.name, property = _a.property, uiField = _a.uiField;
108
+ return createControl(name, property, uiField, schema);
109
+ });
110
+ var sectionLayout = createSectionLayout(sectionId, section, sectionControls, schema.ui.headers);
111
+ sectionLayouts.push(sectionLayout);
112
+ }
113
+ });
114
+ var uiSchema = {
115
+ type: 'VerticalLayout',
116
+ elements: sectionLayouts
117
+ };
118
+ return uiSchema;
119
+ };
120
+ //# sourceMappingURL=generateUISchema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generateUISchema.js","sourceRoot":"","sources":["../../src/v2/generateUISchema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export { generateUISchema } from './generateUISchema';
2
+ export { buildConditionSchema, buildSchemaBasedCondition, createSectionRule, validateConditions } from './conditions';
3
+ export { extractConditionalProperties } from './utils';
4
+ export type { V2Schema, V2Property, V2UIField, V2Section, V2Header, V2Condition, V2ConditionOperator, JSONFormsUISchema, JSONFormsRule, JSONFormsRuleEffect, JSONFormsSchemaBasedCondition } from '../common/types';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/v2/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAGtD,OAAO,EACL,oBAAoB,EACpB,yBAAyB,EACzB,iBAAiB,EACjB,kBAAkB,EACnB,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAE,4BAA4B,EAAE,MAAM,SAAS,CAAC;AAGvD,YAAY,EACV,QAAQ,EACR,UAAU,EACV,SAAS,EACT,SAAS,EACT,QAAQ,EACR,WAAW,EACX,mBAAmB,EACnB,iBAAiB,EACjB,aAAa,EACb,mBAAmB,EACnB,6BAA6B,EAC9B,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,7 @@
1
+ // V2 API exports - new JSONForms v2 schema format
2
+ export { generateUISchema } from './generateUISchema';
3
+ // Condition utilities
4
+ export { buildConditionSchema, buildSchemaBasedCondition, createSectionRule, validateConditions } from './conditions';
5
+ // Schema utilities
6
+ export { extractConditionalProperties } from './utils';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/v2/index.ts"],"names":[],"mappings":"AAAA,kDAAkD;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,sBAAsB;AACtB,OAAO,EACL,oBAAoB,EACpB,yBAAyB,EACzB,iBAAiB,EACjB,kBAAkB,EACnB,MAAM,cAAc,CAAC;AAEtB,mBAAmB;AACnB,OAAO,EAAE,4BAA4B,EAAE,MAAM,SAAS,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mockData.d.ts","sourceRoot":"","sources":["../../src/v2/mockData.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C,eAAO,MAAM,YAAY,UAoPZ,CAAC;AAEd,eAAO,MAAM,yBAAyB,EAAE,GA+FvC,CAAC"}