@objectstack/spec 0.2.0 → 0.3.1
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 +127 -5
- package/dist/ai/conversation.zod.d.ts +1059 -0
- package/dist/ai/conversation.zod.d.ts.map +1 -0
- package/dist/ai/conversation.zod.js +248 -0
- package/dist/ai/cost.zod.d.ts +2025 -0
- package/dist/ai/cost.zod.d.ts.map +1 -0
- package/dist/ai/cost.zod.js +324 -0
- package/dist/ai/index.d.ts +22 -0
- package/dist/ai/index.d.ts.map +1 -0
- package/dist/ai/index.js +37 -0
- package/dist/ai/model-registry.zod.d.ts +1389 -0
- package/dist/ai/model-registry.zod.d.ts.map +1 -0
- package/dist/ai/model-registry.zod.js +164 -0
- package/dist/ai/nlq.zod.d.ts +1126 -0
- package/dist/ai/nlq.zod.d.ts.map +1 -0
- package/dist/ai/nlq.zod.js +246 -0
- package/dist/ai/predictive.zod.d.ts +838 -0
- package/dist/ai/predictive.zod.d.ts.map +1 -0
- package/dist/ai/predictive.zod.js +244 -0
- package/dist/ai/rag-pipeline.zod.d.ts +1034 -0
- package/dist/ai/rag-pipeline.zod.d.ts.map +1 -0
- package/dist/ai/rag-pipeline.zod.js +244 -0
- package/dist/ai/workflow-automation.zod.d.ts +590 -0
- package/dist/ai/workflow-automation.zod.d.ts.map +1 -0
- package/dist/ai/workflow-automation.zod.js +197 -0
- package/dist/api/contract.zod.d.ts +22 -22
- package/dist/api/index.d.ts +9 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +24 -0
- package/dist/data/field.zod.d.ts +409 -4
- package/dist/data/field.zod.d.ts.map +1 -1
- package/dist/data/field.zod.js +28 -2
- package/dist/data/index.d.ts +21 -0
- package/dist/data/index.d.ts.map +1 -0
- package/dist/data/index.js +36 -0
- package/dist/data/mapping.zod.d.ts +6 -6
- package/dist/data/object.zod.d.ts +80 -10
- package/dist/data/object.zod.d.ts.map +1 -1
- package/dist/data/query.zod.d.ts +386 -3
- package/dist/data/query.zod.d.ts.map +1 -1
- package/dist/data/query.zod.js +386 -3
- package/dist/data/validation.zod.d.ts +349 -0
- package/dist/data/validation.zod.d.ts.map +1 -1
- package/dist/data/validation.zod.js +395 -0
- package/dist/data/workflow.zod.d.ts +809 -18
- package/dist/data/workflow.zod.d.ts.map +1 -1
- package/dist/data/workflow.zod.js +115 -7
- package/dist/index.d.ts +36 -41
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +64 -49
- package/dist/system/api.zod.d.ts +4 -4
- package/dist/system/audit.zod.d.ts +1172 -0
- package/dist/system/audit.zod.d.ts.map +1 -0
- package/dist/system/audit.zod.js +596 -0
- package/dist/system/auth-protocol.d.ts +175 -0
- package/dist/system/auth-protocol.d.ts.map +1 -0
- package/dist/system/auth-protocol.js +60 -0
- package/dist/system/auth.zod.d.ts +1089 -57
- package/dist/system/auth.zod.d.ts.map +1 -1
- package/dist/system/auth.zod.js +135 -1
- package/dist/system/driver.zod.d.ts +4 -4
- package/dist/system/events.zod.d.ts +177 -0
- package/dist/system/events.zod.d.ts.map +1 -0
- package/dist/system/events.zod.js +51 -0
- package/dist/system/identity.zod.d.ts +234 -180
- package/dist/system/identity.zod.d.ts.map +1 -1
- package/dist/system/identity.zod.js +168 -51
- package/dist/system/index.d.ts +33 -0
- package/dist/system/index.d.ts.map +1 -0
- package/dist/system/index.js +48 -0
- package/dist/system/job.zod.d.ts +237 -0
- package/dist/system/job.zod.d.ts.map +1 -0
- package/dist/system/job.zod.js +82 -0
- package/dist/system/organization.zod.d.ts +179 -0
- package/dist/system/organization.zod.d.ts.map +1 -0
- package/dist/system/organization.zod.js +129 -0
- package/dist/system/realtime.zod.d.ts +135 -0
- package/dist/system/realtime.zod.d.ts.map +1 -0
- package/dist/system/realtime.zod.js +83 -0
- package/dist/system/tenant.zod.d.ts +1151 -0
- package/dist/system/tenant.zod.d.ts.map +1 -0
- package/dist/system/tenant.zod.js +498 -0
- package/dist/system/webhook.zod.d.ts +2 -2
- package/dist/ui/action.zod.d.ts +10 -10
- package/dist/ui/index.d.ts +17 -0
- package/dist/ui/index.d.ts.map +1 -0
- package/dist/ui/index.js +32 -0
- package/dist/ui/theme.zod.d.ts +18 -18
- package/dist/ui/widget.zod.d.ts +40 -5
- package/dist/ui/widget.zod.d.ts.map +1 -1
- package/json-schema/README.md +127 -0
- package/json-schema/ai/AITask.json +123 -0
- package/json-schema/ai/AITaskType.json +21 -0
- package/json-schema/ai/AIWorkflowAutomation.json +379 -0
- package/json-schema/ai/AIWorkflowExecutionResult.json +105 -0
- package/json-schema/ai/AIWorkflowTrigger.json +18 -0
- package/json-schema/ai/BatchAIWorkflowExecution.json +48 -0
- package/json-schema/ai/BillingPeriod.json +18 -0
- package/json-schema/ai/BudgetLimit.json +111 -0
- package/json-schema/ai/BudgetStatus.json +91 -0
- package/json-schema/ai/BudgetType.json +17 -0
- package/json-schema/ai/ChunkingStrategy.json +133 -0
- package/json-schema/ai/ConversationAnalytics.json +86 -0
- package/json-schema/ai/ConversationContext.json +48 -0
- package/json-schema/ai/ConversationMessage.json +209 -0
- package/json-schema/ai/ConversationSession.json +458 -0
- package/json-schema/ai/ConversationSummary.json +73 -0
- package/json-schema/ai/CostAlert.json +107 -0
- package/json-schema/ai/CostAlertType.json +16 -0
- package/json-schema/ai/CostAnalytics.json +589 -0
- package/json-schema/ai/CostBreakdownDimension.json +20 -0
- package/json-schema/ai/CostBreakdownEntry.json +60 -0
- package/json-schema/ai/CostEntry.json +106 -0
- package/json-schema/ai/CostMetricType.json +17 -0
- package/json-schema/ai/CostOptimizationRecommendation.json +100 -0
- package/json-schema/ai/CostQueryFilters.json +112 -0
- package/json-schema/ai/CostReport.json +964 -0
- package/json-schema/ai/DocumentChunk.json +97 -0
- package/json-schema/ai/DocumentLoaderConfig.json +69 -0
- package/json-schema/ai/DocumentMetadata.json +61 -0
- package/json-schema/ai/EmbeddingModel.json +57 -0
- package/json-schema/ai/Entity.json +55 -0
- package/json-schema/ai/EvaluationMetrics.json +64 -0
- package/json-schema/ai/FieldSynonymConfig.json +39 -0
- package/json-schema/ai/FunctionCall.json +28 -0
- package/json-schema/ai/Hyperparameters.json +80 -0
- package/json-schema/ai/MessageContent.json +46 -0
- package/json-schema/ai/MessageContentType.json +16 -0
- package/json-schema/ai/MessagePruningEvent.json +92 -0
- package/json-schema/ai/MessageRole.json +16 -0
- package/json-schema/ai/ModelCapability.json +47 -0
- package/json-schema/ai/ModelConfig.json +181 -0
- package/json-schema/ai/ModelDrift.json +73 -0
- package/json-schema/ai/ModelFeature.json +71 -0
- package/json-schema/ai/ModelLimits.json +45 -0
- package/json-schema/ai/ModelPricing.json +28 -0
- package/json-schema/ai/ModelProvider.json +19 -0
- package/json-schema/ai/ModelRegistry.json +427 -0
- package/json-schema/ai/ModelRegistryEntry.json +239 -0
- package/json-schema/ai/ModelSelectionCriteria.json +50 -0
- package/json-schema/ai/NLQAnalytics.json +106 -0
- package/json-schema/ai/NLQFieldMapping.json +40 -0
- package/json-schema/ai/NLQModelConfig.json +78 -0
- package/json-schema/ai/NLQParseResult.json +252 -0
- package/json-schema/ai/NLQRequest.json +110 -0
- package/json-schema/ai/NLQResponse.json +288 -0
- package/json-schema/ai/NLQTrainingExample.json +120 -0
- package/json-schema/ai/PostProcessingAction.json +41 -0
- package/json-schema/ai/PredictionRequest.json +39 -0
- package/json-schema/ai/PredictionResult.json +82 -0
- package/json-schema/ai/PredictiveModel.json +445 -0
- package/json-schema/ai/PredictiveModelType.json +18 -0
- package/json-schema/ai/PromptTemplate.json +163 -0
- package/json-schema/ai/PromptVariable.json +56 -0
- package/json-schema/ai/QueryContext.json +72 -0
- package/json-schema/ai/QueryIntent.json +21 -0
- package/json-schema/ai/QueryTemplate.json +81 -0
- package/json-schema/ai/RAGPipelineConfig.json +552 -0
- package/json-schema/ai/RAGPipelineStatus.json +66 -0
- package/json-schema/ai/RAGQueryRequest.json +64 -0
- package/json-schema/ai/RAGQueryResponse.json +108 -0
- package/json-schema/ai/RerankingConfig.json +34 -0
- package/json-schema/ai/RetrievalStrategy.json +121 -0
- package/json-schema/ai/Timeframe.json +68 -0
- package/json-schema/ai/TokenBudgetConfig.json +92 -0
- package/json-schema/ai/TokenBudgetStrategy.json +16 -0
- package/json-schema/ai/TokenUsageStats.json +66 -0
- package/json-schema/ai/ToolCall.json +49 -0
- package/json-schema/ai/TrainingConfig.json +88 -0
- package/json-schema/ai/VectorStoreConfig.json +82 -0
- package/json-schema/ai/VectorStoreProvider.json +21 -0
- package/json-schema/ai/WorkflowFieldCondition.json +33 -0
- package/json-schema/ai/WorkflowSchedule.json +51 -0
- package/json-schema/data/CustomScriptAction.json +49 -0
- package/json-schema/{Field.json → data/Field.json} +50 -1
- package/json-schema/{FieldType.json → data/FieldType.json} +4 -1
- package/json-schema/data/HttpCallAction.json +81 -0
- package/json-schema/{Object.json → data/Object.json} +50 -1
- package/json-schema/data/PushNotificationAction.json +59 -0
- package/json-schema/data/SlackMessageAction.json +45 -0
- package/json-schema/data/SmsNotificationAction.json +50 -0
- package/json-schema/data/TaskCreationAction.json +59 -0
- package/json-schema/data/TeamsMessageAction.json +45 -0
- package/json-schema/data/WebhookTriggerAction.json +58 -0
- package/json-schema/data/WorkflowAction.json +465 -0
- package/json-schema/data/WorkflowRule.json +509 -0
- package/json-schema/system/Account.json +87 -0
- package/json-schema/system/AuditConfig.json +587 -0
- package/json-schema/system/AuditEvent.json +232 -0
- package/json-schema/system/AuditEventActor.json +48 -0
- package/json-schema/system/AuditEventChange.json +25 -0
- package/json-schema/system/AuditEventFilter.json +127 -0
- package/json-schema/system/AuditEventSeverity.json +19 -0
- package/json-schema/system/AuditEventTarget.json +33 -0
- package/json-schema/system/AuditEventType.json +53 -0
- package/json-schema/system/AuditRetentionPolicy.json +73 -0
- package/json-schema/system/AuditStorageConfig.json +60 -0
- package/json-schema/{AuthConfig.json → system/AuthConfig.json} +235 -0
- package/json-schema/system/CronSchedule.json +29 -0
- package/json-schema/system/DatabaseLevelIsolationStrategy.json +139 -0
- package/json-schema/system/DatabaseMapping.json +48 -0
- package/json-schema/system/EnterpriseAuthConfig.json +172 -0
- package/json-schema/system/Event.json +52 -0
- package/json-schema/system/EventHandler.json +29 -0
- package/json-schema/system/EventMetadata.json +33 -0
- package/json-schema/system/EventPersistence.json +25 -0
- package/json-schema/system/EventRoute.json +27 -0
- package/json-schema/system/IntervalSchedule.json +25 -0
- package/json-schema/system/Invitation.json +69 -0
- package/json-schema/system/InvitationStatus.json +15 -0
- package/json-schema/system/Job.json +127 -0
- package/json-schema/system/JobExecution.json +49 -0
- package/json-schema/system/JobExecutionStatus.json +15 -0
- package/json-schema/{LDAPConfig.json → system/LDAPConfig.json} +22 -5
- package/json-schema/system/LevelIsolationStrategySchema.json +93 -0
- package/json-schema/system/Member.json +46 -0
- package/json-schema/{OIDCConfig.json → system/OIDCConfig.json} +18 -3
- package/json-schema/system/OnceSchedule.json +25 -0
- package/json-schema/system/Organization.json +52 -0
- package/json-schema/system/Presence.json +40 -0
- package/json-schema/system/PresenceStatus.json +14 -0
- package/json-schema/system/RealtimeAction.json +14 -0
- package/json-schema/system/RealtimeEvent.json +51 -0
- package/json-schema/system/RealtimeEventType.json +15 -0
- package/json-schema/system/RetryPolicy.json +30 -0
- package/json-schema/system/RowLevelIsolationStrategy.json +74 -0
- package/json-schema/{SAMLConfig.json → system/SAMLConfig.json} +17 -3
- package/json-schema/system/Schedule.json +71 -0
- package/json-schema/system/Session.json +63 -0
- package/json-schema/{StandardAuthProvider.json → system/StandardAuthProvider.json} +235 -0
- package/json-schema/system/Subscription.json +65 -0
- package/json-schema/system/SubscriptionEvent.json +32 -0
- package/json-schema/system/SuspiciousActivityRule.json +175 -0
- package/json-schema/system/Tenant.json +61 -0
- package/json-schema/system/TenantIsolationConfig.json +298 -0
- package/json-schema/system/TenantIsolationLevel.json +14 -0
- package/json-schema/system/TenantQuota.json +27 -0
- package/json-schema/system/TenantSecurityPolicy.json +115 -0
- package/json-schema/system/TransportProtocol.json +14 -0
- package/json-schema/system/User.json +51 -0
- package/json-schema/system/VerificationToken.json +36 -0
- package/json-schema/{Action.json → ui/Action.json} +4 -1
- package/json-schema/{ActionParam.json → ui/ActionParam.json} +4 -1
- package/json-schema/{FieldWidgetProps.json → ui/FieldWidgetProps.json} +50 -1
- package/package.json +38 -12
- package/json-schema/AuthProtocol.json +0 -17
- package/json-schema/AuthProvider.json +0 -171
- package/json-schema/AuthenticationConfig.json +0 -601
- package/json-schema/AuthenticationProvider.json +0 -617
- package/json-schema/MenuItem.json +0 -28
- package/json-schema/WorkflowAction.json +0 -84
- package/json-schema/WorkflowRule.json +0 -128
- /package/json-schema/{AIKnowledge.json → ai/AIKnowledge.json} +0 -0
- /package/json-schema/{AIModelConfig.json → ai/AIModelConfig.json} +0 -0
- /package/json-schema/{AITool.json → ai/AITool.json} +0 -0
- /package/json-schema/{Agent.json → ai/Agent.json} +0 -0
- /package/json-schema/{ApiError.json → api/ApiError.json} +0 -0
- /package/json-schema/{BaseResponse.json → api/BaseResponse.json} +0 -0
- /package/json-schema/{BulkRequest.json → api/BulkRequest.json} +0 -0
- /package/json-schema/{BulkResponse.json → api/BulkResponse.json} +0 -0
- /package/json-schema/{CreateRequest.json → api/CreateRequest.json} +0 -0
- /package/json-schema/{DeleteResponse.json → api/DeleteResponse.json} +0 -0
- /package/json-schema/{ExportRequest.json → api/ExportRequest.json} +0 -0
- /package/json-schema/{ListRecordResponse.json → api/ListRecordResponse.json} +0 -0
- /package/json-schema/{ModificationResult.json → api/ModificationResult.json} +0 -0
- /package/json-schema/{RecordData.json → api/RecordData.json} +0 -0
- /package/json-schema/{SingleRecordResponse.json → api/SingleRecordResponse.json} +0 -0
- /package/json-schema/{UpdateRequest.json → api/UpdateRequest.json} +0 -0
- /package/json-schema/{Address.json → data/Address.json} +0 -0
- /package/json-schema/{AggregationFunction.json → data/AggregationFunction.json} +0 -0
- /package/json-schema/{AggregationNode.json → data/AggregationNode.json} +0 -0
- /package/json-schema/{AsyncValidation.json → data/AsyncValidation.json} +0 -0
- /package/json-schema/{ComparisonOperator.json → data/ComparisonOperator.json} +0 -0
- /package/json-schema/{ConditionalValidation.json → data/ConditionalValidation.json} +0 -0
- /package/json-schema/{CrossFieldValidation.json → data/CrossFieldValidation.json} +0 -0
- /package/json-schema/{CustomValidator.json → data/CustomValidator.json} +0 -0
- /package/json-schema/{Dataset.json → data/Dataset.json} +0 -0
- /package/json-schema/{DatasetMode.json → data/DatasetMode.json} +0 -0
- /package/json-schema/{EmailAlertAction.json → data/EmailAlertAction.json} +0 -0
- /package/json-schema/{EqualityOperator.json → data/EqualityOperator.json} +0 -0
- /package/json-schema/{FieldMapping.json → data/FieldMapping.json} +0 -0
- /package/json-schema/{FieldNode.json → data/FieldNode.json} +0 -0
- /package/json-schema/{FieldOperators.json → data/FieldOperators.json} +0 -0
- /package/json-schema/{FieldPermission.json → data/FieldPermission.json} +0 -0
- /package/json-schema/{FieldUpdateAction.json → data/FieldUpdateAction.json} +0 -0
- /package/json-schema/{FilterCondition.json → data/FilterCondition.json} +0 -0
- /package/json-schema/{FilterNode.json → data/FilterNode.json} +0 -0
- /package/json-schema/{FilterOperator.json → data/FilterOperator.json} +0 -0
- /package/json-schema/{Flow.json → data/Flow.json} +0 -0
- /package/json-schema/{FlowEdge.json → data/FlowEdge.json} +0 -0
- /package/json-schema/{FlowNode.json → data/FlowNode.json} +0 -0
- /package/json-schema/{FlowNodeAction.json → data/FlowNodeAction.json} +0 -0
- /package/json-schema/{FlowVariable.json → data/FlowVariable.json} +0 -0
- /package/json-schema/{FormatValidation.json → data/FormatValidation.json} +0 -0
- /package/json-schema/{Index.json → data/Index.json} +0 -0
- /package/json-schema/{JoinNode.json → data/JoinNode.json} +0 -0
- /package/json-schema/{JoinType.json → data/JoinType.json} +0 -0
- /package/json-schema/{LocationCoordinates.json → data/LocationCoordinates.json} +0 -0
- /package/json-schema/{LogicOperator.json → data/LogicOperator.json} +0 -0
- /package/json-schema/{Mapping.json → data/Mapping.json} +0 -0
- /package/json-schema/{NormalizedFilter.json → data/NormalizedFilter.json} +0 -0
- /package/json-schema/{OWDModel.json → data/OWDModel.json} +0 -0
- /package/json-schema/{ObjectCapabilities.json → data/ObjectCapabilities.json} +0 -0
- /package/json-schema/{ObjectPermission.json → data/ObjectPermission.json} +0 -0
- /package/json-schema/{PermissionSet.json → data/PermissionSet.json} +0 -0
- /package/json-schema/{Query.json → data/Query.json} +0 -0
- /package/json-schema/{QueryFilter.json → data/QueryFilter.json} +0 -0
- /package/json-schema/{RangeOperator.json → data/RangeOperator.json} +0 -0
- /package/json-schema/{ScriptValidation.json → data/ScriptValidation.json} +0 -0
- /package/json-schema/{SelectOption.json → data/SelectOption.json} +0 -0
- /package/json-schema/{SetOperator.json → data/SetOperator.json} +0 -0
- /package/json-schema/{SharingLevel.json → data/SharingLevel.json} +0 -0
- /package/json-schema/{SharingRule.json → data/SharingRule.json} +0 -0
- /package/json-schema/{SharingRuleType.json → data/SharingRuleType.json} +0 -0
- /package/json-schema/{SortNode.json → data/SortNode.json} +0 -0
- /package/json-schema/{SpecialOperator.json → data/SpecialOperator.json} +0 -0
- /package/json-schema/{StateMachineValidation.json → data/StateMachineValidation.json} +0 -0
- /package/json-schema/{StringOperator.json → data/StringOperator.json} +0 -0
- /package/json-schema/{TransformType.json → data/TransformType.json} +0 -0
- /package/json-schema/{Trigger.json → data/Trigger.json} +0 -0
- /package/json-schema/{TriggerAction.json → data/TriggerAction.json} +0 -0
- /package/json-schema/{TriggerContext.json → data/TriggerContext.json} +0 -0
- /package/json-schema/{TriggerTiming.json → data/TriggerTiming.json} +0 -0
- /package/json-schema/{UniquenessValidation.json → data/UniquenessValidation.json} +0 -0
- /package/json-schema/{ValidationRule.json → data/ValidationRule.json} +0 -0
- /package/json-schema/{WindowFunction.json → data/WindowFunction.json} +0 -0
- /package/json-schema/{WindowFunctionNode.json → data/WindowFunctionNode.json} +0 -0
- /package/json-schema/{WindowSpec.json → data/WindowSpec.json} +0 -0
- /package/json-schema/{WorkflowTriggerType.json → data/WorkflowTriggerType.json} +0 -0
- /package/json-schema/{AccountLinkingConfig.json → system/AccountLinkingConfig.json} +0 -0
- /package/json-schema/{ApiCapabilities.json → system/ApiCapabilities.json} +0 -0
- /package/json-schema/{ApiEndpoint.json → system/ApiEndpoint.json} +0 -0
- /package/json-schema/{ApiMapping.json → system/ApiMapping.json} +0 -0
- /package/json-schema/{ApiRoutes.json → system/ApiRoutes.json} +0 -0
- /package/json-schema/{AuditPolicy.json → system/AuditPolicy.json} +0 -0
- /package/json-schema/{AuthPluginConfig.json → system/AuthPluginConfig.json} +0 -0
- /package/json-schema/{AuthStrategy.json → system/AuthStrategy.json} +0 -0
- /package/json-schema/{CSRFConfig.json → system/CSRFConfig.json} +0 -0
- /package/json-schema/{DatabaseAdapter.json → system/DatabaseAdapter.json} +0 -0
- /package/json-schema/{Datasource.json → system/Datasource.json} +0 -0
- /package/json-schema/{DatasourceCapabilities.json → system/DatasourceCapabilities.json} +0 -0
- /package/json-schema/{Discovery.json → system/Discovery.json} +0 -0
- /package/json-schema/{DriverCapabilities.json → system/DriverCapabilities.json} +0 -0
- /package/json-schema/{DriverDefinition.json → system/DriverDefinition.json} +0 -0
- /package/json-schema/{DriverInterface.json → system/DriverInterface.json} +0 -0
- /package/json-schema/{DriverOptions.json → system/DriverOptions.json} +0 -0
- /package/json-schema/{DriverType.json → system/DriverType.json} +0 -0
- /package/json-schema/{EmailPasswordConfig.json → system/EmailPasswordConfig.json} +0 -0
- /package/json-schema/{Feature.json → system/Feature.json} +0 -0
- /package/json-schema/{HttpMethod.json → system/HttpMethod.json} +0 -0
- /package/json-schema/{I18nContext.json → system/I18nContext.json} +0 -0
- /package/json-schema/{License.json → system/License.json} +0 -0
- /package/json-schema/{Locale.json → system/Locale.json} +0 -0
- /package/json-schema/{Logger.json → system/Logger.json} +0 -0
- /package/json-schema/{MagicLinkConfig.json → system/MagicLinkConfig.json} +0 -0
- /package/json-schema/{Manifest.json → system/Manifest.json} +0 -0
- /package/json-schema/{MetricType.json → system/MetricType.json} +0 -0
- /package/json-schema/{NetworkPolicy.json → system/NetworkPolicy.json} +0 -0
- /package/json-schema/{OAuthProvider.json → system/OAuthProvider.json} +0 -0
- /package/json-schema/{ObjectQLClient.json → system/ObjectQLClient.json} +0 -0
- /package/json-schema/{PasskeyConfig.json → system/PasskeyConfig.json} +0 -0
- /package/json-schema/{PasswordPolicy.json → system/PasswordPolicy.json} +0 -0
- /package/json-schema/{Plan.json → system/Plan.json} +0 -0
- /package/json-schema/{Plugin.json → system/Plugin.json} +0 -0
- /package/json-schema/{PluginContext.json → system/PluginContext.json} +0 -0
- /package/json-schema/{PluginLifecycle.json → system/PluginLifecycle.json} +0 -0
- /package/json-schema/{Policy.json → system/Policy.json} +0 -0
- /package/json-schema/{RateLimit.json → system/RateLimit.json} +0 -0
- /package/json-schema/{RateLimitConfig.json → system/RateLimitConfig.json} +0 -0
- /package/json-schema/{Role.json → system/Role.json} +0 -0
- /package/json-schema/{Router.json → system/Router.json} +0 -0
- /package/json-schema/{Scheduler.json → system/Scheduler.json} +0 -0
- /package/json-schema/{ScopedStorage.json → system/ScopedStorage.json} +0 -0
- /package/json-schema/{SessionConfig.json → system/SessionConfig.json} +0 -0
- /package/json-schema/{SessionPolicy.json → system/SessionPolicy.json} +0 -0
- /package/json-schema/{SystemAPI.json → system/SystemAPI.json} +0 -0
- /package/json-schema/{Territory.json → system/Territory.json} +0 -0
- /package/json-schema/{TerritoryModel.json → system/TerritoryModel.json} +0 -0
- /package/json-schema/{TerritoryType.json → system/TerritoryType.json} +0 -0
- /package/json-schema/{TranslationBundle.json → system/TranslationBundle.json} +0 -0
- /package/json-schema/{TranslationData.json → system/TranslationData.json} +0 -0
- /package/json-schema/{TwoFactorConfig.json → system/TwoFactorConfig.json} +0 -0
- /package/json-schema/{UserFieldMapping.json → system/UserFieldMapping.json} +0 -0
- /package/json-schema/{Webhook.json → system/Webhook.json} +0 -0
- /package/json-schema/{WebhookReceiver.json → system/WebhookReceiver.json} +0 -0
- /package/json-schema/{WebhookTriggerType.json → system/WebhookTriggerType.json} +0 -0
- /package/json-schema/{Animation.json → ui/Animation.json} +0 -0
- /package/json-schema/{App.json → ui/App.json} +0 -0
- /package/json-schema/{AppBranding.json → ui/AppBranding.json} +0 -0
- /package/json-schema/{BorderRadius.json → ui/BorderRadius.json} +0 -0
- /package/json-schema/{Breakpoints.json → ui/Breakpoints.json} +0 -0
- /package/json-schema/{CalendarConfig.json → ui/CalendarConfig.json} +0 -0
- /package/json-schema/{ChartType.json → ui/ChartType.json} +0 -0
- /package/json-schema/{ColorPalette.json → ui/ColorPalette.json} +0 -0
- /package/json-schema/{Dashboard.json → ui/Dashboard.json} +0 -0
- /package/json-schema/{DashboardNavItem.json → ui/DashboardNavItem.json} +0 -0
- /package/json-schema/{DashboardWidget.json → ui/DashboardWidget.json} +0 -0
- /package/json-schema/{FormSection.json → ui/FormSection.json} +0 -0
- /package/json-schema/{FormView.json → ui/FormView.json} +0 -0
- /package/json-schema/{GanttConfig.json → ui/GanttConfig.json} +0 -0
- /package/json-schema/{GroupNavItem.json → ui/GroupNavItem.json} +0 -0
- /package/json-schema/{KanbanConfig.json → ui/KanbanConfig.json} +0 -0
- /package/json-schema/{ListView.json → ui/ListView.json} +0 -0
- /package/json-schema/{NavigationItem.json → ui/NavigationItem.json} +0 -0
- /package/json-schema/{ObjectNavItem.json → ui/ObjectNavItem.json} +0 -0
- /package/json-schema/{Page.json → ui/Page.json} +0 -0
- /package/json-schema/{PageComponent.json → ui/PageComponent.json} +0 -0
- /package/json-schema/{PageNavItem.json → ui/PageNavItem.json} +0 -0
- /package/json-schema/{PageRegion.json → ui/PageRegion.json} +0 -0
- /package/json-schema/{Report.json → ui/Report.json} +0 -0
- /package/json-schema/{ReportChart.json → ui/ReportChart.json} +0 -0
- /package/json-schema/{ReportColumn.json → ui/ReportColumn.json} +0 -0
- /package/json-schema/{ReportGrouping.json → ui/ReportGrouping.json} +0 -0
- /package/json-schema/{ReportType.json → ui/ReportType.json} +0 -0
- /package/json-schema/{Shadow.json → ui/Shadow.json} +0 -0
- /package/json-schema/{Spacing.json → ui/Spacing.json} +0 -0
- /package/json-schema/{Theme.json → ui/Theme.json} +0 -0
- /package/json-schema/{ThemeMode.json → ui/ThemeMode.json} +0 -0
- /package/json-schema/{Typography.json → ui/Typography.json} +0 -0
- /package/json-schema/{UrlNavItem.json → ui/UrlNavItem.json} +0 -0
- /package/json-schema/{View.json → ui/View.json} +0 -0
- /package/json-schema/{ZIndex.json → ui/ZIndex.json} +0 -0
|
@@ -2,8 +2,54 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ConditionalValidationSchema = exports.ValidationRuleSchema = exports.CustomValidatorSchema = exports.AsyncValidationSchema = exports.CrossFieldValidationSchema = exports.FormatValidationSchema = exports.StateMachineValidationSchema = exports.UniquenessValidationSchema = exports.ScriptValidationSchema = void 0;
|
|
4
4
|
const zod_1 = require("zod");
|
|
5
|
+
/**
|
|
6
|
+
* # ObjectStack Validation Protocol
|
|
7
|
+
*
|
|
8
|
+
* This module defines the validation schema protocol for ObjectStack, providing a comprehensive
|
|
9
|
+
* type-safe validation system similar to Salesforce's validation rules but with enhanced capabilities.
|
|
10
|
+
*
|
|
11
|
+
* ## Overview
|
|
12
|
+
*
|
|
13
|
+
* Validation rules are applied at the data layer to ensure data integrity and enforce business logic.
|
|
14
|
+
* The system supports multiple validation types:
|
|
15
|
+
*
|
|
16
|
+
* 1. **Script Validation**: Formula-based validation using expressions
|
|
17
|
+
* 2. **Uniqueness Validation**: Enforce unique constraints across fields
|
|
18
|
+
* 3. **State Machine Validation**: Control allowed state transitions
|
|
19
|
+
* 4. **Format Validation**: Validate field formats (email, URL, regex, etc.)
|
|
20
|
+
* 5. **Cross-Field Validation**: Validate relationships between multiple fields
|
|
21
|
+
* 6. **Async Validation**: Remote validation via API calls
|
|
22
|
+
* 7. **Custom Validation**: User-defined validation functions
|
|
23
|
+
* 8. **Conditional Validation**: Apply validations based on conditions
|
|
24
|
+
*
|
|
25
|
+
* ## Salesforce Comparison
|
|
26
|
+
*
|
|
27
|
+
* ObjectStack validation rules are inspired by Salesforce validation rules but enhanced:
|
|
28
|
+
* - Salesforce: Formula-based validation with `Error Condition Formula`
|
|
29
|
+
* - ObjectStack: Multiple validation types with composable rules
|
|
30
|
+
*
|
|
31
|
+
* Example Salesforce validation rule:
|
|
32
|
+
* ```
|
|
33
|
+
* Rule Name: Discount_Cannot_Exceed_40_Percent
|
|
34
|
+
* Error Condition Formula: Discount_Percent__c > 0.40
|
|
35
|
+
* Error Message: Discount cannot exceed 40%.
|
|
36
|
+
* ```
|
|
37
|
+
*
|
|
38
|
+
* Equivalent ObjectStack rule:
|
|
39
|
+
* ```typescript
|
|
40
|
+
* {
|
|
41
|
+
* type: 'script',
|
|
42
|
+
* name: 'discount_cannot_exceed_40_percent',
|
|
43
|
+
* condition: 'discount_percent > 0.40',
|
|
44
|
+
* message: 'Discount cannot exceed 40%',
|
|
45
|
+
* severity: 'error'
|
|
46
|
+
* }
|
|
47
|
+
* ```
|
|
48
|
+
*/
|
|
5
49
|
/**
|
|
6
50
|
* Base Validation Rule
|
|
51
|
+
*
|
|
52
|
+
* All validation rules extend from this base schema with common properties.
|
|
7
53
|
*/
|
|
8
54
|
const BaseValidationSchema = zod_1.z.object({
|
|
9
55
|
name: zod_1.z.string().regex(/^[a-z_][a-z0-9_]*$/).describe('Unique rule name'),
|
|
@@ -51,6 +97,65 @@ exports.FormatValidationSchema = BaseValidationSchema.extend({
|
|
|
51
97
|
/**
|
|
52
98
|
* 5. Cross-Field Validation
|
|
53
99
|
* Validates relationships between multiple fields.
|
|
100
|
+
*
|
|
101
|
+
* ## Use Cases
|
|
102
|
+
* - Date range validations (end_date > start_date)
|
|
103
|
+
* - Amount comparisons (discount < total)
|
|
104
|
+
* - Complex business rules involving multiple fields
|
|
105
|
+
*
|
|
106
|
+
* ## Salesforce Examples
|
|
107
|
+
*
|
|
108
|
+
* ### Example 1: Close Date Must Be In Current or Future Month
|
|
109
|
+
* **Salesforce Formula:**
|
|
110
|
+
* ```
|
|
111
|
+
* MONTH(CloseDate) < MONTH(TODAY()) ||
|
|
112
|
+
* YEAR(CloseDate) < YEAR(TODAY())
|
|
113
|
+
* ```
|
|
114
|
+
*
|
|
115
|
+
* **ObjectStack Equivalent:**
|
|
116
|
+
* ```typescript
|
|
117
|
+
* {
|
|
118
|
+
* type: 'cross_field',
|
|
119
|
+
* name: 'close_date_future',
|
|
120
|
+
* condition: 'MONTH(close_date) >= MONTH(TODAY()) AND YEAR(close_date) >= YEAR(TODAY())',
|
|
121
|
+
* fields: ['close_date'],
|
|
122
|
+
* message: 'Close Date must be in the current or a future month'
|
|
123
|
+
* }
|
|
124
|
+
* ```
|
|
125
|
+
*
|
|
126
|
+
* ### Example 2: Discount Validation
|
|
127
|
+
* **Salesforce Formula:**
|
|
128
|
+
* ```
|
|
129
|
+
* Discount__c > (Amount__c * 0.40)
|
|
130
|
+
* ```
|
|
131
|
+
*
|
|
132
|
+
* **ObjectStack Equivalent:**
|
|
133
|
+
* ```typescript
|
|
134
|
+
* {
|
|
135
|
+
* type: 'cross_field',
|
|
136
|
+
* name: 'discount_limit',
|
|
137
|
+
* condition: 'discount > (amount * 0.40)',
|
|
138
|
+
* fields: ['discount', 'amount'],
|
|
139
|
+
* message: 'Discount cannot exceed 40% of the amount'
|
|
140
|
+
* }
|
|
141
|
+
* ```
|
|
142
|
+
*
|
|
143
|
+
* ### Example 3: Opportunity Must Have Products
|
|
144
|
+
* **Salesforce Formula:**
|
|
145
|
+
* ```
|
|
146
|
+
* ISBLANK(Products__c) && ISPICKVAL(StageName, "Closed Won")
|
|
147
|
+
* ```
|
|
148
|
+
*
|
|
149
|
+
* **ObjectStack Equivalent:**
|
|
150
|
+
* ```typescript
|
|
151
|
+
* {
|
|
152
|
+
* type: 'cross_field',
|
|
153
|
+
* name: 'products_required_for_won',
|
|
154
|
+
* condition: 'products = null AND stage = "closed_won"',
|
|
155
|
+
* fields: ['products', 'stage'],
|
|
156
|
+
* message: 'Opportunity must have products to be marked as Closed Won'
|
|
157
|
+
* }
|
|
158
|
+
* ```
|
|
54
159
|
*/
|
|
55
160
|
exports.CrossFieldValidationSchema = BaseValidationSchema.extend({
|
|
56
161
|
type: zod_1.z.literal('cross_field'),
|
|
@@ -60,6 +165,124 @@ exports.CrossFieldValidationSchema = BaseValidationSchema.extend({
|
|
|
60
165
|
/**
|
|
61
166
|
* 6. Async Validation
|
|
62
167
|
* Remote validation via API call or database query.
|
|
168
|
+
*
|
|
169
|
+
* ## Use Cases
|
|
170
|
+
*
|
|
171
|
+
* ### 1. Email Uniqueness Check
|
|
172
|
+
* Check if an email address is already registered in the system.
|
|
173
|
+
* ```typescript
|
|
174
|
+
* {
|
|
175
|
+
* type: 'async',
|
|
176
|
+
* name: 'unique_email',
|
|
177
|
+
* field: 'email',
|
|
178
|
+
* validatorUrl: '/api/users/check-email',
|
|
179
|
+
* message: 'This email address is already registered',
|
|
180
|
+
* debounce: 500, // Wait 500ms after user stops typing
|
|
181
|
+
* timeout: 3000
|
|
182
|
+
* }
|
|
183
|
+
* ```
|
|
184
|
+
*
|
|
185
|
+
* ### 2. Username Availability
|
|
186
|
+
* Verify username is available before form submission.
|
|
187
|
+
* ```typescript
|
|
188
|
+
* {
|
|
189
|
+
* type: 'async',
|
|
190
|
+
* name: 'username_available',
|
|
191
|
+
* field: 'username',
|
|
192
|
+
* validatorUrl: '/api/users/check-username',
|
|
193
|
+
* message: 'This username is already taken',
|
|
194
|
+
* debounce: 300,
|
|
195
|
+
* timeout: 2000
|
|
196
|
+
* }
|
|
197
|
+
* ```
|
|
198
|
+
*
|
|
199
|
+
* ### 3. Tax ID Validation
|
|
200
|
+
* Validate tax ID with government API (e.g., IRS, HMRC).
|
|
201
|
+
* ```typescript
|
|
202
|
+
* {
|
|
203
|
+
* type: 'async',
|
|
204
|
+
* name: 'validate_tax_id',
|
|
205
|
+
* field: 'tax_id',
|
|
206
|
+
* validatorFunction: 'validateTaxIdWithIRS',
|
|
207
|
+
* message: 'Invalid Tax ID number',
|
|
208
|
+
* timeout: 10000, // Government APIs may be slow
|
|
209
|
+
* params: { country: 'US', format: 'EIN' }
|
|
210
|
+
* }
|
|
211
|
+
* ```
|
|
212
|
+
*
|
|
213
|
+
* ### 4. Credit Card Validation
|
|
214
|
+
* Verify credit card with payment gateway without charging.
|
|
215
|
+
* ```typescript
|
|
216
|
+
* {
|
|
217
|
+
* type: 'async',
|
|
218
|
+
* name: 'validate_card',
|
|
219
|
+
* field: 'card_number',
|
|
220
|
+
* validatorUrl: 'https://api.stripe.com/v1/tokens/validate',
|
|
221
|
+
* message: 'Invalid credit card number',
|
|
222
|
+
* timeout: 5000,
|
|
223
|
+
* params: {
|
|
224
|
+
* mode: 'validate_only',
|
|
225
|
+
* checkFunds: false
|
|
226
|
+
* }
|
|
227
|
+
* }
|
|
228
|
+
* ```
|
|
229
|
+
*
|
|
230
|
+
* ### 5. Address Validation
|
|
231
|
+
* Validate and standardize addresses using geocoding services.
|
|
232
|
+
* ```typescript
|
|
233
|
+
* {
|
|
234
|
+
* type: 'async',
|
|
235
|
+
* name: 'validate_address',
|
|
236
|
+
* field: 'street_address',
|
|
237
|
+
* validatorFunction: 'validateAddressWithGoogleMaps',
|
|
238
|
+
* message: 'Unable to verify address',
|
|
239
|
+
* timeout: 4000,
|
|
240
|
+
* params: {
|
|
241
|
+
* includeFields: ['city', 'state', 'zip'],
|
|
242
|
+
* strictMode: true,
|
|
243
|
+
* country: 'US'
|
|
244
|
+
* }
|
|
245
|
+
* }
|
|
246
|
+
* ```
|
|
247
|
+
*
|
|
248
|
+
* ### 6. Domain Name Availability
|
|
249
|
+
* Check if domain name is available for registration.
|
|
250
|
+
* ```typescript
|
|
251
|
+
* {
|
|
252
|
+
* type: 'async',
|
|
253
|
+
* name: 'domain_available',
|
|
254
|
+
* field: 'domain_name',
|
|
255
|
+
* validatorUrl: '/api/domains/check-availability',
|
|
256
|
+
* message: 'This domain is already taken or reserved',
|
|
257
|
+
* debounce: 500,
|
|
258
|
+
* timeout: 2000
|
|
259
|
+
* }
|
|
260
|
+
* ```
|
|
261
|
+
*
|
|
262
|
+
* ### 7. Coupon Code Validation
|
|
263
|
+
* Verify coupon code is valid and not expired.
|
|
264
|
+
* ```typescript
|
|
265
|
+
* {
|
|
266
|
+
* type: 'async',
|
|
267
|
+
* name: 'validate_coupon',
|
|
268
|
+
* field: 'coupon_code',
|
|
269
|
+
* validatorUrl: '/api/coupons/validate',
|
|
270
|
+
* message: 'Invalid or expired coupon code',
|
|
271
|
+
* timeout: 2000,
|
|
272
|
+
* params: {
|
|
273
|
+
* checkExpiration: true,
|
|
274
|
+
* checkUsageLimit: true,
|
|
275
|
+
* userId: '{{current_user_id}}'
|
|
276
|
+
* }
|
|
277
|
+
* }
|
|
278
|
+
* ```
|
|
279
|
+
*
|
|
280
|
+
* ## Best Practices
|
|
281
|
+
* - Always set a reasonable `timeout` (default is 5000ms)
|
|
282
|
+
* - Use `debounce` for fields that are typed (300-500ms recommended)
|
|
283
|
+
* - Implement proper error handling on the server side
|
|
284
|
+
* - Cache validation results when appropriate
|
|
285
|
+
* - Consider rate limiting for external API calls
|
|
63
286
|
*/
|
|
64
287
|
exports.AsyncValidationSchema = BaseValidationSchema.extend({
|
|
65
288
|
type: zod_1.z.literal('async'),
|
|
@@ -96,6 +319,178 @@ exports.ValidationRuleSchema = zod_1.z.lazy(() => zod_1.z.discriminatedUnion('ty
|
|
|
96
319
|
/**
|
|
97
320
|
* 8. Conditional Validation
|
|
98
321
|
* Validation that only applies when a condition is met.
|
|
322
|
+
*
|
|
323
|
+
* ## Overview
|
|
324
|
+
* Conditional validations follow the pattern: "Validate X only if Y is true"
|
|
325
|
+
* This allows for context-aware validation rules that adapt to different scenarios.
|
|
326
|
+
*
|
|
327
|
+
* ## Use Cases
|
|
328
|
+
*
|
|
329
|
+
* ### 1. Validate Based on Record Type
|
|
330
|
+
* Apply different validation rules based on the type of record.
|
|
331
|
+
* ```typescript
|
|
332
|
+
* {
|
|
333
|
+
* type: 'conditional',
|
|
334
|
+
* name: 'enterprise_approval_required',
|
|
335
|
+
* when: 'account_type = "enterprise"',
|
|
336
|
+
* message: 'Enterprise validation',
|
|
337
|
+
* then: {
|
|
338
|
+
* type: 'script',
|
|
339
|
+
* name: 'require_approval',
|
|
340
|
+
* message: 'Enterprise accounts require manager approval',
|
|
341
|
+
* condition: 'approval_status = null'
|
|
342
|
+
* }
|
|
343
|
+
* }
|
|
344
|
+
* ```
|
|
345
|
+
*
|
|
346
|
+
* ### 2. Conditional Field Requirements
|
|
347
|
+
* Require certain fields only when specific conditions are met.
|
|
348
|
+
* ```typescript
|
|
349
|
+
* {
|
|
350
|
+
* type: 'conditional',
|
|
351
|
+
* name: 'shipping_address_when_required',
|
|
352
|
+
* when: 'requires_shipping = true',
|
|
353
|
+
* message: 'Shipping validation',
|
|
354
|
+
* then: {
|
|
355
|
+
* type: 'script',
|
|
356
|
+
* name: 'shipping_address_required',
|
|
357
|
+
* message: 'Shipping address is required for physical products',
|
|
358
|
+
* condition: 'shipping_address = null OR shipping_address = ""'
|
|
359
|
+
* }
|
|
360
|
+
* }
|
|
361
|
+
* ```
|
|
362
|
+
*
|
|
363
|
+
* ### 3. Amount-Based Validation
|
|
364
|
+
* Apply different rules based on transaction amount.
|
|
365
|
+
* ```typescript
|
|
366
|
+
* {
|
|
367
|
+
* type: 'conditional',
|
|
368
|
+
* name: 'high_value_approval',
|
|
369
|
+
* when: 'order_total > 10000',
|
|
370
|
+
* message: 'High value order validation',
|
|
371
|
+
* then: {
|
|
372
|
+
* type: 'script',
|
|
373
|
+
* name: 'manager_approval_required',
|
|
374
|
+
* message: 'Orders over $10,000 require manager approval',
|
|
375
|
+
* condition: 'manager_approval_id = null'
|
|
376
|
+
* },
|
|
377
|
+
* otherwise: {
|
|
378
|
+
* type: 'script',
|
|
379
|
+
* name: 'standard_validation',
|
|
380
|
+
* message: 'Payment method is required',
|
|
381
|
+
* condition: 'payment_method = null'
|
|
382
|
+
* }
|
|
383
|
+
* }
|
|
384
|
+
* ```
|
|
385
|
+
*
|
|
386
|
+
* ### 4. Regional Compliance
|
|
387
|
+
* Apply region-specific validation rules.
|
|
388
|
+
* ```typescript
|
|
389
|
+
* {
|
|
390
|
+
* type: 'conditional',
|
|
391
|
+
* name: 'regional_compliance',
|
|
392
|
+
* when: 'region = "EU"',
|
|
393
|
+
* message: 'EU compliance validation',
|
|
394
|
+
* then: {
|
|
395
|
+
* type: 'script',
|
|
396
|
+
* name: 'gdpr_consent',
|
|
397
|
+
* message: 'GDPR consent is required for EU customers',
|
|
398
|
+
* condition: 'gdpr_consent_given = false'
|
|
399
|
+
* },
|
|
400
|
+
* otherwise: {
|
|
401
|
+
* type: 'script',
|
|
402
|
+
* name: 'tos_acceptance',
|
|
403
|
+
* message: 'Terms of Service acceptance required',
|
|
404
|
+
* condition: 'tos_accepted = false'
|
|
405
|
+
* }
|
|
406
|
+
* }
|
|
407
|
+
* ```
|
|
408
|
+
*
|
|
409
|
+
* ### 5. Nested Conditional Validation
|
|
410
|
+
* Create complex validation logic with nested conditions.
|
|
411
|
+
* ```typescript
|
|
412
|
+
* {
|
|
413
|
+
* type: 'conditional',
|
|
414
|
+
* name: 'country_state_validation',
|
|
415
|
+
* when: 'country = "US"',
|
|
416
|
+
* message: 'US-specific validation',
|
|
417
|
+
* then: {
|
|
418
|
+
* type: 'conditional',
|
|
419
|
+
* name: 'california_validation',
|
|
420
|
+
* when: 'state = "CA"',
|
|
421
|
+
* message: 'California-specific validation',
|
|
422
|
+
* then: {
|
|
423
|
+
* type: 'script',
|
|
424
|
+
* name: 'ca_tax_id_required',
|
|
425
|
+
* message: 'California requires a valid tax ID',
|
|
426
|
+
* condition: 'tax_id = null OR NOT(REGEX(tax_id, "^\\d{2}-\\d{7}$"))'
|
|
427
|
+
* }
|
|
428
|
+
* }
|
|
429
|
+
* }
|
|
430
|
+
* ```
|
|
431
|
+
*
|
|
432
|
+
* ### 6. Tax Validation for Taxable Items
|
|
433
|
+
* Only validate tax fields when the item is taxable.
|
|
434
|
+
* ```typescript
|
|
435
|
+
* {
|
|
436
|
+
* type: 'conditional',
|
|
437
|
+
* name: 'tax_field_validation',
|
|
438
|
+
* when: 'is_taxable = true',
|
|
439
|
+
* message: 'Tax validation',
|
|
440
|
+
* then: {
|
|
441
|
+
* type: 'script',
|
|
442
|
+
* name: 'tax_code_required',
|
|
443
|
+
* message: 'Tax code is required for taxable items',
|
|
444
|
+
* condition: 'tax_code = null OR tax_code = ""'
|
|
445
|
+
* }
|
|
446
|
+
* }
|
|
447
|
+
* ```
|
|
448
|
+
*
|
|
449
|
+
* ### 7. Role-Based Validation
|
|
450
|
+
* Apply validation based on user role.
|
|
451
|
+
* ```typescript
|
|
452
|
+
* {
|
|
453
|
+
* type: 'conditional',
|
|
454
|
+
* name: 'role_based_approval_limit',
|
|
455
|
+
* when: 'user_role = "manager"',
|
|
456
|
+
* message: 'Manager approval limits',
|
|
457
|
+
* then: {
|
|
458
|
+
* type: 'script',
|
|
459
|
+
* name: 'manager_limit',
|
|
460
|
+
* message: 'Managers can approve up to $50,000',
|
|
461
|
+
* condition: 'approval_amount > 50000'
|
|
462
|
+
* }
|
|
463
|
+
* }
|
|
464
|
+
* ```
|
|
465
|
+
*
|
|
466
|
+
* ## Salesforce Pattern Comparison
|
|
467
|
+
*
|
|
468
|
+
* Salesforce doesn't have explicit "conditional validation" rules but achieves similar
|
|
469
|
+
* behavior using formula logic. ObjectStack makes this pattern explicit and composable.
|
|
470
|
+
*
|
|
471
|
+
* **Salesforce Approach:**
|
|
472
|
+
* ```
|
|
473
|
+
* IF(
|
|
474
|
+
* ISPICKVAL(Type, "Enterprise"),
|
|
475
|
+
* AND(Amount > 100000, ISBLANK(Approval__c)),
|
|
476
|
+
* FALSE
|
|
477
|
+
* )
|
|
478
|
+
* ```
|
|
479
|
+
*
|
|
480
|
+
* **ObjectStack Approach:**
|
|
481
|
+
* ```typescript
|
|
482
|
+
* {
|
|
483
|
+
* type: 'conditional',
|
|
484
|
+
* name: 'enterprise_high_value',
|
|
485
|
+
* when: 'type = "enterprise"',
|
|
486
|
+
* then: {
|
|
487
|
+
* type: 'cross_field',
|
|
488
|
+
* name: 'amount_approval',
|
|
489
|
+
* condition: 'amount > 100000 AND approval = null',
|
|
490
|
+
* fields: ['amount', 'approval']
|
|
491
|
+
* }
|
|
492
|
+
* }
|
|
493
|
+
* ```
|
|
99
494
|
*/
|
|
100
495
|
exports.ConditionalValidationSchema = BaseValidationSchema.extend({
|
|
101
496
|
type: zod_1.z.literal('conditional'),
|