@earthranger/react-native-jsonforms-formatter 2.0.0-beta.2 → 2.0.0-beta.21
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 +6 -0
- package/dist/bundle.js +1 -1
- package/dist/common/schemaUtils.d.ts +23 -0
- package/dist/common/schemaUtils.d.ts.map +1 -0
- package/dist/common/schemaUtils.js +56 -0
- package/dist/common/schemaUtils.js.map +1 -0
- package/dist/{src/common → common}/types.d.ts +24 -0
- package/dist/common/types.d.ts.map +1 -0
- package/dist/common/types.js +2 -0
- package/dist/common/types.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/v1/generateUISchema.d.ts.map +1 -0
- package/dist/v1/generateUISchema.js +181 -0
- package/dist/v1/generateUISchema.js.map +1 -0
- package/dist/v1/index.d.ts.map +1 -0
- package/dist/v1/index.js +3 -0
- package/dist/v1/index.js.map +1 -0
- package/dist/v1/utils/utils.d.ts.map +1 -0
- package/dist/v1/utils/utils.js +149 -0
- package/dist/v1/utils/utils.js.map +1 -0
- package/dist/v1/validateJsonSchema.d.ts.map +1 -0
- package/dist/v1/validateJsonSchema.js +286 -0
- package/dist/v1/validateJsonSchema.js.map +1 -0
- package/dist/v1.d.ts.map +1 -0
- package/dist/v1.js +3 -0
- package/dist/v1.js.map +1 -0
- package/dist/v2/conditions.d.ts +51 -0
- package/dist/v2/conditions.d.ts.map +1 -0
- package/dist/v2/conditions.js +174 -0
- package/dist/v2/conditions.js.map +1 -0
- package/dist/{src/v2 → v2}/generateUISchema.d.ts +1 -0
- package/dist/v2/generateUISchema.d.ts.map +1 -0
- package/dist/v2/generateUISchema.js +119 -0
- package/dist/v2/generateUISchema.js.map +1 -0
- package/dist/v2/index.d.ts +5 -0
- package/dist/v2/index.d.ts.map +1 -0
- package/dist/v2/index.js +7 -0
- package/dist/v2/index.js.map +1 -0
- package/dist/v2/mockData.d.ts.map +1 -0
- package/dist/v2/mockData.js +343 -0
- package/dist/v2/mockData.js.map +1 -0
- package/dist/{src/v2 → v2}/utils.d.ts +9 -4
- package/dist/v2/utils.d.ts.map +1 -0
- package/dist/v2/utils.js +298 -0
- package/dist/v2/utils.js.map +1 -0
- package/package.json +16 -10
- package/dist/src/common/types.d.ts.map +0 -1
- package/dist/src/index.d.ts +0 -4
- package/dist/src/index.d.ts.map +0 -1
- package/dist/src/v1/generateUISchema.d.ts.map +0 -1
- package/dist/src/v1/index.d.ts.map +0 -1
- package/dist/src/v1/utils/utils.d.ts.map +0 -1
- package/dist/src/v1/validateJsonSchema.d.ts.map +0 -1
- package/dist/src/v1.d.ts.map +0 -1
- package/dist/src/v2/generateUISchema.d.ts.map +0 -1
- package/dist/src/v2/index.d.ts +0 -3
- package/dist/src/v2/index.d.ts.map +0 -1
- package/dist/src/v2/mockData.d.ts.map +0 -1
- package/dist/src/v2/utils.d.ts.map +0 -1
- /package/dist/{src/v1 → v1}/generateUISchema.d.ts +0 -0
- /package/dist/{src/v1 → v1}/index.d.ts +0 -0
- /package/dist/{src/v1 → v1}/utils/utils.d.ts +0 -0
- /package/dist/{src/v1 → v1}/validateJsonSchema.d.ts +0 -0
- /package/dist/{src/v1.d.ts → v1.d.ts} +0 -0
- /package/dist/{src/v2 → v2}/mockData.d.ts +0 -0
|
@@ -0,0 +1,174 @@
|
|
|
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
|
+
*/
|
|
14
|
+
export var buildDoesNotHaveInputSchema = function () {
|
|
15
|
+
return {
|
|
16
|
+
not: buildHasInputSchema(),
|
|
17
|
+
};
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Builds a JSON Schema for the HAS_INPUT operator.
|
|
21
|
+
* Matches when the field has meaningful input (non-null, non-empty).
|
|
22
|
+
*/
|
|
23
|
+
export var buildHasInputSchema = function () {
|
|
24
|
+
return {
|
|
25
|
+
allOf: [
|
|
26
|
+
{ not: { type: 'null' } },
|
|
27
|
+
{
|
|
28
|
+
anyOf: [
|
|
29
|
+
{ type: 'array', minItems: 1 },
|
|
30
|
+
{ type: 'boolean' },
|
|
31
|
+
{ type: 'number' },
|
|
32
|
+
{ type: 'object', minProperties: 1 },
|
|
33
|
+
{ type: 'string', minLength: 1 },
|
|
34
|
+
],
|
|
35
|
+
},
|
|
36
|
+
],
|
|
37
|
+
};
|
|
38
|
+
};
|
|
39
|
+
/**
|
|
40
|
+
* Builds a JSON Schema for the INPUT_IS_EXACTLY operator.
|
|
41
|
+
* Matches when the field value equals the specified value exactly.
|
|
42
|
+
* Uses `enum` for simple matching without type constraints.
|
|
43
|
+
*/
|
|
44
|
+
export var buildInputIsExactlySchema = function (value) {
|
|
45
|
+
if (value === null) {
|
|
46
|
+
return { type: 'null' };
|
|
47
|
+
}
|
|
48
|
+
if (typeof value === 'boolean') {
|
|
49
|
+
return { const: value };
|
|
50
|
+
}
|
|
51
|
+
if (typeof value === 'number') {
|
|
52
|
+
// Allow both number and string representation
|
|
53
|
+
return { enum: [value, String(value)] };
|
|
54
|
+
}
|
|
55
|
+
// String value - also allow numeric match if the string is a valid number
|
|
56
|
+
var numValue = Number(value);
|
|
57
|
+
if (!isNaN(numValue) && value !== '') {
|
|
58
|
+
return { enum: [numValue, value] };
|
|
59
|
+
}
|
|
60
|
+
return { const: value };
|
|
61
|
+
};
|
|
62
|
+
var VALID_OPERATORS = [
|
|
63
|
+
'CONTAINS',
|
|
64
|
+
'DOES_NOT_HAVE_INPUT',
|
|
65
|
+
'HAS_INPUT',
|
|
66
|
+
'INPUT_IS_EXACTLY',
|
|
67
|
+
];
|
|
68
|
+
/**
|
|
69
|
+
* Gets the operator schema for a condition (without field wrapper).
|
|
70
|
+
* Used internally by buildConditionSchema and buildSchemaBasedCondition.
|
|
71
|
+
*/
|
|
72
|
+
export var getOperatorSchema = function (condition) {
|
|
73
|
+
switch (condition.operator) {
|
|
74
|
+
case 'CONTAINS':
|
|
75
|
+
if (condition.value === undefined || condition.value === null) {
|
|
76
|
+
throw new Error("CONTAINS operator requires a value for condition '".concat(condition.id, "'"));
|
|
77
|
+
}
|
|
78
|
+
return buildContainsSchema(String(condition.value));
|
|
79
|
+
case 'DOES_NOT_HAVE_INPUT':
|
|
80
|
+
return buildDoesNotHaveInputSchema();
|
|
81
|
+
case 'HAS_INPUT':
|
|
82
|
+
return buildHasInputSchema();
|
|
83
|
+
case 'INPUT_IS_EXACTLY':
|
|
84
|
+
if (condition.value === undefined) {
|
|
85
|
+
throw new Error("INPUT_IS_EXACTLY operator requires a value for condition '".concat(condition.id, "'"));
|
|
86
|
+
}
|
|
87
|
+
return buildInputIsExactlySchema(condition.value);
|
|
88
|
+
default:
|
|
89
|
+
throw new Error("Unknown operator '".concat(condition.operator, "' in condition '").concat(condition.id, "'"));
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
/**
|
|
93
|
+
* Builds a JSON Schema for a single condition based on its operator.
|
|
94
|
+
* Wraps the operator schema in a properties structure for root scope validation.
|
|
95
|
+
*/
|
|
96
|
+
export var buildConditionSchema = function (condition) {
|
|
97
|
+
var _a;
|
|
98
|
+
var operatorSchema = getOperatorSchema(condition);
|
|
99
|
+
// Wrap in properties structure for the field (used with scope: "#")
|
|
100
|
+
return {
|
|
101
|
+
properties: (_a = {},
|
|
102
|
+
_a[condition.field] = operatorSchema,
|
|
103
|
+
_a),
|
|
104
|
+
required: [condition.field],
|
|
105
|
+
};
|
|
106
|
+
};
|
|
107
|
+
/**
|
|
108
|
+
* Builds a JSONForms schema-based condition from one or more V2 conditions.
|
|
109
|
+
*
|
|
110
|
+
* For single conditions: Uses field-specific scope (e.g., "#/properties/fieldName")
|
|
111
|
+
* which is the standard JSONForms pattern and most reliable across implementations.
|
|
112
|
+
*
|
|
113
|
+
* For multiple conditions: Uses root scope "#" with allOf combining property schemas.
|
|
114
|
+
*/
|
|
115
|
+
export var buildSchemaBasedCondition = function (conditions) {
|
|
116
|
+
if (conditions.length === 0) {
|
|
117
|
+
throw new Error('At least one condition is required');
|
|
118
|
+
}
|
|
119
|
+
if (conditions.length === 1) {
|
|
120
|
+
// Single condition: use field-specific scope for better compatibility
|
|
121
|
+
var condition = conditions[0];
|
|
122
|
+
return {
|
|
123
|
+
scope: "#/properties/".concat(condition.field),
|
|
124
|
+
schema: getOperatorSchema(condition),
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
// Multiple conditions: use root scope with allOf
|
|
128
|
+
var allOfSchemas = conditions.map(function (condition) {
|
|
129
|
+
return buildConditionSchema(condition);
|
|
130
|
+
});
|
|
131
|
+
return {
|
|
132
|
+
scope: '#',
|
|
133
|
+
schema: {
|
|
134
|
+
allOf: allOfSchemas,
|
|
135
|
+
},
|
|
136
|
+
};
|
|
137
|
+
};
|
|
138
|
+
/**
|
|
139
|
+
* Creates a complete JSONForms rule for a section with the given conditions.
|
|
140
|
+
* Uses SHOW effect by default.
|
|
141
|
+
*/
|
|
142
|
+
export var createSectionRule = function (conditions) {
|
|
143
|
+
return {
|
|
144
|
+
effect: 'SHOW',
|
|
145
|
+
condition: buildSchemaBasedCondition(conditions),
|
|
146
|
+
};
|
|
147
|
+
};
|
|
148
|
+
/**
|
|
149
|
+
* Validates conditions for a section.
|
|
150
|
+
* Throws an error if any condition is invalid.
|
|
151
|
+
*/
|
|
152
|
+
export var validateConditions = function (conditions, fieldNames) {
|
|
153
|
+
for (var _i = 0, conditions_1 = conditions; _i < conditions_1.length; _i++) {
|
|
154
|
+
var condition = conditions_1[_i];
|
|
155
|
+
// Validate operator
|
|
156
|
+
if (!VALID_OPERATORS.includes(condition.operator)) {
|
|
157
|
+
throw new Error("Invalid operator '".concat(condition.operator, "'"));
|
|
158
|
+
}
|
|
159
|
+
// Validate field exists
|
|
160
|
+
if (!fieldNames.includes(condition.field)) {
|
|
161
|
+
throw new Error("Unknown field '".concat(condition.field, "'"));
|
|
162
|
+
}
|
|
163
|
+
// Validate required values
|
|
164
|
+
if (condition.operator === 'CONTAINS' &&
|
|
165
|
+
(condition.value === undefined || condition.value === null)) {
|
|
166
|
+
throw new Error("CONTAINS operator requires a value");
|
|
167
|
+
}
|
|
168
|
+
if (condition.operator === 'INPUT_IS_EXACTLY' &&
|
|
169
|
+
condition.value === undefined) {
|
|
170
|
+
throw new Error("INPUT_IS_EXACTLY operator requires a value");
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
};
|
|
174
|
+
//# 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;AAmFzB;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,gBAAgB,WAAY,QAAQ,KAAG,iBAuCnD,CAAC"}
|
|
@@ -0,0 +1,119 @@
|
|
|
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
|
+
var conditionalProperties = extractConditionalProperties(schema);
|
|
60
|
+
var fieldNames = __spreadArray(__spreadArray([], Object.keys(schema.json.properties), true), Object.keys(conditionalProperties), true);
|
|
61
|
+
Object.entries(schema.ui.sections).forEach(function (_a) {
|
|
62
|
+
var sectionId = _a[0], section = _a[1];
|
|
63
|
+
if (section.conditions && section.conditions.length > 0) {
|
|
64
|
+
try {
|
|
65
|
+
validateConditions(section.conditions, fieldNames);
|
|
66
|
+
}
|
|
67
|
+
catch (error) {
|
|
68
|
+
invalidFields.push("Section '".concat(sectionId, "': ").concat(error.message));
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
if (invalidFields.length > 0) {
|
|
73
|
+
throw new Error("Invalid V2 schema structure: ".concat(invalidFields.join(', ')));
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
/**
|
|
77
|
+
* Generates a JSONForms-compatible UI schema from a EarthRanger V2 schema format
|
|
78
|
+
*
|
|
79
|
+
* React Native Optimization:
|
|
80
|
+
* - All layouts are converted to single-column VerticalLayout
|
|
81
|
+
* - Multi-column sections are flattened: leftColumn fields first, then rightColumn fields
|
|
82
|
+
* - Optimized for mobile form rendering
|
|
83
|
+
*
|
|
84
|
+
* @param schema - EarthRanger V2 schema with json and ui properties
|
|
85
|
+
* @returns JSONForms UI schema with single-column VerticalLayout for React Native
|
|
86
|
+
* @throws Error if schema has invalid structure or unsupported field configurations
|
|
87
|
+
*/
|
|
88
|
+
export var generateUISchema = function (schema) {
|
|
89
|
+
// Validate schema structure first
|
|
90
|
+
validateV2Schema(schema);
|
|
91
|
+
// Get all visible (non-deprecated) fields
|
|
92
|
+
var visibleFields = getVisibleFields(schema);
|
|
93
|
+
// Group fields by their parent sections
|
|
94
|
+
var fieldsBySection = groupFieldsBySection(visibleFields, schema.ui.sections);
|
|
95
|
+
// Create section layouts in the specified order
|
|
96
|
+
var sectionLayouts = [];
|
|
97
|
+
schema.ui.order.forEach(function (sectionId) {
|
|
98
|
+
var section = schema.ui.sections[sectionId];
|
|
99
|
+
var sectionFields = fieldsBySection[sectionId] || [];
|
|
100
|
+
// Check if section has any content (fields or headers)
|
|
101
|
+
var hasFields = sectionFields.length > 0;
|
|
102
|
+
var hasHeaders = __spreadArray(__spreadArray([], section.leftColumn, true), section.rightColumn, true).some(function (item) { return item.type === 'header' && schema.ui.headers[item.name]; });
|
|
103
|
+
// Only create layout if section is active and has content
|
|
104
|
+
if ((section === null || section === void 0 ? void 0 : section.isActive) && (hasFields || hasHeaders)) {
|
|
105
|
+
var sectionControls = sectionFields.map(function (_a) {
|
|
106
|
+
var name = _a.name, property = _a.property, uiField = _a.uiField;
|
|
107
|
+
return createControl(name, property, uiField, schema);
|
|
108
|
+
});
|
|
109
|
+
var sectionLayout = createSectionLayout(sectionId, section, sectionControls, schema.ui.headers);
|
|
110
|
+
sectionLayouts.push(sectionLayout);
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
var uiSchema = {
|
|
114
|
+
type: 'VerticalLayout',
|
|
115
|
+
elements: sectionLayouts
|
|
116
|
+
};
|
|
117
|
+
return uiSchema;
|
|
118
|
+
};
|
|
119
|
+
//# 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"}
|
package/dist/v2/index.js
ADDED
|
@@ -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"}
|