@republicroad/seal-editor 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.
- package/LICENSE +13 -0
- package/README.md +127 -0
- package/dist/index.d.ts +2515 -0
- package/dist/index.js +15779 -0
- package/dist/index.js.map +1 -0
- package/dist/schema-BmbNWz7t.js +596 -0
- package/dist/schema-BmbNWz7t.js.map +1 -0
- package/dist/schema.d.ts +868 -0
- package/dist/schema.js +2 -0
- package/dist/style.css +3 -0
- package/package.json +144 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-BmbNWz7t.js","names":[],"sources":["../src/helpers/request-schema/utils.ts","../src/helpers/request-schema/normalize.ts","../src/helpers/request-schema/schema-property.ts","../src/helpers/request-schema/legacy.ts","../src/helpers/request-schema/schema-value.ts","../src/helpers/request-schema/definitions.ts","../src/helpers/request-schema/examples.ts","../src/helpers/schema.ts"],"sourcesContent":["export const hasOwn = (value: object, key: string) => Object.prototype.hasOwnProperty.call(value, key);\n\nexport const isRecord = (value: unknown): value is Record<string, any> =>\n typeof value === 'object' && value !== null && !Array.isArray(value);\n\nexport const cloneRequestExampleValue = (value: unknown): unknown => {\n if (Array.isArray(value)) {\n return value.map((item) => cloneRequestExampleValue(item));\n }\n\n if (isRecord(value)) {\n return Object.entries(value).reduce<Record<string, unknown>>((acc, [key, item]) => {\n acc[key] = cloneRequestExampleValue(item);\n return acc;\n }, {});\n }\n\n return value;\n};\n\nexport const buildDefinitionPath = (parentPath: string, name: string) => (parentPath ? `${parentPath}.${name}` : name);\n\nconst getPathSegments = (path: string) =>\n path\n .split('.')\n .map((segment) => segment.trim())\n .filter(Boolean);\n\nexport const setPathValue = (source: Record<string, unknown>, path: string, value: unknown) => {\n const segments = getPathSegments(path);\n\n if (segments.length === 0) {\n return;\n }\n\n let cursor: Record<string, unknown> = source;\n segments.forEach((segment, index) => {\n if (index === segments.length - 1) {\n cursor[segment] = value;\n return;\n }\n\n if (!isRecord(cursor[segment])) {\n cursor[segment] = {};\n }\n\n cursor = cursor[segment] as Record<string, unknown>;\n });\n};\n\nexport const getPathValue = (source: Record<string, unknown>, path: string): unknown => {\n const segments = getPathSegments(path);\n\n if (segments.length === 0) {\n return undefined;\n }\n\n let cursor: unknown = source;\n\n for (let index = 0; index < segments.length; index += 1) {\n if (!isRecord(cursor)) {\n return undefined;\n }\n\n const segment = segments[index];\n const nextValue = cursor[segment];\n\n if (index === segments.length - 1) {\n return nextValue;\n }\n\n cursor = nextValue;\n }\n\n return undefined;\n};\n\nexport const deletePathValue = (source: Record<string, unknown>, path: string) => {\n const segments = getPathSegments(path);\n\n if (segments.length === 0) {\n return;\n }\n\n const visit = (cursor: Record<string, unknown>, index: number): boolean => {\n const segment = segments[index];\n if (!hasOwn(cursor, segment)) {\n return Object.keys(cursor).length === 0;\n }\n\n if (index === segments.length - 1) {\n delete cursor[segment];\n return Object.keys(cursor).length === 0;\n }\n\n const nextValue = cursor[segment];\n if (!isRecord(nextValue)) {\n delete cursor[segment];\n return Object.keys(cursor).length === 0;\n }\n\n const shouldDeleteCurrent = visit(nextValue, index + 1);\n if (shouldDeleteCurrent) {\n delete cursor[segment];\n }\n\n return Object.keys(cursor).length === 0;\n };\n\n visit(source, 0);\n};\n\nconst mergeRecordWithTargetPrecedence = (\n sourceValue: Record<string, unknown>,\n targetValue: Record<string, unknown>,\n): Record<string, unknown> => {\n const merged = cloneRequestExampleValue(sourceValue) as Record<string, unknown>;\n\n Object.entries(targetValue).forEach(([key, value]) => {\n const sourceEntry = merged[key];\n if (isRecord(sourceEntry) && isRecord(value)) {\n merged[key] = mergeRecordWithTargetPrecedence(sourceEntry, value);\n return;\n }\n\n merged[key] = cloneRequestExampleValue(value);\n });\n\n return merged;\n};\n\nexport const setMergedPathValue = (source: Record<string, unknown>, path: string, value: unknown) => {\n const existingValue = getPathValue(source, path);\n\n if (isRecord(value) && isRecord(existingValue)) {\n setPathValue(source, path, mergeRecordWithTargetPrecedence(value, existingValue));\n return;\n }\n\n setPathValue(source, path, cloneRequestExampleValue(value));\n};\n","import type { RequestDefinitionType, RequestJsonSchema } from './types';\nimport { isRecord } from './utils';\n\nconst invisibleFormatCharacters = /[\\u00ad\\u061c\\u180e\\u200b-\\u200f\\u202a-\\u202e\\u2060-\\u206f\\ufeff]/g;\n\nexport const normalizeRequestFieldKey = (key: string) => key.replace(invisibleFormatCharacters, '').trim();\n\nexport const normalizeRequestJsonKeys = (value: unknown): unknown => {\n if (Array.isArray(value)) {\n return value.map(normalizeRequestJsonKeys);\n }\n\n if (!isRecord(value)) {\n return value;\n }\n\n return Object.entries(value).reduce<Record<string, unknown>>((normalizedValue, [key, item]) => {\n normalizedValue[normalizeRequestFieldKey(key)] = normalizeRequestJsonKeys(item);\n return normalizedValue;\n }, {});\n};\n\nconst normalizeSchemaType = (schema?: RequestJsonSchema | null): string | undefined => {\n if (!schema) {\n return undefined;\n }\n\n if (Array.isArray(schema.type)) {\n return schema.type.find((item) => item !== 'null') ?? schema.type[0];\n }\n\n return schema.type;\n};\n\nconst isDateLikeFormat = (format?: unknown) => {\n if (typeof format !== 'string') {\n return false;\n }\n\n return ['date-time', 'datetime', 'utc-millisec'].includes(format);\n};\n\nexport const normalizeDefinitionType = (schema?: RequestJsonSchema | null): RequestDefinitionType => {\n if (!schema) {\n return 'string';\n }\n\n if (isRecord(schema.properties)) {\n return 'object';\n }\n\n const schemaType = normalizeSchemaType(schema);\n if (schemaType === 'string' && isDateLikeFormat(schema.format)) {\n return 'datetime';\n }\n\n switch (schemaType) {\n case 'number':\n case 'integer':\n return 'number';\n case 'boolean':\n return 'boolean';\n case 'array':\n return 'array';\n case 'object':\n return 'object';\n default:\n return 'string';\n }\n};\n\nconst defaultRequestDateTimeTimezone = '+08:00';\nexport const requestDateTimePattern =\n /^(\\d{4}-\\d{2}-\\d{2})(?:[T\\s](\\d{2}:\\d{2}:\\d{2})(\\.\\d+)?)?(?:\\s*(Z|[+-]\\d{2}:?\\d{2}))?$/;\n\nconst normalizeRequestTimezoneOffset = (timezone?: string) => {\n if (!timezone) {\n return defaultRequestDateTimeTimezone;\n }\n\n if (timezone === 'Z') {\n return 'Z';\n }\n\n if (/^[+-]\\d{2}:\\d{2}$/.test(timezone)) {\n return timezone;\n }\n\n if (/^[+-]\\d{4}$/.test(timezone)) {\n return `${timezone.slice(0, 3)}:${timezone.slice(3)}`;\n }\n\n return defaultRequestDateTimeTimezone;\n};\n\nexport const normalizeRequestDateTimeValue = (value: unknown): unknown => {\n if (typeof value !== 'string') {\n return value;\n }\n\n const trimmed = value.trim();\n if (!trimmed) {\n return trimmed;\n }\n\n const normalizedMatch = trimmed.match(requestDateTimePattern);\n if (!normalizedMatch) {\n return trimmed;\n }\n\n const [, datePart, timePart = '00:00:00', fractionPart = '', timezonePart] = normalizedMatch;\n return `${datePart}T${timePart}${fractionPart}${normalizeRequestTimezoneOffset(timezonePart)}`;\n};\n","import type { RequestDefinition, RequestJsonSchema } from './types';\nimport { isRecord } from './utils';\n\nexport const createSchemaProperty = (\n definition: Pick<RequestDefinition, 'type' | 'description' | 'format' | 'order' | 'defaultValue'>,\n): RequestJsonSchema => {\n const schema: RequestJsonSchema = {};\n\n if (definition.type === 'datetime') {\n schema.type = 'string';\n schema.format = definition.format.trim() || 'date-time';\n } else {\n schema.type = definition.type;\n }\n\n if (definition.description.trim()) {\n schema.description = definition.description.trim();\n }\n\n if (definition.type === 'string' && definition.format.trim()) {\n schema.format = definition.format.trim();\n }\n\n if (definition.type === 'object') {\n schema.properties = schema.properties ?? {};\n }\n\n if (definition.type === 'array' && !schema.items) {\n schema.items = { type: 'string' };\n }\n\n if (definition.defaultValue !== undefined && definition.defaultValue.trim() !== '') {\n schema.default = definition.defaultValue;\n }\n\n schema['x-order'] = definition.order;\n\n return schema;\n};\n\nexport const setSchemaPropertyByPath = (\n properties: Record<string, RequestJsonSchema>,\n key: string,\n definition: Pick<RequestDefinition, 'type' | 'description' | 'format' | 'order' | 'defaultValue'>,\n) => {\n const segments = key\n .split('.')\n .map((segment) => segment.trim())\n .filter(Boolean);\n\n if (segments.length === 0) {\n return;\n }\n\n let cursor = properties;\n segments.forEach((segment, index) => {\n const isLeaf = index === segments.length - 1;\n const existing = isRecord(cursor[segment]) ? (cursor[segment] as RequestJsonSchema) : {};\n\n if (isLeaf) {\n const nextProperty = {\n ...existing,\n ...createSchemaProperty(definition),\n };\n\n if (definition.type === 'object') {\n nextProperty.properties = existing.properties && isRecord(existing.properties) ? existing.properties : {};\n }\n\n if (definition.type === 'array') {\n nextProperty.items = existing.items ?? {};\n }\n\n cursor[segment] = nextProperty;\n return;\n }\n\n cursor[segment] = {\n ...existing,\n type: 'object',\n properties: existing.properties && isRecord(existing.properties) ? existing.properties : {},\n };\n\n cursor = cursor[segment].properties as Record<string, RequestJsonSchema>;\n });\n};\n","import json5 from 'json5';\n\nimport { normalizeDefinitionType, normalizeRequestDateTimeValue } from './normalize';\nimport { createSchemaProperty } from './schema-property';\nimport type { LegacyRequestInput, RequestDefinitionType, RequestJsonSchema } from './types';\nimport { isRecord, setPathValue } from './utils';\n\nconst normalizeLegacyType = (\n type?: string,\n): {\n type: RequestDefinitionType;\n format: string;\n} => {\n switch (type) {\n case 'bool':\n case 'boolean':\n return { type: 'boolean', format: '' };\n case 'number':\n case 'integer':\n return { type: 'number', format: '' };\n case 'array':\n return { type: 'array', format: '' };\n case 'object':\n return { type: 'object', format: '' };\n case 'datetime':\n return { type: 'datetime', format: 'date-time' };\n case 'string':\n return { type: 'string', format: '' };\n default:\n return { type: 'string', format: '' };\n }\n};\n\nexport const parseLegacyInputValue = (input: LegacyRequestInput) => {\n switch (input.type) {\n case 'bool':\n case 'boolean': {\n if (typeof input.value === 'string') {\n return input.value === 'true';\n }\n\n return Boolean(input.value);\n }\n case 'number':\n case 'integer': {\n const numericValue = Number(input.value);\n return Number.isFinite(numericValue) ? numericValue : input.value;\n }\n case 'array':\n if (Array.isArray(input.value)) {\n return input.value;\n }\n\n if (typeof input.value === 'string' && input.value.trim()) {\n try {\n const parsed = json5.parse(input.value);\n return Array.isArray(parsed) ? parsed : [];\n } catch {\n return [];\n }\n }\n\n return [];\n case 'object':\n if (isRecord(input.value)) {\n return input.value;\n }\n\n if (typeof input.value === 'string' && input.value.trim()) {\n try {\n const parsed = json5.parse(input.value);\n return isRecord(parsed) ? parsed : {};\n } catch {\n return {};\n }\n }\n\n return {};\n case 'datetime':\n return normalizeRequestDateTimeValue(input.value ?? '');\n default:\n return input.value ?? '';\n }\n};\n\nconst inferSchemaFromLegacyValue = (value: unknown): RequestJsonSchema => {\n if (Array.isArray(value)) {\n const sampleItem = value.find((item) => item !== undefined && item !== null);\n\n return {\n type: 'array',\n items: sampleItem === undefined ? { type: 'string' } : inferSchemaFromLegacyValue(sampleItem),\n };\n }\n\n if (isRecord(value)) {\n return {\n type: 'object',\n properties: Object.entries(value).reduce<Record<string, RequestJsonSchema>>((acc, [key, itemValue]) => {\n acc[key] = inferSchemaFromLegacyValue(itemValue);\n return acc;\n }, {}),\n };\n }\n\n switch (typeof value) {\n case 'number':\n return { type: 'number' };\n case 'boolean':\n return { type: 'boolean' };\n default:\n return { type: 'string' };\n }\n};\n\nconst buildLegacyInputSchemaProperty = (input: LegacyRequestInput): RequestJsonSchema => {\n const normalizedType = normalizeLegacyType(input.type);\n const parsedValue = parseLegacyInputValue(input);\n const inferredValueSchema = inferSchemaFromLegacyValue(parsedValue);\n const hasExplicitType = typeof input.type === 'string' && input.type.trim().length > 0;\n const resolvedType = hasExplicitType ? normalizedType.type : normalizeDefinitionType(inferredValueSchema);\n const schemaProperty = createSchemaProperty({\n type: resolvedType,\n description: String(input.description ?? input.desc ?? ''),\n format: resolvedType === 'datetime' ? normalizedType.format : '',\n order: 0,\n });\n\n if (resolvedType === 'object') {\n schemaProperty.properties = isRecord(inferredValueSchema.properties)\n ? inferredValueSchema.properties\n : (schemaProperty.properties ?? {});\n }\n\n if (resolvedType === 'array') {\n schemaProperty.items = inferredValueSchema.items ?? schemaProperty.items ?? { type: 'string' };\n }\n\n return schemaProperty;\n};\n\nconst setSchemaPropertySchemaByPath = (\n properties: Record<string, RequestJsonSchema>,\n key: string,\n schemaProperty: RequestJsonSchema,\n) => {\n const segments = key\n .split('.')\n .map((segment) => segment.trim())\n .filter(Boolean);\n\n if (segments.length === 0) {\n return;\n }\n\n let cursor = properties;\n segments.forEach((segment, index) => {\n const isLeaf = index === segments.length - 1;\n const existing = isRecord(cursor[segment]) ? (cursor[segment] as RequestJsonSchema) : {};\n\n if (isLeaf) {\n const nextProperty: RequestJsonSchema = {\n ...existing,\n ...schemaProperty,\n };\n\n if (isRecord(existing.properties) || isRecord(schemaProperty.properties)) {\n nextProperty.properties = {\n ...(isRecord(existing.properties) ? existing.properties : {}),\n ...(isRecord(schemaProperty.properties) ? schemaProperty.properties : {}),\n };\n }\n\n if (schemaProperty.items !== undefined || existing.items !== undefined) {\n nextProperty.items = schemaProperty.items ?? existing.items;\n }\n\n cursor[segment] = nextProperty;\n return;\n }\n\n cursor[segment] = {\n ...existing,\n type: 'object',\n properties: existing.properties && isRecord(existing.properties) ? existing.properties : {},\n };\n\n cursor = cursor[segment].properties as Record<string, RequestJsonSchema>;\n });\n};\n\nexport const buildLegacyInputProperties = (inputs?: LegacyRequestInput[]): Record<string, RequestJsonSchema> => {\n const legacyProperties: Record<string, RequestJsonSchema> = {};\n\n (inputs ?? []).forEach((input) => {\n const key = String(input.key ?? '').trim();\n if (!key) {\n return;\n }\n\n setSchemaPropertySchemaByPath(legacyProperties, key, buildLegacyInputSchemaProperty(input));\n });\n\n return legacyProperties;\n};\n\nexport const legacyInputsToExampleObject = (inputs?: LegacyRequestInput[]): Record<string, unknown> => {\n const example: Record<string, unknown> = {};\n\n (inputs ?? []).forEach((input) => {\n const key = String(input.key ?? '').trim();\n if (!key) {\n return;\n }\n\n setPathValue(example, key, parseLegacyInputValue(input));\n });\n\n return example;\n};\n\nexport const buildRequestSchemaFromLegacyInputs = (\n inputs?: LegacyRequestInput[],\n options?: {\n includeExamples?: boolean;\n },\n): RequestJsonSchema | null => {\n const legacyProperties = buildLegacyInputProperties(inputs);\n\n if (Object.keys(legacyProperties).length === 0) {\n return null;\n }\n\n const nextSchema: RequestJsonSchema = {\n type: 'object',\n properties: legacyProperties,\n };\n\n if (options?.includeExamples) {\n nextSchema.examples = [legacyInputsToExampleObject(inputs)];\n }\n\n return nextSchema;\n};\n","import json5 from 'json5';\n\nimport { buildRequestSchemaFromLegacyInputs } from './legacy';\nimport type { RequestContentLike, RequestJsonSchema } from './types';\nimport { isRecord } from './utils';\n\nexport const stringifyRequestSchemaValue = (schema?: unknown): string => {\n if (!schema) {\n return '';\n }\n\n if (typeof schema === 'string') {\n return schema;\n }\n\n if (isRecord(schema)) {\n return JSON.stringify(schema, null, 2);\n }\n\n return '';\n};\n\nexport const parseRequestSchemaValue = (schema?: unknown): RequestJsonSchema | null => {\n if (!schema) {\n return null;\n }\n\n if (typeof schema === 'string') {\n const trimmed = schema.trim();\n if (!trimmed) {\n return null;\n }\n\n try {\n const parsed = json5.parse(trimmed);\n return isRecord(parsed) ? (parsed as RequestJsonSchema) : null;\n } catch {\n return null;\n }\n }\n\n return isRecord(schema) ? (schema as RequestJsonSchema) : null;\n};\n\nexport const isLegacyRequestSchemaContent = (content?: RequestContentLike | null): boolean =>\n content?.schemaUI !== undefined || (content?.inputs ?? []).length > 0;\n\nexport const getRequestSchemaStorageField = (content?: RequestContentLike | null): 'schema' | 'schemaUI' =>\n isLegacyRequestSchemaContent(content) ? 'schemaUI' : 'schema';\n\nexport const getRequestSchemaSourceValue = (content?: RequestContentLike | null): unknown => {\n if (!content) {\n return undefined;\n }\n\n if (content.schemaUI !== undefined) {\n return content.schemaUI;\n }\n\n if ((content.inputs ?? []).length > 0) {\n return undefined;\n }\n\n return content.schema;\n};\n\nexport const setRequestSchemaValue = (content: RequestContentLike & Record<string, any>, schemaValue: unknown) => {\n const storageField = getRequestSchemaStorageField(content);\n content[storageField] = schemaValue;\n\n if (storageField === 'schemaUI') {\n delete content.schema;\n } else {\n delete content.schemaUI;\n }\n\n delete content.inputs;\n};\n\nexport const resolveRequestSchemaValue = (\n content?: RequestContentLike | null,\n options?: {\n includeExamples?: boolean;\n },\n): RequestJsonSchema | null => {\n const parsedSchema = parseRequestSchemaValue(getRequestSchemaSourceValue(content));\n const hasSchemaProperties = Boolean(parsedSchema && isRecord(parsedSchema.properties));\n const hasSchemaUI = content?.schemaUI !== undefined;\n\n if (parsedSchema && (hasSchemaProperties || hasSchemaUI || (content?.inputs ?? []).length === 0)) {\n return parsedSchema;\n }\n\n return buildRequestSchemaFromLegacyInputs(content?.inputs, options) ?? parsedSchema;\n};\n\nexport const stringifyResolvedRequestSchemaValue = (\n content?: RequestContentLike | null,\n options?: {\n includeExamples?: boolean;\n },\n): string => stringifyRequestSchemaValue(resolveRequestSchemaValue(content, options));\n\nexport const normalizeRequestContentSchemaStorage = <T extends RequestContentLike & Record<string, any>>(\n content: T,\n): T => {\n if (!isLegacyRequestSchemaContent(content)) {\n if (content.schemaUI !== undefined) {\n const nextContent = { ...content };\n delete nextContent.schemaUI;\n return nextContent;\n }\n\n return content;\n }\n\n const nextContent = { ...content };\n const nextSchema = stringifyResolvedRequestSchemaValue(content, { includeExamples: true });\n nextContent.schemaUI = nextSchema;\n delete nextContent.schema;\n delete nextContent.inputs;\n\n return nextContent;\n};\n\nexport const normalizeDecisionGraphRequestSchemaStorage = <T extends { nodes?: any[] }>(graph: T): T => {\n if (!Array.isArray(graph?.nodes)) {\n return graph;\n }\n\n let hasChanges = false;\n const nextNodes = graph.nodes.map((node) => {\n if (node?.type !== 'inputNode' || !isRecord(node?.content)) {\n return node;\n }\n\n const nextContent = normalizeRequestContentSchemaStorage(node.content);\n if (nextContent === node.content) {\n return node;\n }\n\n hasChanges = true;\n return {\n ...node,\n content: nextContent,\n };\n });\n\n return hasChanges\n ? {\n ...graph,\n nodes: nextNodes,\n }\n : graph;\n};\n","import { buildLegacyInputProperties } from './legacy';\nimport { normalizeDefinitionType, normalizeRequestFieldKey } from './normalize';\nimport { setSchemaPropertyByPath } from './schema-property';\nimport { getRequestSchemaSourceValue, parseRequestSchemaValue, stringifyRequestSchemaValue } from './schema-value';\nimport type { RequestContentLike, RequestDefinition, RequestJsonSchema } from './types';\nimport { buildDefinitionPath, hasOwn, isRecord } from './utils';\n\nconst getSchemaPropertyOrder = (schema: RequestJsonSchema | undefined, fallbackOrder: number) => {\n const schemaOrder = schema?.['x-order'];\n return typeof schemaOrder === 'number' && Number.isFinite(schemaOrder) ? schemaOrder : fallbackOrder;\n};\n\nconst getSortedSchemaPropertyEntries = (properties: Record<string, RequestJsonSchema>) =>\n Object.entries(properties)\n .map(([key, propertySchema], index) => ({\n key,\n propertySchema,\n index,\n order: getSchemaPropertyOrder(propertySchema, index),\n }))\n .sort((left, right) => left.order - right.order || left.index - right.index);\n\nconst flattenSchemaProperties = (\n properties: Record<string, RequestJsonSchema>,\n parentPath = '',\n depth = 0,\n): RequestDefinition[] => {\n const definitions: RequestDefinition[] = [];\n\n getSortedSchemaPropertyEntries(properties).forEach(({ key, propertySchema, order }) => {\n const fieldPath = buildDefinitionPath(parentPath, key);\n\n definitions.push({\n id: `schema-property-${fieldPath}`,\n path: fieldPath,\n name: key,\n type: normalizeDefinitionType(propertySchema),\n description: String(propertySchema?.description ?? ''),\n format: String(propertySchema?.format ?? ''),\n order,\n depth,\n parentPath: parentPath || null,\n source: 'schema.properties',\n defaultValue: propertySchema?.default !== undefined ? String(propertySchema.default) : undefined,\n });\n\n if (isRecord(propertySchema?.properties)) {\n definitions.push(...flattenSchemaProperties(propertySchema.properties, fieldPath, depth + 1));\n }\n });\n\n return definitions;\n};\n\nexport const normalizeRequestDefinitionOrders = <T extends Pick<RequestDefinition, 'order' | 'parentPath'>>(\n definitions: T[],\n): T[] => {\n const siblingOrderMap = new Map<string, number>();\n\n return definitions.map((definition) => {\n const siblingKey = definition.parentPath ?? '__root__';\n const nextOrder = siblingOrderMap.get(siblingKey) ?? 0;\n siblingOrderMap.set(siblingKey, nextOrder + 1);\n\n return {\n ...definition,\n order: nextOrder,\n };\n });\n};\n\nexport const getRequestDefinitions = (content?: RequestContentLike | null): RequestDefinition[] => {\n const schema = parseRequestSchemaValue(getRequestSchemaSourceValue(content));\n if (schema && hasOwn(schema, 'properties') && isRecord(schema.properties)) {\n return normalizeRequestDefinitionOrders(flattenSchemaProperties(schema.properties));\n }\n\n const legacyProperties = buildLegacyInputProperties(content?.inputs);\n\n if (Object.keys(legacyProperties).length === 0) {\n return [];\n }\n\n return normalizeRequestDefinitionOrders(\n flattenSchemaProperties(legacyProperties).map((definition) => ({\n ...definition,\n source: 'content.inputs',\n })),\n );\n};\n\nexport const buildRequestSchemaFromDefinitions = (\n schemaValue: unknown,\n definitions: Array<\n Pick<RequestDefinition, 'name' | 'path' | 'type' | 'description' | 'format' | 'order' | 'parentPath'>\n >,\n): string => {\n const currentSchema = parseRequestSchemaValue(schemaValue) ?? {};\n const nextProperties: Record<string, RequestJsonSchema> = {};\n const normalizedDefinitions = normalizeRequestDefinitionOrders(definitions);\n\n normalizedDefinitions.forEach((definition) => {\n if (!normalizeRequestFieldKey(definition.name)) {\n return;\n }\n\n const key = definition.path.split('.').map(normalizeRequestFieldKey).filter(Boolean).join('.');\n if (!key) {\n return;\n }\n\n setSchemaPropertyByPath(nextProperties, key, definition);\n });\n\n const nextSchema: RequestJsonSchema = {\n ...currentSchema,\n type: 'object',\n properties: nextProperties,\n };\n\n return stringifyRequestSchemaValue(nextSchema);\n};\n","import { legacyInputsToExampleObject } from './legacy';\nimport { normalizeRequestDateTimeValue, requestDateTimePattern } from './normalize';\nimport { getRequestSchemaSourceValue, parseRequestSchemaValue, stringifyRequestSchemaValue } from './schema-value';\nimport type {\n RequestContentLike,\n RequestDefinition,\n RequestDefinitionSyncConflict,\n RequestDefinitionType,\n RequestExampleMeta,\n RequestExampleSource,\n RequestJsonSchema,\n} from './types';\nimport {\n cloneRequestExampleValue,\n deletePathValue,\n getPathValue,\n isRecord,\n setMergedPathValue,\n setPathValue,\n} from './utils';\n\nexport const formatRequestExampleSourceName = (index: number, dataLabel = 'Data') => `${dataLabel} ${index + 1}`;\n\nexport const formatJsonDraft = (value: unknown) => {\n if (value === undefined) {\n return '';\n }\n\n if (typeof value === 'string') {\n return value;\n }\n\n return JSON.stringify(value, null, 2);\n};\n\nexport const collectExampleDataPaths = (value: unknown, prefix = '', paths: string[] = []): string[] => {\n if (!isRecord(value)) {\n return paths;\n }\n\n Object.entries(value).forEach(([key, item]) => {\n const path = prefix ? `${prefix}.${key}` : key;\n if (isRecord(item)) {\n collectExampleDataPaths(item, path, paths);\n } else {\n paths.push(path);\n }\n });\n\n return paths;\n};\n\nconst parseRequestDefinitionDefaultValue = (defaultValue: string | undefined, type: RequestDefinitionType): unknown => {\n if (defaultValue === undefined || !defaultValue.trim()) {\n return undefined;\n }\n\n const trimmedDefaultValue = defaultValue.trim();\n\n switch (type) {\n case 'number': {\n const parsedNumber = Number(trimmedDefaultValue);\n return Number.isFinite(parsedNumber) ? parsedNumber : trimmedDefaultValue;\n }\n case 'boolean':\n return trimmedDefaultValue.toLowerCase() === 'true';\n case 'array':\n case 'object': {\n try {\n return JSON.parse(trimmedDefaultValue);\n } catch {\n return trimmedDefaultValue;\n }\n }\n default:\n return trimmedDefaultValue;\n }\n};\n\nconst getDefaultExampleValueByDefinitionType = (type: RequestDefinitionType): unknown => {\n const padNumber = (value: number) => String(value).padStart(2, '0');\n const getDefaultDateTimeValue = () => {\n const now = new Date();\n const year = now.getFullYear();\n const month = padNumber(now.getMonth() + 1);\n const day = padNumber(now.getDate());\n const timezoneOffsetMinutes = -now.getTimezoneOffset();\n const timezoneSign = timezoneOffsetMinutes >= 0 ? '+' : '-';\n const absoluteOffsetMinutes = Math.abs(timezoneOffsetMinutes);\n const offsetHours = padNumber(Math.floor(absoluteOffsetMinutes / 60));\n const offsetMinutes = padNumber(absoluteOffsetMinutes % 60);\n\n return `${year}-${month}-${day}T00:00:00${timezoneSign}${offsetHours}:${offsetMinutes}`;\n };\n\n switch (type) {\n case 'number':\n return 0;\n case 'boolean':\n return false;\n case 'array':\n return [];\n case 'object':\n return {};\n case 'datetime':\n return getDefaultDateTimeValue();\n default:\n return '';\n }\n};\n\nexport const buildRequestExampleTemplateFromDefinitions = (\n definitions: Array<Pick<RequestDefinition, 'name' | 'path' | 'type' | 'defaultValue'>>,\n): Record<string, unknown> => {\n const template: Record<string, unknown> = {};\n const orderedDefinitions = [...definitions]\n .filter((definition) => definition.name.trim() && definition.path.trim())\n .sort((left, right) => left.path.split('.').length - right.path.split('.').length);\n\n orderedDefinitions.forEach((definition) => {\n const definitionDefault = parseRequestDefinitionDefaultValue(definition.defaultValue, definition.type);\n setPathValue(\n template,\n definition.path,\n definitionDefault === undefined ? getDefaultExampleValueByDefinitionType(definition.type) : definitionDefault,\n );\n });\n\n return template;\n};\n\nconst mergeRequestExampleValueWithTemplate = (templateValue: unknown, dataValue: unknown): unknown => {\n if (isRecord(templateValue)) {\n if (!isRecord(dataValue)) {\n return dataValue === undefined ? cloneRequestExampleValue(templateValue) : cloneRequestExampleValue(dataValue);\n }\n\n const mergedObject: Record<string, unknown> = {};\n\n Object.keys(templateValue).forEach((key) => {\n mergedObject[key] = mergeRequestExampleValueWithTemplate(templateValue[key], dataValue[key]);\n });\n\n Object.keys(dataValue).forEach((key) => {\n if (!(key in mergedObject)) {\n mergedObject[key] = cloneRequestExampleValue(dataValue[key]);\n }\n });\n\n return mergedObject;\n }\n\n if (dataValue !== undefined) {\n return cloneRequestExampleValue(dataValue);\n }\n\n return cloneRequestExampleValue(templateValue);\n};\n\nexport const mergeRequestExampleDataWithTemplate = (\n template: Record<string, unknown>,\n data?: Record<string, unknown>,\n): Record<string, unknown> => {\n const normalizedData = isRecord(data) ? data : {};\n return mergeRequestExampleValueWithTemplate(template, normalizedData) as Record<string, unknown>;\n};\n\nexport const normalizeRequestExampleDataByDefinitions = (\n data: Record<string, unknown>,\n definitions: Array<Pick<RequestDefinition, 'path' | 'type'>>,\n): Record<string, unknown> => {\n const normalizedData = cloneRequestExampleValue(data) as Record<string, unknown>;\n\n definitions.forEach((definition) => {\n if (definition.type !== 'datetime') {\n return;\n }\n\n const definitionPath = definition.path.trim();\n if (!definitionPath) {\n return;\n }\n\n const currentValue = getPathValue(normalizedData, definitionPath);\n if (currentValue === undefined) {\n return;\n }\n\n setPathValue(normalizedData, definitionPath, normalizeRequestDateTimeValue(currentValue));\n });\n\n return normalizedData;\n};\n\nconst isSkeletonLikeRequestValue = (value: unknown): boolean => {\n if (value === '' || value === 0 || value === false) {\n return true;\n }\n\n if (Array.isArray(value)) {\n return value.length === 0;\n }\n\n if (isRecord(value)) {\n const entries = Object.values(value);\n return entries.length === 0 || entries.every((entry) => isSkeletonLikeRequestValue(entry));\n }\n\n return false;\n};\n\nconst isRequestValueCompatibleWithDefinition = (\n value: unknown,\n definition: Pick<RequestDefinition, 'type'>,\n): boolean => {\n switch (definition.type) {\n case 'number':\n return typeof value === 'number' && Number.isFinite(value);\n case 'boolean':\n return typeof value === 'boolean';\n case 'array':\n return Array.isArray(value);\n case 'object':\n return isRecord(value);\n case 'datetime':\n return typeof value === 'string' && requestDateTimePattern.test(value.trim());\n default:\n return typeof value === 'string';\n }\n};\n\nexport const getRequestExampleDataDefinitionConflicts = (\n data: Record<string, unknown>,\n definitions: Array<Pick<RequestDefinition, 'name' | 'path' | 'type'>>,\n): RequestDefinitionSyncConflict[] =>\n definitions\n .filter((definition) => definition.name.trim() && definition.path.trim())\n .flatMap((definition) => {\n const currentValue = getPathValue(data, definition.path.trim());\n if (currentValue === undefined || isRequestValueCompatibleWithDefinition(currentValue, definition)) {\n return [];\n }\n\n return [\n {\n path: definition.path,\n nextType: definition.type,\n value: cloneRequestExampleValue(currentValue),\n },\n ];\n });\n\nexport const prepareRequestExampleDataDefinitionSync = (\n data: Record<string, unknown>,\n definitions: Array<Pick<RequestDefinition, 'name' | 'path' | 'type'>>,\n options?: {\n forceResetConflicts?: boolean;\n },\n): {\n data: Record<string, unknown>;\n conflicts: RequestDefinitionSyncConflict[];\n} => {\n const validDefinitions = definitions.filter((definition) => definition.name.trim() && definition.path.trim());\n\n if (validDefinitions.length === 0) {\n return {\n data: cloneRequestExampleValue(data) as Record<string, unknown>,\n conflicts: [],\n };\n }\n\n const forceResetConflicts = options?.forceResetConflicts ?? false;\n const syncedData = buildRequestExampleTemplateFromDefinitions(validDefinitions);\n const conflicts: RequestDefinitionSyncConflict[] = [];\n\n validDefinitions\n .slice()\n .sort((left, right) => left.path.split('.').length - right.path.split('.').length)\n .forEach((definition) => {\n const definitionPath = definition.path.trim();\n if (!definitionPath) {\n return;\n }\n\n const currentValue = getPathValue(data, definitionPath);\n if (currentValue === undefined) {\n return;\n }\n\n const isCompatible = isRequestValueCompatibleWithDefinition(currentValue, definition);\n if (!isCompatible) {\n if (!isSkeletonLikeRequestValue(currentValue) && !forceResetConflicts) {\n conflicts.push({\n path: definitionPath,\n nextType: definition.type,\n value: cloneRequestExampleValue(currentValue),\n });\n return;\n }\n\n return;\n }\n\n if (definition.type === 'object') {\n const hasNestedDefinitions = validDefinitions.some(\n (item) => item.path !== definitionPath && item.path.startsWith(`${definitionPath}.`),\n );\n\n if (!hasNestedDefinitions && isRecord(currentValue)) {\n setPathValue(syncedData, definitionPath, cloneRequestExampleValue(currentValue));\n }\n\n return;\n }\n\n if (definition.type === 'datetime') {\n setPathValue(syncedData, definitionPath, normalizeRequestDateTimeValue(currentValue));\n return;\n }\n\n setPathValue(syncedData, definitionPath, cloneRequestExampleValue(currentValue));\n });\n\n return {\n data: normalizeRequestExampleDataByDefinitions(syncedData, validDefinitions),\n conflicts,\n };\n};\n\nexport const syncRequestExampleDataToDefinitions = (\n data: Record<string, unknown>,\n definitions: Array<Pick<RequestDefinition, 'name' | 'path' | 'type'>>,\n): Record<string, unknown> => {\n return prepareRequestExampleDataDefinitionSync(data, definitions, { forceResetConflicts: true }).data;\n};\n\nexport const mergeRequestExampleDefaultsByDefinitions = (\n data: Record<string, unknown>,\n definitions: Array<Pick<RequestDefinition, 'name' | 'path' | 'type' | 'defaultValue'>>,\n): Record<string, unknown> => {\n const mergedData = cloneRequestExampleValue(data) as Record<string, unknown>;\n\n definitions\n .filter((definition) => definition.name.trim() && definition.path.trim())\n .forEach((definition) => {\n const definitionDefault = parseRequestDefinitionDefaultValue(definition.defaultValue, definition.type);\n if (definitionDefault === undefined) {\n return;\n }\n\n const definitionPath = definition.path.trim();\n const currentValue = getPathValue(mergedData, definitionPath);\n if (currentValue !== undefined && !isSkeletonLikeRequestValue(currentValue)) {\n return;\n }\n\n setPathValue(mergedData, definitionPath, cloneRequestExampleValue(definitionDefault));\n });\n\n return mergedData;\n};\n\nexport const syncRequestExampleDataWithDefinitionChanges = (\n data: Record<string, unknown>,\n previousDefinitions: Array<Pick<RequestDefinition, 'id' | 'path'>>,\n nextDefinitions: Array<Pick<RequestDefinition, 'id' | 'path'>>,\n): Record<string, unknown> => {\n const syncedData = cloneRequestExampleValue(data) as Record<string, unknown>;\n const nextDefinitionById = new Map(nextDefinitions.map((definition) => [definition.id, definition]));\n\n const removedPaths = previousDefinitions\n .filter((definition) => !nextDefinitionById.has(definition.id))\n .map((definition) => definition.path)\n .sort((left, right) => right.split('.').length - left.split('.').length);\n\n removedPaths.forEach((path) => deletePathValue(syncedData, path));\n\n const renamedPaths = previousDefinitions\n .flatMap((definition) => {\n const nextDefinition = nextDefinitionById.get(definition.id);\n if (!nextDefinition || nextDefinition.path === definition.path) {\n return [];\n }\n\n return [\n {\n from: definition.path,\n to: nextDefinition.path,\n },\n ];\n })\n .sort((left, right) => right.from.split('.').length - left.from.split('.').length);\n\n renamedPaths.forEach(({ from, to }) => {\n const value = getPathValue(syncedData, from);\n if (value === undefined) {\n return;\n }\n\n deletePathValue(syncedData, from);\n setMergedPathValue(syncedData, to, value);\n });\n\n return syncedData;\n};\n\nexport const getRequestExampleSources = (\n content?: RequestContentLike | null,\n options?: {\n dataLabel?: string;\n },\n): RequestExampleSource[] => {\n const schema = parseRequestSchemaValue(getRequestSchemaSourceValue(content));\n const dataLabel = options?.dataLabel ?? 'Data';\n const schemaExamples = Array.isArray(schema?.examples) ? schema.examples : [];\n const schemaExamplesMeta = Array.isArray(schema?.['x-examples-meta']) ? schema['x-examples-meta'] : [];\n\n if (schemaExamples.length > 0) {\n return schemaExamples.map((example, index) => {\n const meta = schemaExamplesMeta[index];\n return {\n id: `schema-example-${index}`,\n name: meta?.name?.trim() || formatRequestExampleSourceName(index, dataLabel),\n description: meta?.description?.trim(),\n data: isRecord(example) ? { ...example } : { value: example },\n source: 'schema.examples',\n };\n });\n }\n\n if ((content?.inputs ?? []).length > 0) {\n return [\n {\n id: 'schema-example-0',\n name: formatRequestExampleSourceName(0, dataLabel),\n data: legacyInputsToExampleObject(content?.inputs),\n source: 'schema.examples',\n },\n ];\n }\n\n return [];\n};\n\nexport const updateRequestSchemaExamples = (\n schemaValue: unknown,\n examples: Array<Record<string, unknown>>,\n examplesMeta?: RequestExampleMeta[],\n): string => {\n const currentSchema = parseRequestSchemaValue(schemaValue) ?? {};\n const nextSchema: RequestJsonSchema = {\n ...currentSchema,\n type: 'object',\n examples: examples.map((example) => ({ ...example })),\n };\n\n if (examplesMeta && examplesMeta.length > 0) {\n const hasContent = examplesMeta.some((meta) => meta?.name?.trim() || meta?.description?.trim());\n if (hasContent) {\n nextSchema['x-examples-meta'] = examplesMeta.map((meta) => ({\n name: meta?.name?.trim(),\n description: meta?.description?.trim(),\n }));\n }\n }\n\n return stringifyRequestSchemaValue(nextSchema);\n};\n","import { z } from 'zod';\n\nimport { stringifyRequestSchemaValue } from './request-schema';\n\nexport const DECISION_GRAPH_CONTENT_TYPE = 'application/vnd.gorules.decision';\nconst id = z.string().default(() => crypto.randomUUID());\n\nconst enumValueSchema = z.object({ label: z.string(), value: z.string() });\n\nexport const columnEnumSchema = z.discriminatedUnion('type', [\n z.object({ type: z.literal('inline'), values: z.array(enumValueSchema), loose: z.boolean().optional() }),\n z.object({ type: z.literal('ref'), ref: z.string(), loose: z.boolean().optional() }),\n]);\nexport type ColumnEnum = z.infer<typeof columnEnumSchema>;\n\nexport const columnFieldTypeSchema = z.discriminatedUnion('type', [\n z.object({ type: z.literal('any') }),\n z.object({ type: z.literal('string'), enum: columnEnumSchema.optional() }),\n z.object({ type: z.literal('number') }),\n z.object({ type: z.literal('boolean') }),\n z.object({ type: z.literal('date') }),\n]);\nexport type ColumnFieldType = z.infer<typeof columnFieldTypeSchema>;\n\nexport const COLUMN_FIELD_TYPE_OPTIONS: { value: ColumnFieldType['type']; label: string }[] = [\n { value: 'any', label: 'Any' },\n { value: 'string', label: 'String' },\n { value: 'number', label: 'Number' },\n { value: 'boolean', label: 'Boolean' },\n { value: 'date', label: 'Date' },\n];\n\nexport const outputFieldTypeSchema = z.discriminatedUnion('type', [\n z.object({ type: z.literal('auto') }),\n z.object({ type: z.literal('string'), enum: columnEnumSchema.optional() }),\n z.object({ type: z.literal('string-array'), enum: columnEnumSchema.optional() }),\n z.object({ type: z.literal('number') }),\n z.object({ type: z.literal('boolean') }),\n z.object({ type: z.literal('date') }),\n]);\nexport type OutputFieldType = z.infer<typeof outputFieldTypeSchema>;\n\nexport const OUTPUT_FIELD_TYPE_OPTIONS: { value: OutputFieldType['type']; label: string }[] = [\n { value: 'auto', label: 'Auto' },\n { value: 'string', label: 'Text' },\n { value: 'string-array', label: 'Text[]' },\n { value: 'number', label: 'Number' },\n { value: 'boolean', label: 'Boolean' },\n { value: 'date', label: 'Date' },\n];\n\nexport enum NodeKind {\n Input = 'inputNode',\n Output = 'outputNode',\n DecisionTable = 'decisionTableNode',\n Function = 'functionNode',\n Expression = 'expressionNode',\n Switch = 'switchNode',\n Decision = 'decisionNode',\n}\n\nexport const CustomKind = 'customNode';\n\nconst nodeCommon = z.object({\n id,\n name: z.string(),\n position: z.object({ x: z.number(), y: z.number() }).default({ x: 0, y: 0 }),\n});\n\nexport const inputNodeSchema = z\n .object({\n type: z.literal(NodeKind.Input),\n content: z\n .object({\n schema: z\n .union([z.string(), z.record(z.string(), z.any())])\n .nullish()\n .transform((val) => stringifyRequestSchemaValue(val)),\n expressions: z\n .array(\n z.object({\n id,\n key: z.string().default(''),\n value: z.any().default(''),\n type: z.string().optional(),\n }),\n )\n .default([]),\n inputField: z\n .string()\n .nullish()\n .default(null)\n .transform((val) => (val && val.trim().length > 0 ? val : null)),\n outputPath: z\n .string()\n .nullish()\n .default(null)\n .transform((val) => (val && val.trim().length > 0 ? val : null)),\n })\n .default({\n schema: '',\n expressions: [],\n inputField: null,\n outputPath: null,\n }),\n })\n .merge(nodeCommon);\n\nexport const outputNodeSchema = z\n .object({\n type: z.literal(NodeKind.Output),\n content: z\n .object({\n schema: z\n .string()\n .nullish()\n .transform((val) => val ?? ''),\n })\n .default({\n schema: '',\n }),\n })\n .merge(nodeCommon);\n\nexport const decisionTableSchema = z\n .object({\n type: z.literal(NodeKind.DecisionTable),\n content: z.object({\n hitPolicy: z\n .enum(['first', 'collect'])\n .nullish()\n .transform((val) => val ?? 'first'),\n rules: z\n .array(\n z.record(\n z.string(),\n z\n .string()\n .nullish()\n .transform((val) => val ?? ''),\n ),\n )\n .default([]),\n inputs: z.array(\n z.object({\n id,\n name: z.string().nullish(),\n field: z.string().nullish(),\n defaultValue: z.string().nullish(),\n fieldType: columnFieldTypeSchema.nullish(),\n }),\n ),\n outputs: z.array(\n z.object({\n id,\n name: z.string(),\n field: z.string(),\n defaultValue: z.string().nullish(),\n outputFieldType: outputFieldTypeSchema.nullish(),\n }),\n ),\n passThrough: z\n .boolean()\n .nullish()\n .transform((val) => val ?? false),\n inputField: z\n .string()\n .nullish()\n .default(null)\n .transform((val) => (val && val.trim().length > 0 ? val : null)),\n outputPath: z\n .string()\n .nullish()\n .default(null)\n .transform((val) => (val && val.trim().length > 0 ? val : null)),\n executionMode: z\n .enum(['single', 'loop'])\n .nullish()\n .transform((val) => val ?? 'single'),\n }),\n })\n .merge(nodeCommon);\n\nexport const functionNodeSchema = z\n .object({\n type: z.literal(NodeKind.Function),\n content: z\n .string()\n .or(\n z.object({\n source: z.string().default(''),\n }),\n )\n .nullish(),\n })\n .merge(nodeCommon);\n\nexport const expressionNodeSchema = z\n .object({\n type: z.literal(NodeKind.Expression),\n content: z.object({\n expressions: z.array(\n z.object({\n id,\n key: z.string().default(''),\n value: z.string().default(''),\n }),\n ),\n passThrough: z\n .boolean()\n .nullish()\n .transform((val) => val ?? false),\n inputField: z\n .string()\n .nullish()\n .default(null)\n .transform((val) => (val && val.trim().length > 0 ? val : null)),\n outputPath: z\n .string()\n .nullish()\n .default(null)\n .transform((val) => (val && val.trim().length > 0 ? val : null)),\n executionMode: z\n .enum(['single', 'loop'])\n .nullish()\n .transform((val) => val ?? 'single'),\n }),\n })\n .merge(nodeCommon);\n\nexport const decisionNodeSchema = z\n .object({\n type: z.literal(NodeKind.Decision),\n content: z.object({\n key: z.string(),\n passThrough: z\n .boolean()\n .nullish()\n .transform((val) => val ?? false),\n inputField: z\n .string()\n .nullish()\n .default(null)\n .transform((val) => (val && val.trim().length > 0 ? val : null)),\n outputPath: z\n .string()\n .nullish()\n .default(null)\n .transform((val) => (val && val.trim().length > 0 ? val : null)),\n executionMode: z\n .enum(['single', 'loop'])\n .nullish()\n .transform((val) => val ?? 'single'),\n }),\n })\n .merge(nodeCommon);\n\nexport const switchNodeSchema = z\n .object({\n type: z.literal(NodeKind.Switch),\n content: z.object({\n hitPolicy: z\n .enum(['first', 'collect'])\n .nullish()\n .transform((val) => val ?? 'first'),\n statements: z.array(\n z.object({\n id,\n condition: z\n .string()\n .nullish()\n .transform((val) => val ?? ''),\n isDefault: z\n .boolean()\n .nullish()\n .transform((val) => val ?? false),\n }),\n ),\n }),\n })\n .merge(nodeCommon);\n\nexport const customNodeSchema = z\n .object({\n type: z.literal(CustomKind),\n content: z.object({\n kind: z.string(),\n config: z.any(),\n }),\n })\n .merge(nodeCommon);\n\nexport const anyNodeSchema = z\n .object({\n type: z.string().refine((val) => !(Object.values(NodeKind) as string[]).includes(val), {\n message: 'Invalid type',\n }),\n content: z.any().nullish(),\n })\n .merge(nodeCommon);\n\nexport const nodeSchema = z\n .discriminatedUnion('type', [\n decisionNodeSchema,\n expressionNodeSchema,\n functionNodeSchema,\n decisionTableSchema,\n switchNodeSchema,\n customNodeSchema,\n inputNodeSchema,\n outputNodeSchema,\n ])\n .or(anyNodeSchema);\n\nexport const edgeSchema = z.object({\n id: z.string(),\n sourceId: z.string(),\n targetId: z.string(),\n sourceHandle: z.string().nullish(),\n type: z.enum(['edge']),\n});\n\nexport const validationSchema = z.object({\n inputSchema: z.any().nullish().default(null),\n outputSchema: z.any().nullish().default(null),\n});\n\nexport const decisionModelSchema = z.object({\n nodes: z.array(nodeSchema).default([]),\n edges: z.array(edgeSchema).default([]),\n});\n"],"mappings":"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"}
|