@praxisui/specification 1.0.0-beta.41 → 1.0.0-beta.42
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"praxisui-specification.mjs","sources":["../../../projects/praxis-specification/src/lib/specification/comparison-operator.ts","../../../projects/praxis-specification/src/lib/specification/field-specification.ts","../../../projects/praxis-specification/src/lib/specification/and-specification.ts","../../../projects/praxis-specification/src/lib/specification/or-specification.ts","../../../projects/praxis-specification/src/lib/specification/xor-specification.ts","../../../projects/praxis-specification/src/lib/specification/implies-specification.ts","../../../projects/praxis-specification/src/lib/specification/not-specification.ts","../../../projects/praxis-specification/src/lib/registry/function-registry.ts","../../../projects/praxis-specification/src/lib/specification/function-specification.ts","../../../projects/praxis-specification/src/lib/specification/at-least-specification.ts","../../../projects/praxis-specification/src/lib/specification/exactly-specification.ts","../../../projects/praxis-specification/src/lib/registry/transform-registry.ts","../../../projects/praxis-specification/src/lib/specification/field-to-field-specification.ts","../../../projects/praxis-specification/src/lib/context/context-provider.ts","../../../projects/praxis-specification/src/lib/specification/contextual-specification.ts","../../../projects/praxis-specification/src/lib/specification/conditional-validators.ts","../../../projects/praxis-specification/src/lib/specification/collection-specifications.ts","../../../projects/praxis-specification/src/lib/specification/optional-specifications.ts","../../../projects/praxis-specification/src/lib/specification/form-specification.ts","../../../projects/praxis-specification/src/lib/dsl/token.ts","../../../projects/praxis-specification/src/lib/dsl/tokenizer.ts","../../../projects/praxis-specification/src/lib/dsl/parser.ts","../../../projects/praxis-specification/src/lib/dsl/exporter.ts","../../../projects/praxis-specification/src/lib/dsl/validation-issue.ts","../../../projects/praxis-specification/src/lib/dsl/dsl-validator.ts","../../../projects/praxis-specification/src/lib/utils/specification-factory.ts","../../../projects/praxis-specification/src/lib/utils/specification-utils.ts","../../../projects/praxis-specification/src/lib/utils/index.ts","../../../projects/praxis-specification/src/lib/praxis-specification.ts","../../../projects/praxis-specification/src/public-api.ts","../../../projects/praxis-specification/src/praxisui-specification.ts"],"sourcesContent":["export enum ComparisonOperator {\n EQUALS = 'eq',\n NOT_EQUALS = 'neq',\n LESS_THAN = 'lt',\n LESS_THAN_OR_EQUAL = 'lte',\n GREATER_THAN = 'gt',\n GREATER_THAN_OR_EQUAL = 'gte',\n CONTAINS = 'contains',\n STARTS_WITH = 'startsWith',\n ENDS_WITH = 'endsWith',\n IN = 'in',\n NOT_IN = 'notIn',\n MATCHES = 'matches',\n NOT_MATCHES = 'notMatches',\n IS_NULL = 'isNull',\n IS_NOT_NULL = 'isNotNull',\n IS_EMPTY = 'isEmpty',\n IS_NOT_EMPTY = 'isNotEmpty'\n}\n\nexport const OPERATOR_SYMBOLS: Record<ComparisonOperator, string> = {\n [ComparisonOperator.EQUALS]: '==',\n [ComparisonOperator.NOT_EQUALS]: '!=',\n [ComparisonOperator.LESS_THAN]: '<',\n [ComparisonOperator.LESS_THAN_OR_EQUAL]: '<=',\n [ComparisonOperator.GREATER_THAN]: '>',\n [ComparisonOperator.GREATER_THAN_OR_EQUAL]: '>=',\n [ComparisonOperator.CONTAINS]: 'contains',\n [ComparisonOperator.STARTS_WITH]: 'startsWith',\n [ComparisonOperator.ENDS_WITH]: 'endsWith',\n [ComparisonOperator.IN]: 'in',\n [ComparisonOperator.NOT_IN]: 'not in',\n [ComparisonOperator.MATCHES]: 'matches',\n [ComparisonOperator.NOT_MATCHES]: '!~',\n [ComparisonOperator.IS_NULL]: 'is null',\n [ComparisonOperator.IS_NOT_NULL]: 'is not null',\n [ComparisonOperator.IS_EMPTY]: 'is empty',\n [ComparisonOperator.IS_NOT_EMPTY]: 'is not empty'\n};\n","import { Specification } from '@praxisui/specification-core';\nimport { ComparisonOperator, OPERATOR_SYMBOLS } from './comparison-operator';\nimport { SpecificationMetadata } from '@praxisui/specification-core';\n\nexport class FieldSpecification<\n T extends object = any,\n> extends Specification<T> {\n constructor(\n private field: keyof T,\n private operator: ComparisonOperator,\n private value: any,\n metadata?: SpecificationMetadata,\n ) {\n super(metadata);\n }\n\n isSatisfiedBy(obj: T): boolean {\n const fieldValue = obj[this.field];\n\n switch (this.operator) {\n case ComparisonOperator.EQUALS:\n return fieldValue === this.value;\n\n case ComparisonOperator.NOT_EQUALS:\n return fieldValue !== this.value;\n\n case ComparisonOperator.LESS_THAN:\n return fieldValue < this.value;\n\n case ComparisonOperator.LESS_THAN_OR_EQUAL:\n return fieldValue <= this.value;\n\n case ComparisonOperator.GREATER_THAN:\n return fieldValue > this.value;\n\n case ComparisonOperator.GREATER_THAN_OR_EQUAL:\n return fieldValue >= this.value;\n\n case ComparisonOperator.CONTAINS:\n return String(fieldValue).includes(String(this.value));\n\n case ComparisonOperator.STARTS_WITH:\n return String(fieldValue).startsWith(String(this.value));\n\n case ComparisonOperator.ENDS_WITH:\n return String(fieldValue).endsWith(String(this.value));\n\n case ComparisonOperator.IN:\n return Array.isArray(this.value) && this.value.includes(fieldValue);\n\n case ComparisonOperator.NOT_IN:\n return Array.isArray(this.value) && !this.value.includes(fieldValue);\n\n case ComparisonOperator.MATCHES:\n if (this.value === undefined || this.value === null) {\n return false;\n }\n return this.toRegExp(this.value).test(String(fieldValue));\n\n case ComparisonOperator.NOT_MATCHES:\n if (this.value === undefined || this.value === null) {\n return false;\n }\n return !this.toRegExp(this.value).test(String(fieldValue));\n\n case ComparisonOperator.IS_NULL:\n return fieldValue === null || fieldValue === undefined;\n\n case ComparisonOperator.IS_NOT_NULL:\n return fieldValue !== null && fieldValue !== undefined;\n\n case ComparisonOperator.IS_EMPTY:\n return this.isEmpty(fieldValue);\n\n case ComparisonOperator.IS_NOT_EMPTY:\n return this.isNotEmpty(fieldValue);\n\n default:\n throw new Error(`Unsupported operator: ${this.operator}`);\n }\n }\n\n toJSON(): any {\n return {\n type: 'field',\n field: String(this.field),\n operator: this.operator,\n value: this.value,\n metadata: this.metadata,\n };\n }\n\n static override fromJSON<T extends object = any>(\n json: any,\n ): FieldSpecification<T> {\n return new FieldSpecification<T>(\n json.field as keyof T,\n json.operator as ComparisonOperator,\n json.value,\n json.metadata,\n );\n }\n\n clone(): FieldSpecification<T> {\n return new FieldSpecification<T>(\n this.field,\n this.operator,\n this.value,\n this.metadata,\n );\n }\n\n toDSL(): string {\n const fieldName = String(this.field);\n const symbol = OPERATOR_SYMBOLS[this.operator];\n\n switch (this.operator) {\n case ComparisonOperator.CONTAINS:\n return `contains(${fieldName}, ${JSON.stringify(this.value)})`;\n\n case ComparisonOperator.STARTS_WITH:\n return `startsWith(${fieldName}, ${JSON.stringify(this.value)})`;\n\n case ComparisonOperator.ENDS_WITH:\n return `endsWith(${fieldName}, ${JSON.stringify(this.value)})`;\n\n case ComparisonOperator.IN:\n case ComparisonOperator.NOT_IN: {\n const values = Array.isArray(this.value)\n ? this.value.map((v) => JSON.stringify(v)).join(', ')\n : JSON.stringify(this.value);\n const keyword =\n this.operator === ComparisonOperator.NOT_IN ? 'not in' : 'in';\n return `${fieldName} ${keyword} [${values}]`;\n }\n\n case ComparisonOperator.MATCHES:\n return `${fieldName} matches ${this.formatMatchesValue(this.value)}`;\n case ComparisonOperator.NOT_MATCHES:\n return `${fieldName} !~ ${this.formatMatchesValue(this.value)}`;\n\n case ComparisonOperator.IS_NULL:\n return `${fieldName} is null`;\n\n case ComparisonOperator.IS_NOT_NULL:\n return `${fieldName} is not null`;\n\n case ComparisonOperator.IS_EMPTY:\n return `${fieldName} is empty`;\n\n case ComparisonOperator.IS_NOT_EMPTY:\n return `${fieldName} is not empty`;\n\n default:\n return `${fieldName} ${symbol} ${JSON.stringify(this.value)}`;\n }\n }\n\n getField(): keyof T {\n return this.field;\n }\n\n getOperator(): ComparisonOperator {\n return this.operator;\n }\n\n getValue(): any {\n return this.value;\n }\n\n private toRegExp(value: any): RegExp {\n if (value instanceof RegExp) {\n return value;\n }\n\n if (typeof value === 'string') {\n const regexLiteral = value.match(/^\\/(.+)\\/([gimsuy]*)$/);\n if (regexLiteral) {\n return new RegExp(regexLiteral[1], regexLiteral[2]);\n }\n return new RegExp(value);\n }\n\n return new RegExp(String(value));\n }\n\n private isEmpty(value: any): boolean {\n // Consider null/undefined as empty to align with DSL semantics for \"is empty\".\n if (value === null || value === undefined) {\n return true;\n }\n\n if (typeof value === 'string' || Array.isArray(value)) {\n return value.length === 0;\n }\n\n if (value instanceof Set || value instanceof Map) {\n return value.size === 0;\n }\n\n if (typeof value === 'object') {\n return Object.keys(value).length === 0;\n }\n\n return false;\n }\n\n private isNotEmpty(value: any): boolean {\n if (value === null || value === undefined) {\n return false;\n }\n return !this.isEmpty(value);\n }\n\n private formatMatchesValue(value: any): string {\n if (value instanceof RegExp) {\n return value.toString();\n }\n\n if (typeof value === 'string') {\n const regexLiteral = value.match(/^\\/.+\\/[gimsuy]*$/);\n if (regexLiteral) {\n return value;\n }\n }\n\n return JSON.stringify(value);\n }\n}\n","import { Specification } from '@praxisui/specification-core';\nimport { SpecificationMetadata } from '@praxisui/specification-core';\n\nexport class AndSpecification<T extends object = any> extends Specification<T> {\n constructor(\n private specifications: Specification<T>[],\n metadata?: SpecificationMetadata,\n ) {\n super(metadata);\n if (specifications.length === 0) {\n throw new Error('AndSpecification requires at least one specification');\n }\n }\n\n isSatisfiedBy(obj: T): boolean {\n return this.specifications.every((spec) => spec.isSatisfiedBy(obj));\n }\n\n toJSON(): any {\n return {\n type: 'and',\n specs: this.specifications.map((spec) => spec.toJSON()),\n metadata: this.metadata,\n };\n }\n\n static override fromJSON<T extends object = any>(\n json: any,\n ): AndSpecification<T> {\n const specs = json.specs.map((specJson: any) =>\n Specification.fromJSON<T>(specJson),\n );\n return new AndSpecification<T>(specs);\n }\n\n toDSL(): string {\n if (this.specifications.length === 1) {\n return this.specifications[0].toDSL();\n }\n\n const parts = this.specifications.map((spec) => {\n const dsl = spec.toDSL();\n // Add parentheses if needed for precedence\n const kind = spec.getOperatorKind?.();\n if (kind === 'or' || kind === 'xor') {\n return `(${dsl})`;\n }\n return dsl;\n });\n\n return parts.join(' && ');\n }\n\n getSpecifications(): Specification<T>[] {\n return [...this.specifications];\n }\n\n add(specification: Specification<T>): AndSpecification<T> {\n return new AndSpecification<T>(\n [...this.specifications, specification],\n this.metadata,\n );\n }\n\n clone(): AndSpecification<T> {\n return new AndSpecification<T>(\n this.specifications.map((spec) => spec.clone()),\n this.metadata,\n );\n }\n\n override getOperatorKind(): 'and' | 'or' | 'xor' | undefined {\n return 'and';\n }\n}\n","import { Specification } from '@praxisui/specification-core';\nimport { SpecificationMetadata } from '@praxisui/specification-core';\n\nexport class OrSpecification<T extends object = any> extends Specification<T> {\n constructor(\n private specifications: Specification<T>[],\n metadata?: SpecificationMetadata,\n ) {\n super(metadata);\n if (specifications.length === 0) {\n throw new Error('OrSpecification requires at least one specification');\n }\n }\n\n isSatisfiedBy(obj: T): boolean {\n return this.specifications.some((spec) => spec.isSatisfiedBy(obj));\n }\n\n toJSON(): any {\n return {\n type: 'or',\n specs: this.specifications.map((spec) => spec.toJSON()),\n metadata: this.metadata,\n };\n }\n\n static override fromJSON<T extends object = any>(\n json: any,\n ): OrSpecification<T> {\n const specs = json.specs.map((specJson: any) =>\n Specification.fromJSON<T>(specJson),\n );\n return new OrSpecification<T>(specs);\n }\n\n toDSL(): string {\n if (this.specifications.length === 1) {\n return this.specifications[0].toDSL();\n }\n\n const parts = this.specifications.map((spec) => {\n const dsl = spec.toDSL();\n // Add parentheses if needed for precedence\n const kind = spec.getOperatorKind?.();\n if (kind === 'and') {\n return `(${dsl})`;\n }\n return dsl;\n });\n\n return parts.join(' || ');\n }\n\n getSpecifications(): Specification<T>[] {\n return [...this.specifications];\n }\n\n add(specification: Specification<T>): OrSpecification<T> {\n return new OrSpecification<T>(\n [...this.specifications, specification],\n this.metadata,\n );\n }\n\n clone(): OrSpecification<T> {\n return new OrSpecification<T>(\n this.specifications.map((spec) => spec.clone()),\n this.metadata,\n );\n }\n\n override getOperatorKind(): 'and' | 'or' | 'xor' | undefined {\n return 'or';\n }\n}\n","import { Specification } from '@praxisui/specification-core';\nimport { SpecificationMetadata } from '@praxisui/specification-core';\n\nexport class XorSpecification<T extends object = any> extends Specification<T> {\n constructor(\n private specifications: Specification<T>[],\n metadata?: SpecificationMetadata,\n ) {\n super(metadata);\n if (specifications.length < 2) {\n throw new Error('XorSpecification requires at least two specifications');\n }\n }\n\n isSatisfiedBy(obj: T): boolean {\n const satisfiedCount = this.specifications.filter((spec) =>\n spec.isSatisfiedBy(obj),\n ).length;\n return satisfiedCount === 1;\n }\n\n toJSON(): any {\n return {\n type: 'xor',\n specs: this.specifications.map((spec) => spec.toJSON()),\n };\n }\n\n static override fromJSON<T extends object = any>(\n json: any,\n ): XorSpecification<T> {\n const specs = json.specs.map((specJson: any) =>\n Specification.fromJSON<T>(specJson),\n );\n return new XorSpecification<T>(specs);\n }\n\n toDSL(): string {\n const parts = this.specifications.map((spec) => {\n const dsl = spec.toDSL();\n // Add parentheses if needed for precedence\n const kind = spec.getOperatorKind?.();\n if (kind === 'and' || kind === 'or') {\n return `(${dsl})`;\n }\n return dsl;\n });\n\n return parts.join(' xor ');\n }\n\n getSpecifications(): Specification<T>[] {\n return [...this.specifications];\n }\n\n clone(): XorSpecification<T> {\n return new XorSpecification<T>(\n this.specifications.map((spec) => spec.clone()),\n this.metadata,\n );\n }\n\n override getOperatorKind(): 'and' | 'or' | 'xor' | undefined {\n return 'xor';\n }\n}\n","import { Specification } from '@praxisui/specification-core';\nimport { SpecificationMetadata } from '@praxisui/specification-core';\n\nexport class ImpliesSpecification<\n T extends object = any,\n> extends Specification<T> {\n constructor(\n private antecedent: Specification<T>,\n private consequent: Specification<T>,\n metadata?: SpecificationMetadata,\n ) {\n super(metadata);\n }\n\n isSatisfiedBy(obj: T): boolean {\n // A implies B is equivalent to (!A || B)\n return (\n !this.antecedent.isSatisfiedBy(obj) || this.consequent.isSatisfiedBy(obj)\n );\n }\n\n toJSON(): any {\n return {\n type: 'implies',\n antecedent: this.antecedent.toJSON(),\n consequent: this.consequent.toJSON(),\n };\n }\n\n static override fromJSON<T extends object = any>(\n json: any,\n ): ImpliesSpecification<T> {\n const antecedent = Specification.fromJSON<T>(json.antecedent);\n const consequent = Specification.fromJSON<T>(json.consequent);\n return new ImpliesSpecification<T>(antecedent, consequent);\n }\n\n toDSL(): string {\n const antecedentDsl = this.antecedent.toDSL();\n const consequentDsl = this.consequent.toDSL();\n\n // Add parentheses for complex expressions\n const leftPart =\n this.antecedent instanceof AndSpecification ||\n this.antecedent instanceof OrSpecification ||\n this.antecedent instanceof XorSpecification\n ? `(${antecedentDsl})`\n : antecedentDsl;\n\n const rightPart =\n this.consequent instanceof AndSpecification ||\n this.consequent instanceof OrSpecification ||\n this.consequent instanceof XorSpecification\n ? `(${consequentDsl})`\n : consequentDsl;\n\n return `${leftPart} implies ${rightPart}`;\n }\n\n getAntecedent(): Specification<T> {\n return this.antecedent;\n }\n\n getConsequent(): Specification<T> {\n return this.consequent;\n }\n\n clone(): ImpliesSpecification<T> {\n return new ImpliesSpecification<T>(\n this.antecedent.clone(),\n this.consequent.clone(),\n this.metadata,\n );\n }\n}\n\n// Avoid circular imports\nimport { AndSpecification } from './and-specification';\nimport { OrSpecification } from './or-specification';\nimport { XorSpecification } from './xor-specification';\n","import { Specification } from '@praxisui/specification-core';\nimport { SpecificationMetadata } from '@praxisui/specification-core';\n\nexport class NotSpecification<T extends object = any> extends Specification<T> {\n constructor(\n private specification: Specification<T>,\n metadata?: SpecificationMetadata,\n ) {\n super(metadata);\n }\n\n isSatisfiedBy(obj: T): boolean {\n return !this.specification.isSatisfiedBy(obj);\n }\n\n toJSON(): any {\n return {\n type: 'not',\n spec: this.specification.toJSON(),\n };\n }\n\n static override fromJSON<T extends object = any>(\n json: any,\n ): NotSpecification<T> {\n const spec = Specification.fromJSON<T>(json.spec);\n return new NotSpecification<T>(spec);\n }\n\n toDSL(): string {\n const innerDsl = this.specification.toDSL();\n\n // Add parentheses for complex expressions\n if (\n this.specification instanceof AndSpecification ||\n this.specification instanceof OrSpecification ||\n this.specification instanceof XorSpecification ||\n this.specification instanceof ImpliesSpecification\n ) {\n return `!(${innerDsl})`;\n }\n\n return `!${innerDsl}`;\n }\n\n getSpecification(): Specification<T> {\n return this.specification;\n }\n\n clone(): NotSpecification<T> {\n return new NotSpecification<T>(this.specification.clone(), this.metadata);\n }\n}\n\n// Avoid circular imports\nimport { AndSpecification } from './and-specification';\nimport { OrSpecification } from './or-specification';\nimport { XorSpecification } from './xor-specification';\nimport { ImpliesSpecification } from './implies-specification';\n","export type SpecificationFunction<T> = (obj: T, ...args: any[]) => boolean;\n\nexport class FunctionRegistry<T> {\n private static instances = new Map<string, FunctionRegistry<any>>();\n private functions = new Map<string, SpecificationFunction<T>>();\n\n private constructor(private contextKey: string) {}\n\n static getInstance<T>(contextKey: string = 'default'): FunctionRegistry<T> {\n if (!this.instances.has(contextKey)) {\n this.instances.set(contextKey, new FunctionRegistry<T>(contextKey));\n }\n return this.instances.get(contextKey)!;\n }\n\n register(name: string, fn: SpecificationFunction<T>): void {\n this.functions.set(name, fn);\n }\n\n unregister(name: string): boolean {\n return this.functions.delete(name);\n }\n\n get(name: string): SpecificationFunction<T> | undefined {\n return this.functions.get(name);\n }\n\n has(name: string): boolean {\n return this.functions.has(name);\n }\n\n getAll(): Map<string, SpecificationFunction<T>> {\n return new Map(this.functions);\n }\n\n clear(): void {\n this.functions.clear();\n }\n\n execute(name: string, obj: T, ...args: any[]): boolean {\n const fn = this.functions.get(name);\n if (!fn) {\n throw new Error(`Function '${name}' not found in registry`);\n }\n return fn(obj, ...args);\n }\n\n getContextKey(): string {\n return this.contextKey;\n }\n}","import { Specification } from '@praxisui/specification-core';\nimport { FunctionRegistry } from '../registry/function-registry';\nimport { SpecificationMetadata } from '@praxisui/specification-core';\n\ntype FunctionFieldArg = { type: 'field'; field: string };\n\nexport class FunctionSpecification<\n T extends object = any,\n> extends Specification<T> {\n constructor(\n private functionName: string,\n private args: any[],\n private registry?: FunctionRegistry<T>,\n metadata?: SpecificationMetadata,\n ) {\n super(metadata);\n }\n\n isSatisfiedBy(obj: T): boolean {\n const registry = this.registry || FunctionRegistry.getInstance<T>();\n const resolvedArgs = this.args.map((arg) => this.resolveArg(obj, arg));\n return registry.execute(this.functionName, obj, ...resolvedArgs);\n }\n\n toJSON(): any {\n return {\n type: 'function',\n name: this.functionName,\n args: this.args,\n };\n }\n\n static override fromJSON<T extends object = any>(\n json: any,\n registry?: FunctionRegistry<T>,\n ): FunctionSpecification<T> {\n return new FunctionSpecification<T>(json.name, json.args, registry);\n }\n\n toDSL(): string {\n const argsStr = this.args\n .map((arg) => {\n if (typeof arg === 'string') {\n return JSON.stringify(arg);\n }\n if (typeof arg === 'object' && arg !== null && arg.type === 'field') {\n return `${arg.field}`;\n }\n return JSON.stringify(arg);\n })\n .join(', ');\n\n return `${this.functionName}(${argsStr})`;\n }\n\n getFunctionName(): string {\n return this.functionName;\n }\n\n getArgs(): any[] {\n return [...this.args];\n }\n\n getRegistry(): FunctionRegistry<T> | undefined {\n return this.registry;\n }\n\n clone(): FunctionSpecification<T> {\n return new FunctionSpecification<T>(\n this.functionName,\n [...this.args],\n this.registry,\n this.metadata,\n );\n }\n\n private resolveArg(obj: T, arg: any): any {\n if (Array.isArray(arg)) {\n return arg.map((entry) => this.resolveArg(obj, entry));\n }\n\n if (this.isFieldArg(arg)) {\n const lookup = this.getPathValue(obj, arg.field);\n if (lookup.found) return lookup.value;\n // Backward-compatible fallback when field path is not present.\n return arg.field;\n }\n\n return arg;\n }\n\n private isFieldArg(arg: any): arg is FunctionFieldArg {\n return !!(\n arg\n && typeof arg === 'object'\n && arg.type === 'field'\n && typeof arg.field === 'string'\n );\n }\n\n private getPathValue(source: any, path: string): { found: boolean; value: any } {\n if (!source || typeof source !== 'object') {\n return { found: false, value: undefined };\n }\n const raw = String(path || '').trim();\n if (!raw) {\n return { found: false, value: undefined };\n }\n const blocked = new Set(['__proto__', 'prototype', 'constructor']);\n if (blocked.has(raw)) {\n return { found: false, value: undefined };\n }\n if (raw in source) {\n return { found: true, value: (source as any)[raw] };\n }\n if (!raw.includes('.')) {\n return { found: false, value: undefined };\n }\n\n const segments = raw.split('.').filter(Boolean);\n let cursor: any = source;\n for (const segment of segments) {\n if (blocked.has(segment)) {\n return { found: false, value: undefined };\n }\n if (cursor == null || (typeof cursor !== 'object' && typeof cursor !== 'function')) {\n return { found: false, value: undefined };\n }\n if (!(segment in cursor)) {\n return { found: false, value: undefined };\n }\n cursor = cursor[segment];\n }\n\n return { found: true, value: cursor };\n }\n}\n","import { Specification } from '@praxisui/specification-core';\nimport { SpecificationMetadata } from '@praxisui/specification-core';\n\nexport class AtLeastSpecification<\n T extends object = any,\n> extends Specification<T> {\n constructor(\n private minimum: number,\n private specifications: Specification<T>[],\n metadata?: SpecificationMetadata,\n ) {\n super(metadata);\n if (minimum < 0) {\n throw new Error('Minimum count must be non-negative');\n }\n if (specifications.length === 0) {\n throw new Error(\n 'AtLeastSpecification requires at least one specification',\n );\n }\n }\n\n isSatisfiedBy(obj: T): boolean {\n const satisfiedCount = this.specifications.filter((spec) =>\n spec.isSatisfiedBy(obj),\n ).length;\n return satisfiedCount >= this.minimum;\n }\n\n toJSON(): any {\n return {\n type: 'atLeast',\n minimum: this.minimum,\n specs: this.specifications.map((spec) => spec.toJSON()),\n metadata: this.metadata,\n };\n }\n\n static override fromJSON<T extends object = any>(\n json: any,\n ): AtLeastSpecification<T> {\n const specs = json.specs.map((specJson: any) =>\n Specification.fromJSON<T>(specJson),\n );\n return new AtLeastSpecification<T>(json.minimum, specs, json.metadata);\n }\n\n toDSL(): string {\n const specDsls = this.specifications.map((spec) => spec.toDSL());\n const specsStr = specDsls.join(', ');\n return `atLeast(${this.minimum}, [${specsStr}])`;\n }\n\n getMinimum(): number {\n return this.minimum;\n }\n\n getSpecifications(): Specification<T>[] {\n return [...this.specifications];\n }\n\n getSatisfiedCount(obj: T): number {\n return this.specifications.filter((spec) => spec.isSatisfiedBy(obj)).length;\n }\n\n clone(): AtLeastSpecification<T> {\n const clonedSpecs = this.specifications.map((spec) => spec.clone());\n return new AtLeastSpecification<T>(\n this.minimum,\n clonedSpecs,\n this.metadata,\n );\n }\n}\n","import { Specification } from '@praxisui/specification-core';\nimport { SpecificationMetadata } from '@praxisui/specification-core';\n\nexport class ExactlySpecification<\n T extends object = any,\n> extends Specification<T> {\n constructor(\n private exact: number,\n private specifications: Specification<T>[],\n metadata?: SpecificationMetadata,\n ) {\n super(metadata);\n if (exact < 0) {\n throw new Error('Exact count must be non-negative');\n }\n if (specifications.length === 0) {\n throw new Error(\n 'ExactlySpecification requires at least one specification',\n );\n }\n }\n\n isSatisfiedBy(obj: T): boolean {\n const satisfiedCount = this.specifications.filter((spec) =>\n spec.isSatisfiedBy(obj),\n ).length;\n return satisfiedCount === this.exact;\n }\n\n toJSON(): any {\n return {\n type: 'exactly',\n exact: this.exact,\n specs: this.specifications.map((spec) => spec.toJSON()),\n metadata: this.metadata,\n };\n }\n\n static override fromJSON<T extends object = any>(\n json: any,\n ): ExactlySpecification<T> {\n const specs = json.specs.map((specJson: any) =>\n Specification.fromJSON<T>(specJson),\n );\n return new ExactlySpecification<T>(json.exact, specs, json.metadata);\n }\n\n toDSL(): string {\n const specDsls = this.specifications.map((spec) => spec.toDSL());\n const specsStr = specDsls.join(', ');\n return `exactly(${this.exact}, [${specsStr}])`;\n }\n\n getExact(): number {\n return this.exact;\n }\n\n getSpecifications(): Specification<T>[] {\n return [...this.specifications];\n }\n\n getSatisfiedCount(obj: T): number {\n return this.specifications.filter((spec) => spec.isSatisfiedBy(obj)).length;\n }\n\n clone(): ExactlySpecification<T> {\n const clonedSpecs = this.specifications.map((spec) => spec.clone());\n return new ExactlySpecification<T>(this.exact, clonedSpecs, this.metadata);\n }\n}\n","export type TransformFunction = (value: any) => any;\n\nexport class TransformRegistry {\n private static instance: TransformRegistry;\n private transforms = new Map<string, TransformFunction>();\n\n private constructor() {\n // Register default transforms\n this.registerDefaults();\n }\n\n static getInstance(): TransformRegistry {\n if (!this.instance) {\n this.instance = new TransformRegistry();\n }\n return this.instance;\n }\n\n private registerDefaults(): void {\n this.register('toLowerCase', (value: any) => String(value).toLowerCase());\n this.register('toUpperCase', (value: any) => String(value).toUpperCase());\n this.register('trim', (value: any) => String(value).trim());\n this.register('toString', (value: any) => String(value));\n this.register('toNumber', (value: any) => Number(value));\n this.register('toBoolean', (value: any) => Boolean(value));\n this.register('length', (value: any) => {\n if (typeof value === 'string' || Array.isArray(value)) {\n return value.length;\n }\n return 0;\n });\n }\n\n register(name: string, fn: TransformFunction): void {\n this.transforms.set(name, fn);\n }\n\n unregister(name: string): boolean {\n return this.transforms.delete(name);\n }\n\n get(name: string): TransformFunction | undefined {\n return this.transforms.get(name);\n }\n\n has(name: string): boolean {\n return this.transforms.has(name);\n }\n\n getAll(): Map<string, TransformFunction> {\n return new Map(this.transforms);\n }\n\n clear(): void {\n this.transforms.clear();\n this.registerDefaults();\n }\n\n apply(name: string, value: any): any {\n const transform = this.transforms.get(name);\n if (!transform) {\n throw new Error(`Transform '${name}' not found in registry`);\n }\n return transform(value);\n }\n\n applyChain(transforms: string[], value: any): any {\n return transforms.reduce((acc, transformName) => {\n return this.apply(transformName, acc);\n }, value);\n }\n}","import { Specification } from '@praxisui/specification-core';\nimport { ComparisonOperator, OPERATOR_SYMBOLS } from './comparison-operator';\nimport { TransformRegistry } from '../registry/transform-registry';\nimport { SpecificationMetadata } from '@praxisui/specification-core';\n\nexport class FieldToFieldSpecification<\n T extends object = any,\n> extends Specification<T> {\n constructor(\n private fieldA: keyof T,\n private operator: ComparisonOperator,\n private fieldB: keyof T,\n private transformA?: string[],\n private transformB?: string[],\n private transformRegistry?: TransformRegistry,\n metadata?: SpecificationMetadata,\n ) {\n super(metadata);\n }\n\n isSatisfiedBy(obj: T): boolean {\n let valueA = obj[this.fieldA];\n let valueB = obj[this.fieldB];\n\n const registry = this.transformRegistry || TransformRegistry.getInstance();\n\n // Apply transforms if specified\n if (this.transformA && this.transformA.length > 0) {\n valueA = registry.applyChain(this.transformA, valueA);\n }\n if (this.transformB && this.transformB.length > 0) {\n valueB = registry.applyChain(this.transformB, valueB);\n }\n\n switch (this.operator) {\n case ComparisonOperator.EQUALS:\n return valueA === valueB;\n\n case ComparisonOperator.NOT_EQUALS:\n return valueA !== valueB;\n\n case ComparisonOperator.LESS_THAN:\n return valueA < valueB;\n\n case ComparisonOperator.LESS_THAN_OR_EQUAL:\n return valueA <= valueB;\n\n case ComparisonOperator.GREATER_THAN:\n return valueA > valueB;\n\n case ComparisonOperator.GREATER_THAN_OR_EQUAL:\n return valueA >= valueB;\n\n case ComparisonOperator.CONTAINS:\n return String(valueA).includes(String(valueB));\n\n case ComparisonOperator.STARTS_WITH:\n return String(valueA).startsWith(String(valueB));\n\n case ComparisonOperator.ENDS_WITH:\n return String(valueA).endsWith(String(valueB));\n\n case ComparisonOperator.IN:\n return Array.isArray(valueB) && valueB.includes(valueA);\n\n case ComparisonOperator.NOT_IN:\n return Array.isArray(valueB) && !valueB.includes(valueA);\n\n case ComparisonOperator.MATCHES:\n if (valueB === undefined || valueB === null) {\n return false;\n }\n return this.toRegExp(valueB).test(String(valueA));\n case ComparisonOperator.NOT_MATCHES:\n if (valueB === undefined || valueB === null) {\n return false;\n }\n return !this.toRegExp(valueB).test(String(valueA));\n\n case ComparisonOperator.IS_NULL:\n return valueA === null || valueA === undefined;\n\n case ComparisonOperator.IS_NOT_NULL:\n return valueA !== null && valueA !== undefined;\n\n case ComparisonOperator.IS_EMPTY:\n return this.isEmpty(valueA);\n\n case ComparisonOperator.IS_NOT_EMPTY:\n return this.isNotEmpty(valueA);\n\n default:\n throw new Error(`Unsupported operator: ${this.operator}`);\n }\n }\n\n toJSON(): any {\n return {\n type: 'fieldToField',\n fieldA: String(this.fieldA),\n operator: this.operator,\n fieldB: String(this.fieldB),\n transformA: this.transformA,\n transformB: this.transformB,\n metadata: this.metadata,\n };\n }\n\n static override fromJSON<T extends object = any>(\n json: any,\n transformRegistry?: TransformRegistry,\n ): FieldToFieldSpecification<T> {\n return new FieldToFieldSpecification<T>(\n json.fieldA as keyof T,\n json.operator as ComparisonOperator,\n json.fieldB as keyof T,\n json.transformA,\n json.transformB,\n transformRegistry,\n json.metadata,\n );\n }\n\n toDSL(): string {\n const fieldAName = String(this.fieldA);\n const fieldBName = String(this.fieldB);\n\n let leftField = fieldAName;\n let rightField = fieldBName;\n\n // Apply transform notation\n if (this.transformA && this.transformA.length > 0) {\n leftField = `${fieldAName}.${this.transformA.join('.')}`;\n }\n if (this.transformB && this.transformB.length > 0) {\n rightField = `${fieldBName}.${this.transformB.join('.')}`;\n }\n\n const symbol = OPERATOR_SYMBOLS[this.operator];\n\n switch (this.operator) {\n case ComparisonOperator.CONTAINS:\n return `contains(${leftField}, ${rightField})`;\n\n case ComparisonOperator.STARTS_WITH:\n return `startsWith(${leftField}, ${rightField})`;\n\n case ComparisonOperator.ENDS_WITH:\n return `endsWith(${leftField}, ${rightField})`;\n\n case ComparisonOperator.IN:\n case ComparisonOperator.NOT_IN: {\n const keyword =\n this.operator === ComparisonOperator.NOT_IN ? 'not in' : 'in';\n return `${leftField} ${keyword} ${rightField}`;\n }\n\n case ComparisonOperator.MATCHES:\n return `${leftField} matches ${rightField}`;\n case ComparisonOperator.NOT_MATCHES:\n return `${leftField} !~ ${rightField}`;\n\n case ComparisonOperator.IS_NULL:\n return `${leftField} is null`;\n\n case ComparisonOperator.IS_NOT_NULL:\n return `${leftField} is not null`;\n\n case ComparisonOperator.IS_EMPTY:\n return `${leftField} is empty`;\n\n case ComparisonOperator.IS_NOT_EMPTY:\n return `${leftField} is not empty`;\n\n default:\n return `${leftField} ${symbol} ${rightField}`;\n }\n }\n\n getFieldA(): keyof T {\n return this.fieldA;\n }\n\n getFieldB(): keyof T {\n return this.fieldB;\n }\n\n getOperator(): ComparisonOperator {\n return this.operator;\n }\n\n getTransformA(): string[] | undefined {\n return this.transformA ? [...this.transformA] : undefined;\n }\n\n getTransformB(): string[] | undefined {\n return this.transformB ? [...this.transformB] : undefined;\n }\n\n clone(): FieldToFieldSpecification<T> {\n return new FieldToFieldSpecification<T>(\n this.fieldA,\n this.operator,\n this.fieldB,\n this.transformA ? [...this.transformA] : undefined,\n this.transformB ? [...this.transformB] : undefined,\n this.transformRegistry,\n this.metadata,\n );\n }\n\n private toRegExp(value: any): RegExp {\n if (value instanceof RegExp) {\n return value;\n }\n\n if (typeof value === 'string') {\n const regexLiteral = value.match(/^\\/(.+)\\/([gimsuy]*)$/);\n if (regexLiteral) {\n return new RegExp(regexLiteral[1], regexLiteral[2]);\n }\n return new RegExp(value);\n }\n\n return new RegExp(String(value));\n }\n\n private isEmpty(value: any): boolean {\n if (value === null || value === undefined) {\n return true;\n }\n\n if (typeof value === 'string' || Array.isArray(value)) {\n return value.length === 0;\n }\n\n if (value instanceof Set || value instanceof Map) {\n return value.size === 0;\n }\n\n if (typeof value === 'object') {\n return Object.keys(value).length === 0;\n }\n\n return false;\n }\n\n private isNotEmpty(value: any): boolean {\n if (value === null || value === undefined) {\n return false;\n }\n return !this.isEmpty(value);\n }\n}\n","export interface ContextProvider {\n getValue(path: string): any;\n hasValue(path: string): boolean;\n}\n\nexport class DefaultContextProvider implements ContextProvider {\n constructor(private context: Record<string, any> = {}) {}\n\n getValue(path: string): any {\n return this.getNestedValue(this.context, path);\n }\n\n hasValue(path: string): boolean {\n try {\n const value = this.getNestedValue(this.context, path);\n return value !== undefined;\n } catch {\n return false;\n }\n }\n\n private getNestedValue(obj: any, path: string): any {\n return path.split('.').reduce((current, key) => {\n return current && current[key] !== undefined ? current[key] : undefined;\n }, obj);\n }\n\n setContext(context: Record<string, any>): void {\n this.context = context;\n }\n\n updateContext(updates: Record<string, any>): void {\n this.context = { ...this.context, ...updates };\n }\n\n getContext(): Record<string, any> {\n return { ...this.context };\n }\n}\n\nexport class DateContextProvider implements ContextProvider {\n getValue(path: string): any {\n switch (path) {\n case 'now':\n return new Date();\n case 'today':\n const today = new Date();\n today.setHours(0, 0, 0, 0);\n return today;\n case 'timestamp':\n return Date.now();\n default:\n return undefined;\n }\n }\n\n hasValue(path: string): boolean {\n return ['now', 'today', 'timestamp'].includes(path);\n }\n}\n\nexport class CompositeContextProvider implements ContextProvider {\n constructor(private providers: ContextProvider[]) {}\n\n getValue(path: string): any {\n for (const provider of this.providers) {\n if (provider.hasValue(path)) {\n return provider.getValue(path);\n }\n }\n return undefined;\n }\n\n hasValue(path: string): boolean {\n return this.providers.some(provider => provider.hasValue(path));\n }\n\n addProvider(provider: ContextProvider): void {\n this.providers.push(provider);\n }\n\n removeProvider(provider: ContextProvider): void {\n const index = this.providers.indexOf(provider);\n if (index > -1) {\n this.providers.splice(index, 1);\n }\n }\n}","import { Specification } from '@praxisui/specification-core';\nimport {\n ContextProvider,\n DefaultContextProvider,\n} from '../context/context-provider';\nimport { SpecificationMetadata } from '@praxisui/specification-core';\n\nexport class ContextualSpecification<\n T extends object,\n> extends Specification<T> {\n private static readonly TOKEN_REGEX = /\\$\\{([^}]+)\\}/g;\n\n constructor(\n private template: string,\n private contextProvider?: ContextProvider,\n metadata?: SpecificationMetadata,\n ) {\n super(metadata);\n }\n\n isSatisfiedBy(obj: T): boolean {\n const resolvedExpression = this.resolveTokens(this.template, obj);\n // This would need to be evaluated by the DSL parser\n // For now, we'll throw an error indicating this needs the parser\n throw new Error(\n `ContextualSpecification requires DSL parser to evaluate: ${resolvedExpression}`,\n );\n }\n\n toJSON(): any {\n return {\n type: 'contextual',\n template: this.template,\n metadata: this.metadata,\n };\n }\n\n static override fromJSON<T extends object>(\n json: any,\n contextProvider?: ContextProvider,\n ): ContextualSpecification<T> {\n return new ContextualSpecification<T>(\n json.template,\n contextProvider,\n json.metadata,\n );\n }\n\n toDSL(): string {\n return this.template;\n }\n\n resolveTokens(template: string, obj: T): string {\n const provider = this.contextProvider || new DefaultContextProvider();\n\n return template.replace(\n ContextualSpecification.TOKEN_REGEX,\n (match, tokenPath) => {\n // First try to resolve from context\n if (provider.hasValue(tokenPath)) {\n const value = provider.getValue(tokenPath);\n return this.valueToString(value);\n }\n\n // Then try to resolve from object fields\n if (tokenPath in obj) {\n const value = (obj as any)[tokenPath];\n return this.valueToString(value);\n }\n\n // If not found, return the original token\n return match;\n },\n );\n }\n\n private valueToString(value: any): string {\n if (value === null || value === undefined) {\n return 'null';\n }\n if (typeof value === 'string') {\n return `\"${value}\"`;\n }\n if (typeof value === 'number' || typeof value === 'boolean') {\n return String(value);\n }\n if (value instanceof Date) {\n return `\"${value.toISOString()}\"`;\n }\n return JSON.stringify(value);\n }\n\n getTemplate(): string {\n return this.template;\n }\n\n getContextProvider(): ContextProvider | undefined {\n return this.contextProvider;\n }\n\n setContextProvider(provider: ContextProvider): ContextualSpecification<T> {\n return new ContextualSpecification<T>(\n this.template,\n provider,\n this.metadata,\n );\n }\n\n getTokens(): string[] {\n const tokens: string[] = [];\n let match;\n const regex = new RegExp(ContextualSpecification.TOKEN_REGEX);\n\n while ((match = regex.exec(this.template)) !== null) {\n tokens.push(match[1]);\n }\n\n return tokens;\n }\n\n clone(): ContextualSpecification<T> {\n return new ContextualSpecification<T>(\n this.template,\n this.contextProvider,\n this.metadata,\n );\n }\n}\n","import { Specification } from '@praxisui/specification-core';\nimport { SpecificationMetadata } from '@praxisui/specification-core';\n\n/**\n * Types of conditional validation\n */\nexport enum ConditionalType {\n REQUIRED_IF = 'requiredIf',\n VISIBLE_IF = 'visibleIf',\n DISABLED_IF = 'disabledIf',\n READONLY_IF = 'readonlyIf',\n}\n\n/**\n * Base class for conditional validators\n */\nexport abstract class ConditionalSpecification<\n T extends object = any,\n> extends Specification<T> {\n constructor(\n protected condition: Specification<T>,\n protected conditionalType: ConditionalType,\n metadata?: SpecificationMetadata,\n ) {\n super(metadata);\n }\n\n getCondition(): Specification<T> {\n return this.condition;\n }\n\n getConditionalType(): ConditionalType {\n return this.conditionalType;\n }\n\n abstract override clone(): ConditionalSpecification<T>;\n}\n\n/**\n * Validates that a field is required when a condition is met\n */\nexport class RequiredIfSpecification<\n T extends object = any,\n> extends ConditionalSpecification<T> {\n constructor(\n private field: keyof T,\n condition: Specification<T>,\n metadata?: SpecificationMetadata,\n ) {\n super(condition, ConditionalType.REQUIRED_IF, metadata);\n }\n\n isSatisfiedBy(obj: T): boolean {\n // If condition is not met, validation passes (field is not required)\n if (!this.condition.isSatisfiedBy(obj)) {\n return true;\n }\n\n // If condition is met, check if field has a value\n const fieldValue = obj[this.field];\n return fieldValue !== null && fieldValue !== undefined && fieldValue !== '';\n }\n\n toJSON(): any {\n return {\n type: 'requiredIf',\n field: String(this.field),\n condition: this.condition.toJSON(),\n metadata: this.metadata,\n };\n }\n\n static override fromJSON<T extends object = any>(\n json: any,\n ): RequiredIfSpecification<T> {\n // This would need the SpecificationFactory to reconstruct the condition\n throw new Error(\n 'Use SpecificationFactory.fromJSON() for proper reconstruction',\n );\n }\n\n toDSL(): string {\n return `requiredIf(${String(this.field)}, ${this.condition.toDSL()})`;\n }\n\n clone(): RequiredIfSpecification<T> {\n return new RequiredIfSpecification<T>(\n this.field,\n this.condition.clone(),\n this.metadata,\n );\n }\n\n getField(): keyof T {\n return this.field;\n }\n}\n\n/**\n * Determines if a field should be visible based on a condition\n */\nexport class VisibleIfSpecification<\n T extends object = any,\n> extends ConditionalSpecification<T> {\n constructor(\n private field: keyof T,\n condition: Specification<T>,\n metadata?: SpecificationMetadata,\n ) {\n super(condition, ConditionalType.VISIBLE_IF, metadata);\n }\n\n isSatisfiedBy(obj: T): boolean {\n // This returns whether the field should be visible\n return this.condition.isSatisfiedBy(obj);\n }\n\n toJSON(): any {\n return {\n type: 'visibleIf',\n field: String(this.field),\n condition: this.condition.toJSON(),\n metadata: this.metadata,\n };\n }\n\n static override fromJSON<T extends object = any>(\n json: any,\n ): VisibleIfSpecification<T> {\n throw new Error(\n 'Use SpecificationFactory.fromJSON() for proper reconstruction',\n );\n }\n\n toDSL(): string {\n return `visibleIf(${String(this.field)}, ${this.condition.toDSL()})`;\n }\n\n clone(): VisibleIfSpecification<T> {\n return new VisibleIfSpecification<T>(\n this.field,\n this.condition.clone(),\n this.metadata,\n );\n }\n\n getField(): keyof T {\n return this.field;\n }\n}\n\n/**\n * Determines if a field should be disabled based on a condition\n */\nexport class DisabledIfSpecification<\n T extends object = any,\n> extends ConditionalSpecification<T> {\n constructor(\n private field: keyof T,\n condition: Specification<T>,\n metadata?: SpecificationMetadata,\n ) {\n super(condition, ConditionalType.DISABLED_IF, metadata);\n }\n\n isSatisfiedBy(obj: T): boolean {\n // This returns whether the field should be disabled\n return this.condition.isSatisfiedBy(obj);\n }\n\n toJSON(): any {\n return {\n type: 'disabledIf',\n field: String(this.field),\n condition: this.condition.toJSON(),\n metadata: this.metadata,\n };\n }\n\n static override fromJSON<T extends object = any>(\n json: any,\n ): DisabledIfSpecification<T> {\n throw new Error(\n 'Use SpecificationFactory.fromJSON() for proper reconstruction',\n );\n }\n\n toDSL(): string {\n return `disabledIf(${String(this.field)}, ${this.condition.toDSL()})`;\n }\n\n clone(): DisabledIfSpecification<T> {\n return new DisabledIfSpecification<T>(\n this.field,\n this.condition.clone(),\n this.metadata,\n );\n }\n\n getField(): keyof T {\n return this.field;\n }\n}\n\n/**\n * Determines if a field should be readonly based on a condition\n */\nexport class ReadonlyIfSpecification<\n T extends object = any,\n> extends ConditionalSpecification<T> {\n constructor(\n private field: keyof T,\n condition: Specification<T>,\n metadata?: SpecificationMetadata,\n ) {\n super(condition, ConditionalType.READONLY_IF, metadata);\n }\n\n isSatisfiedBy(obj: T): boolean {\n // This returns whether the field should be readonly\n return this.condition.isSatisfiedBy(obj);\n }\n\n toJSON(): any {\n return {\n type: 'readonlyIf',\n field: String(this.field),\n condition: this.condition.toJSON(),\n metadata: this.metadata,\n };\n }\n\n static override fromJSON<T extends object = any>(\n json: any,\n ): ReadonlyIfSpecification<T> {\n throw new Error(\n 'Use SpecificationFactory.fromJSON() for proper reconstruction',\n );\n }\n\n toDSL(): string {\n return `readonlyIf(${String(this.field)}, ${this.condition.toDSL()})`;\n }\n\n clone(): ReadonlyIfSpecification<T> {\n return new ReadonlyIfSpecification<T>(\n this.field,\n this.condition.clone(),\n this.metadata,\n );\n }\n\n getField(): keyof T {\n return this.field;\n }\n}\n","import { Specification } from '@praxisui/specification-core';\nimport { SpecificationMetadata } from '@praxisui/specification-core';\n\n/**\n * Applies a specification to all elements in an array field\n */\nexport class ForEachSpecification<\n T extends object = any,\n TItem extends object = any,\n> extends Specification<T> {\n constructor(\n private arrayField: keyof T,\n private itemSpecification: Specification<TItem>,\n metadata?: SpecificationMetadata,\n ) {\n super(metadata);\n }\n\n isSatisfiedBy(obj: T): boolean {\n const arrayValue = obj[this.arrayField];\n\n // If not an array, fail validation\n if (!Array.isArray(arrayValue)) {\n return false;\n }\n\n // Check if all items satisfy the specification\n return arrayValue.every((item: TItem) => {\n try {\n return this.itemSpecification.isSatisfiedBy(item);\n } catch (error) {\n // If item doesn't match expected structure, fail validation\n return false;\n }\n });\n }\n\n toJSON(): any {\n return {\n type: 'forEach',\n arrayField: String(this.arrayField),\n itemSpecification: this.itemSpecification.toJSON(),\n metadata: this.metadata,\n };\n }\n\n static override fromJSON<T extends object = any>(\n json: any,\n ): ForEachSpecification<T> {\n throw new Error(\n 'Use SpecificationFactory.fromJSON() for proper reconstruction',\n );\n }\n\n toDSL(): string {\n return `forEach(${String(this.arrayField)}, ${this.itemSpecification.toDSL()})`;\n }\n\n clone(): ForEachSpecification<T, TItem> {\n return new ForEachSpecification<T, TItem>(\n this.arrayField,\n this.itemSpecification.clone(),\n this.metadata,\n );\n }\n\n getArrayField(): keyof T {\n return this.arrayField;\n }\n\n getItemSpecification(): Specification<TItem> {\n return this.itemSpecification;\n }\n\n /**\n * Gets items that fail the specification\n */\n getFailingItems(obj: T): { index: number; item: any; errors?: string[] }[] {\n const arrayValue = obj[this.arrayField];\n\n if (!Array.isArray(arrayValue)) {\n return [];\n }\n\n const failingItems: { index: number; item: any; errors?: string[] }[] = [];\n\n arrayValue.forEach((item: any, index: number) => {\n if (!this.itemSpecification.isSatisfiedBy(item)) {\n failingItems.push({\n index,\n item,\n errors: [`Item at index ${index} failed validation`],\n });\n }\n });\n\n return failingItems;\n }\n}\n\n/**\n * Ensures all items in an array are unique based on a field or key selector\n */\nexport class UniqueBySpecification<\n T extends object = any,\n> extends Specification<T> {\n constructor(\n private arrayField: keyof T,\n private keySelector: string | ((item: any) => any),\n metadata?: SpecificationMetadata,\n ) {\n super(metadata);\n }\n\n isSatisfiedBy(obj: T): boolean {\n const arrayValue = obj[this.arrayField];\n\n // If not an array, pass validation (empty case)\n if (!Array.isArray(arrayValue)) {\n return true;\n }\n\n // If empty array, pass validation\n if (arrayValue.length === 0) {\n return true;\n }\n\n const seen = new Set();\n\n for (const item of arrayValue) {\n let key: any;\n\n if (typeof this.keySelector === 'string') {\n // Field name selector\n key = item?.[this.keySelector];\n } else {\n // Function selector\n key = this.keySelector(item);\n }\n\n // Convert key to string for Set comparison\n const keyStr = JSON.stringify(key);\n\n if (seen.has(keyStr)) {\n return false; // Duplicate found\n }\n\n seen.add(keyStr);\n }\n\n return true;\n }\n\n toJSON(): any {\n return {\n type: 'uniqueBy',\n arrayField: String(this.arrayField),\n keySelector:\n typeof this.keySelector === 'string' ? this.keySelector : '[Function]',\n metadata: this.metadata,\n };\n }\n\n static override fromJSON<T extends object = any>(\n json: any,\n ): UniqueBySpecification<T> {\n return new UniqueBySpecification<T>(\n json.arrayField as keyof T,\n json.keySelector,\n json.metadata,\n );\n }\n\n toDSL(): string {\n const selector =\n typeof this.keySelector === 'string'\n ? `\"${this.keySelector}\"`\n : '[Function]';\n return `uniqueBy(${String(this.arrayField)}, ${selector})`;\n }\n\n clone(): UniqueBySpecification<T> {\n return new UniqueBySpecification<T>(\n this.arrayField,\n this.keySelector,\n this.metadata,\n );\n }\n\n getArrayField(): keyof T {\n return this.arrayField;\n }\n\n getKeySelector(): string | ((item: any) => any) {\n return this.keySelector;\n }\n\n /**\n * Gets duplicate items found in the array\n */\n getDuplicates(obj: T): { key: any; items: { index: number; item: any }[] }[] {\n const arrayValue = obj[this.arrayField];\n\n if (!Array.isArray(arrayValue)) {\n return [];\n }\n\n const keyMap = new Map<string, { index: number; item: any }[]>();\n\n arrayValue.forEach((item: any, index: number) => {\n let key: any;\n\n if (typeof this.keySelector === 'string') {\n key = item?.[this.keySelector];\n } else {\n key = this.keySelector(item);\n }\n\n const keyStr = JSON.stringify(key);\n\n if (!keyMap.has(keyStr)) {\n keyMap.set(keyStr, []);\n }\n\n keyMap.get(keyStr)!.push({ index, item });\n });\n\n // Return only keys that have duplicates\n return Array.from(keyMap.entries())\n .filter(([_, items]) => items.length > 1)\n .map(([keyStr, items]) => ({\n key: JSON.parse(keyStr),\n items,\n }));\n }\n}\n\n/**\n * Validates that an array has a minimum number of elements\n */\nexport class MinLengthSpecification<\n T extends object = any,\n> extends Specification<T> {\n constructor(\n private arrayField: keyof T,\n private minLength: number,\n metadata?: SpecificationMetadata,\n ) {\n super(metadata);\n }\n\n isSatisfiedBy(obj: T): boolean {\n const arrayValue = obj[this.arrayField];\n\n if (!Array.isArray(arrayValue)) {\n return false;\n }\n\n return arrayValue.length >= this.minLength;\n }\n\n toJSON(): any {\n return {\n type: 'minLength',\n arrayField: String(this.arrayField),\n minLength: this.minLength,\n metadata: this.metadata,\n };\n }\n\n static override fromJSON<T extends object = any>(\n json: any,\n ): MinLengthSpecification<T> {\n return new MinLengthSpecification<T>(\n json.arrayField as keyof T,\n json.minLength,\n json.metadata,\n );\n }\n\n toDSL(): string {\n return `minLength(${String(this.arrayField)}, ${this.minLength})`;\n }\n\n clone(): MinLengthSpecification<T> {\n return new MinLengthSpecification<T>(\n this.arrayField,\n this.minLength,\n this.metadata,\n );\n }\n\n getArrayField(): keyof T {\n return this.arrayField;\n }\n\n getMinLength(): number {\n return this.minLength;\n }\n}\n\n/**\n * Validates that an array has a maximum number of elements\n */\nexport class MaxLengthSpecification<\n T extends object = any,\n> extends Specification<T> {\n constructor(\n private arrayField: keyof T,\n private maxLength: number,\n metadata?: SpecificationMetadata,\n ) {\n super(metadata);\n }\n\n isSatisfiedBy(obj: T): boolean {\n const arrayValue = obj[this.arrayField];\n\n if (!Array.isArray(arrayValue)) {\n return true; // If not array, max length doesn't apply\n }\n\n return arrayValue.length <= this.maxLength;\n }\n\n toJSON(): any {\n return {\n type: 'maxLength',\n arrayField: String(this.arrayField),\n maxLength: this.maxLength,\n metadata: this.metadata,\n };\n }\n\n static override fromJSON<T extends object = any>(\n json: any,\n ): MaxLengthSpecification<T> {\n return new MaxLengthSpecification<T>(\n json.arrayField as keyof T,\n json.maxLength,\n json.metadata,\n );\n }\n\n toDSL(): string {\n return `maxLength(${String(this.arrayField)}, ${this.maxLength})`;\n }\n\n clone(): MaxLengthSpecification<T> {\n return new MaxLengthSpecification<T>(\n this.arrayField,\n this.maxLength,\n this.metadata,\n );\n }\n\n getArrayField(): keyof T {\n return this.arrayField;\n }\n\n getMaxLength(): number {\n return this.maxLength;\n }\n}\n","import { Specification } from '@praxisui/specification-core';\nimport { SpecificationMetadata } from '@praxisui/specification-core';\n\n/**\n * Only applies the inner specification if the field is defined (not null, undefined, or empty)\n */\nexport class IfDefinedSpecification<\n T extends object = any,\n> extends Specification<T> {\n constructor(\n private field: keyof T,\n private innerSpecification: Specification<T>,\n metadata?: SpecificationMetadata,\n ) {\n super(metadata);\n }\n\n isSatisfiedBy(obj: T): boolean {\n const fieldValue = obj[this.field];\n\n // If field is not defined, validation passes\n if (this.isUndefined(fieldValue)) {\n return true;\n }\n\n // If field is defined, apply the inner specification\n return this.innerSpecification.isSatisfiedBy(obj);\n }\n\n private isUndefined(value: any): boolean {\n return value === null || value === undefined || value === '';\n }\n\n toJSON(): any {\n return {\n type: 'ifDefined',\n field: String(this.field),\n specification: this.innerSpecification.toJSON(),\n metadata: this.metadata,\n };\n }\n\n static override fromJSON<T extends object = any>(\n json: any,\n ): IfDefinedSpecification<T> {\n throw new Error(\n 'Use SpecificationFactory.fromJSON() for proper reconstruction',\n );\n }\n\n toDSL(): string {\n return `ifDefined(${String(this.field)}, ${this.innerSpecification.toDSL()})`;\n }\n\n clone(): IfDefinedSpecification<T> {\n return new IfDefinedSpecification<T>(\n this.field,\n this.innerSpecification.clone(),\n this.metadata,\n );\n }\n\n getField(): keyof T {\n return this.field;\n }\n\n getInnerSpecification(): Specification<T> {\n return this.innerSpecification;\n }\n}\n\n/**\n * Only applies the inner specification if the field value is not null\n */\nexport class IfNotNullSpecification<\n T extends object = any,\n> extends Specification<T> {\n constructor(\n private field: keyof T,\n private innerSpecification: Specification<T>,\n metadata?: SpecificationMetadata,\n ) {\n super(metadata);\n }\n\n isSatisfiedBy(obj: T): boolean {\n const fieldValue = obj[this.field];\n\n // If field is null, validation passes\n if (fieldValue === null) {\n return true;\n }\n\n // If field is not null, apply the inner specification\n return this.innerSpecification.isSatisfiedBy(obj);\n }\n\n toJSON(): any {\n return {\n type: 'ifNotNull',\n field: String(this.field),\n specification: this.innerSpecification.toJSON(),\n metadata: this.metadata,\n };\n }\n\n static override fromJSON<T extends object = any>(\n json: any,\n ): IfNotNullSpecification<T> {\n throw new Error(\n 'Use SpecificationFactory.fromJSON() for proper reconstruction',\n );\n }\n\n toDSL(): string {\n return `ifNotNull(${String(this.field)}, ${this.innerSpecification.toDSL()})`;\n }\n\n clone(): IfNotNullSpecification<T> {\n return new IfNotNullSpecification<T>(\n this.field,\n this.innerSpecification.clone(),\n this.metadata,\n );\n }\n\n getField(): keyof T {\n return this.field;\n }\n\n getInnerSpecification(): Specification<T> {\n return this.innerSpecification;\n }\n}\n\n/**\n * Only applies the inner specification if the field exists as a property on the object\n */\nexport class IfExistsSpecification<\n T extends object = any,\n> extends Specification<T> {\n constructor(\n private field: keyof T,\n private innerSpecification: Specification<T>,\n metadata?: SpecificationMetadata,\n ) {\n super(metadata);\n }\n\n isSatisfiedBy(obj: T): boolean {\n // If field doesn't exist as a property, validation passes\n if (!(this.field in obj)) {\n return true;\n }\n\n // If field exists, apply the inner specification\n return this.innerSpecification.isSatisfiedBy(obj);\n }\n\n toJSON(): any {\n return {\n type: 'ifExists',\n field: String(this.field),\n specification: this.innerSpecification.toJSON(),\n metadata: this.metadata,\n };\n }\n\n static override fromJSON<T extends object = any>(\n json: any,\n ): IfExistsSpecification<T> {\n throw new Error(\n 'Use SpecificationFactory.fromJSON() for proper reconstruction',\n );\n }\n\n toDSL(): string {\n return `ifExists(${String(this.field)}, ${this.innerSpecification.toDSL()})`;\n }\n\n clone(): IfExistsSpecification<T> {\n return new IfExistsSpecification<T>(\n this.field,\n this.innerSpecification.clone(),\n this.metadata,\n );\n }\n\n getField(): keyof T {\n return this.field;\n }\n\n getInnerSpecification(): Specification<T> {\n return this.innerSpecification;\n }\n}\n\n/**\n * Provides a default value for a field if it's undefined, then applies the specification\n */\nexport class WithDefaultSpecification<\n T extends object = any,\n> extends Specification<T> {\n constructor(\n private field: keyof T,\n private defaultValue: any,\n private innerSpecification: Specification<T>,\n metadata?: SpecificationMetadata,\n ) {\n super(metadata);\n }\n\n isSatisfiedBy(obj: T): boolean {\n // Create a copy of the object with default value if field is undefined\n const objWithDefault = { ...obj };\n\n if (this.isUndefined(obj[this.field])) {\n (objWithDefault as any)[this.field] = this.defaultValue;\n }\n\n return this.innerSpecification.isSatisfiedBy(objWithDefault);\n }\n\n private isUndefined(value: any): boolean {\n return value === null || value === undefined;\n }\n\n toJSON(): any {\n return {\n type: 'withDefault',\n field: String(this.field),\n defaultValue: this.defaultValue,\n specification: this.innerSpecification.toJSON(),\n metadata: this.metadata,\n };\n }\n\n static override fromJSON<T extends object = any>(\n json: any,\n ): WithDefaultSpecification<T> {\n throw new Error(\n 'Use SpecificationFactory.fromJSON() for proper reconstruction',\n );\n }\n\n toDSL(): string {\n const defaultStr = JSON.stringify(this.defaultValue);\n return `withDefault(${String(this.field)}, ${defaultStr}, ${this.innerSpecification.toDSL()})`;\n }\n\n clone(): WithDefaultSpecification<T> {\n return new WithDefaultSpecification<T>(\n this.field,\n this.defaultValue,\n this.innerSpecification.clone(),\n this.metadata,\n );\n }\n\n getField(): keyof T {\n return this.field;\n }\n\n getDefaultValue(): any {\n return this.defaultValue;\n }\n\n getInnerSpecification(): Specification<T> {\n return this.innerSpecification;\n }\n}\n","import { Specification } from '@praxisui/specification-core';\nimport { SpecificationMetadata } from '@praxisui/specification-core';\nimport {\n RequiredIfSpecification,\n VisibleIfSpecification,\n DisabledIfSpecification,\n ReadonlyIfSpecification,\n} from './conditional-validators';\n\n/**\n * Form validation result for a specific field\n */\nexport interface FieldValidationResult {\n field: string;\n isValid: boolean;\n errors: string[];\n warnings: string[];\n metadata?: SpecificationMetadata;\n}\n\n/**\n * Complete form validation result\n */\nexport interface FormValidationResult {\n isValid: boolean;\n fields: Record<string, FieldValidationResult>;\n globalErrors: string[];\n warnings: string[];\n}\n\n/**\n * Field rules configuration\n */\nexport interface FieldRules<T extends object = any> {\n validation?: Specification<T>[];\n required?: boolean | Specification<T>;\n visible?: boolean | Specification<T>;\n disabled?: boolean | Specification<T>;\n readonly?: boolean | Specification<T>;\n metadata?: SpecificationMetadata;\n}\n\n/**\n * Form specification that manages validation rules for multiple fields\n */\nexport class FormSpecification<\n T extends object = any,\n> extends Specification<T> {\n private fieldRules = new Map<keyof T, FieldRules<T>>();\n private globalValidations: Specification<T>[] = [];\n\n constructor(metadata?: SpecificationMetadata) {\n super(metadata);\n }\n\n /**\n * Adds validation rules for a specific field\n */\n addFieldRules(field: keyof T, rules: FieldRules<T>): FormSpecification<T> {\n this.fieldRules.set(field, rules);\n return this;\n }\n\n /**\n * Adds a global validation rule that applies to the entire form\n */\n addGlobalValidation(specification: Specification<T>): FormSpecification<T> {\n this.globalValidations.push(specification);\n return this;\n }\n\n /**\n * Sets required condition for a field\n */\n setRequired(\n field: keyof T,\n condition: boolean | Specification<T>,\n ): FormSpecification<T> {\n const existing = this.fieldRules.get(field) || {};\n existing.required = condition;\n this.fieldRules.set(field, existing);\n return this;\n }\n\n /**\n * Sets visibility condition for a field\n */\n setVisible(\n field: keyof T,\n condition: boolean | Specification<T>,\n ): FormSpecification<T> {\n const existing = this.fieldRules.get(field) || {};\n existing.visible = condition;\n this.fieldRules.set(field, existing);\n return this;\n }\n\n /**\n * Sets disabled condition for a field\n */\n setDisabled(\n field: keyof T,\n condition: boolean | Specification<T>,\n ): FormSpecification<T> {\n const existing = this.fieldRules.get(field) || {};\n existing.disabled = condition;\n this.fieldRules.set(field, existing);\n return this;\n }\n\n /**\n * Sets readonly condition for a field\n */\n setReadonly(\n field: keyof T,\n condition: boolean | Specification<T>,\n ): FormSpecification<T> {\n const existing = this.fieldRules.get(field) || {};\n existing.readonly = condition;\n this.fieldRules.set(field, existing);\n return this;\n }\n\n /**\n * Basic satisfaction check - validates all rules\n */\n isSatisfiedBy(obj: T): boolean {\n const result = this.validateForm(obj);\n return result.isValid;\n }\n\n /**\n * Comprehensive form validation with detailed results\n */\n validateForm(obj: T): FormValidationResult {\n const result: FormValidationResult = {\n isValid: true,\n fields: {},\n globalErrors: [],\n warnings: [],\n };\n\n // Validate each field\n for (const [field, rules] of this.fieldRules.entries()) {\n const fieldResult = this.validateField(field, rules, obj);\n result.fields[String(field)] = fieldResult;\n\n if (!fieldResult.isValid) {\n result.isValid = false;\n }\n }\n\n // Validate global rules\n for (const globalSpec of this.globalValidations) {\n try {\n if (!globalSpec.isSatisfiedBy(obj)) {\n const metadata = globalSpec.getMetadata();\n const message = metadata?.message || 'Global validation failed';\n result.globalErrors.push(message);\n result.isValid = false;\n }\n } catch (error) {\n result.globalErrors.push(`Global validation error: ${error}`);\n result.isValid = false;\n }\n }\n\n return result;\n }\n\n private validateField(\n field: keyof T,\n rules: FieldRules<T>,\n obj: T,\n ): FieldValidationResult {\n const fieldResult: FieldValidationResult = {\n field: String(field),\n isValid: true,\n errors: [],\n warnings: [],\n metadata: rules.metadata,\n };\n\n // Check if field should be visible\n if (!this.isFieldVisible(field, rules, obj)) {\n // If field is not visible, skip validation\n return fieldResult;\n }\n\n // Check required validation\n if (rules.required) {\n const isRequired =\n typeof rules.required === 'boolean'\n ? rules.required\n : rules.required.isSatisfiedBy(obj);\n\n if (isRequired) {\n const fieldValue = obj[field];\n if (\n fieldValue === null ||\n fieldValue === undefined ||\n fieldValue === ''\n ) {\n fieldResult.errors.push(\n rules.metadata?.message || `${String(field)} is required`,\n );\n fieldResult.isValid = false;\n }\n }\n }\n\n // Run validation specifications\n if (rules.validation) {\n for (const spec of rules.validation) {\n try {\n if (!spec.isSatisfiedBy(obj)) {\n const metadata = spec.getMetadata();\n const message =\n metadata?.message || `${String(field)} validation failed`;\n fieldResult.errors.push(message);\n fieldResult.isValid = false;\n }\n } catch (error) {\n fieldResult.errors.push(\n `Validation error for ${String(field)}: ${error}`,\n );\n fieldResult.isValid = false;\n }\n }\n }\n\n return fieldResult;\n }\n\n /**\n * Checks if a field should be visible\n */\n isFieldVisible(\n field: keyof T,\n rules: FieldRules<T> | undefined,\n obj: T,\n ): boolean {\n if (!rules?.visible) {\n return true; // Default to visible\n }\n\n return typeof rules.visible === 'boolean'\n ? rules.visible\n : rules.visible.isSatisfiedBy(obj);\n }\n\n /**\n * Checks if a field should be disabled\n */\n isFieldDisabled(field: keyof T, obj: T): boolean {\n const rules = this.fieldRules.get(field);\n if (!rules?.disabled) {\n return false; // Default to enabled\n }\n\n return typeof rules.disabled === 'boolean'\n ? rules.disabled\n : rules.disabled.isSatisfiedBy(obj);\n }\n\n /**\n * Checks if a field should be readonly\n */\n isFieldReadonly(field: keyof T, obj: T): boolean {\n const rules = this.fieldRules.get(field);\n if (!rules?.readonly) {\n return false; // Default to editable\n }\n\n return typeof rules.readonly === 'boolean'\n ? rules.readonly\n : rules.readonly.isSatisfiedBy(obj);\n }\n\n /**\n * Gets all configured fields\n */\n getFields(): (keyof T)[] {\n return Array.from(this.fieldRules.keys());\n }\n\n /**\n * Gets rules for a specific field\n */\n getFieldRules(field: keyof T): FieldRules<T> | undefined {\n return this.fieldRules.get(field);\n }\n\n toJSON(): any {\n const fieldsJson: Record<string, any> = {};\n\n for (const [field, rules] of this.fieldRules.entries()) {\n fieldsJson[String(field)] = {\n validation: rules.validation?.map((spec) => spec.toJSON()),\n required:\n typeof rules.required === 'object'\n ? rules.required.toJSON()\n : rules.required,\n visible:\n typeof rules.visible === 'object'\n ? rules.visible.toJSON()\n : rules.visible,\n disabled:\n typeof rules.disabled === 'object'\n ? rules.disabled.toJSON()\n : rules.disabled,\n readonly:\n typeof rules.readonly === 'object'\n ? rules.readonly.toJSON()\n : rules.readonly,\n metadata: rules.metadata,\n };\n }\n\n return {\n type: 'form',\n fields: fieldsJson,\n globalValidations: this.globalValidations.map((spec) => spec.toJSON()),\n metadata: this.metadata,\n };\n }\n\n static override fromJSON<T extends object = any>(\n json: any,\n ): FormSpecification<T> {\n throw new Error(\n 'FormSpecification.fromJSON not yet implemented - requires SpecificationFactory',\n );\n }\n\n toDSL(): string {\n const parts: string[] = [];\n\n // Export field rules\n for (const [field, rules] of this.fieldRules.entries()) {\n if (rules.required && typeof rules.required === 'object') {\n parts.push(`requiredIf(${String(field)}, ${rules.required.toDSL()})`);\n }\n if (rules.visible && typeof rules.visible === 'object') {\n parts.push(`visibleIf(${String(field)}, ${rules.visible.toDSL()})`);\n }\n if (rules.disabled && typeof rules.disabled === 'object') {\n parts.push(`disabledIf(${String(field)}, ${rules.disabled.toDSL()})`);\n }\n if (rules.readonly && typeof rules.readonly === 'object') {\n parts.push(`readonlyIf(${String(field)}, ${rules.readonly.toDSL()})`);\n }\n if (rules.validation) {\n for (const spec of rules.validation) {\n parts.push(spec.toDSL());\n }\n }\n }\n\n // Export global validations\n for (const spec of this.globalValidations) {\n parts.push(spec.toDSL());\n }\n\n return parts.join(' && ');\n }\n\n clone(): FormSpecification<T> {\n const cloned = new FormSpecification<T>(this.metadata);\n\n // Clone field rules\n for (const [field, rules] of this.fieldRules.entries()) {\n const clonedRules: FieldRules<T> = {\n validation: rules.validation?.map((spec) => spec.clone()),\n required:\n typeof rules.required === 'object'\n ? rules.required.clone()\n : rules.required,\n visible:\n typeof rules.visible === 'object'\n ? rules.visible.clone()\n : rules.visible,\n disabled:\n typeof rules.disabled === 'object'\n ? rules.disabled.clone()\n : rules.disabled,\n readonly:\n typeof rules.readonly === 'object'\n ? rules.readonly.clone()\n : rules.readonly,\n metadata: rules.metadata,\n };\n cloned.fieldRules.set(field, clonedRules);\n }\n\n // Clone global validations\n cloned.globalValidations = this.globalValidations.map((spec) =>\n spec.clone(),\n );\n\n return cloned;\n }\n}\n","export enum TokenType {\n // Literals\n IDENTIFIER = 'IDENTIFIER',\n STRING = 'STRING',\n NUMBER = 'NUMBER',\n BOOLEAN = 'BOOLEAN',\n NULL = 'NULL',\n REGEX = 'REGEX',\n \n // Operators\n AND = 'AND',\n OR = 'OR',\n NOT = 'NOT',\n XOR = 'XOR',\n IMPLIES = 'IMPLIES',\n \n // Comparison operators\n EQUALS = 'EQUALS',\n NOT_EQUALS = 'NOT_EQUALS',\n LESS_THAN = 'LESS_THAN',\n LESS_THAN_OR_EQUAL = 'LESS_THAN_OR_EQUAL',\n GREATER_THAN = 'GREATER_THAN',\n GREATER_THAN_OR_EQUAL = 'GREATER_THAN_OR_EQUAL',\n IN = 'IN',\n NOT_IN = 'NOT_IN',\n MATCHES = 'MATCHES',\n NOT_MATCHES = 'NOT_MATCHES',\n IS_NULL = 'IS_NULL',\n IS_NOT_NULL = 'IS_NOT_NULL',\n IS_EMPTY = 'IS_EMPTY',\n IS_NOT_EMPTY = 'IS_NOT_EMPTY',\n \n // Function tokens\n CONTAINS = 'CONTAINS',\n STARTS_WITH = 'STARTS_WITH',\n ENDS_WITH = 'ENDS_WITH',\n AT_LEAST = 'AT_LEAST',\n EXACTLY = 'EXACTLY',\n \n // Punctuation\n LEFT_PAREN = 'LEFT_PAREN',\n RIGHT_PAREN = 'RIGHT_PAREN',\n LEFT_BRACKET = 'LEFT_BRACKET',\n RIGHT_BRACKET = 'RIGHT_BRACKET',\n COMMA = 'COMMA',\n DOT = 'DOT',\n \n // Special\n FIELD_REFERENCE = 'FIELD_REFERENCE', // ${field}\n EOF = 'EOF',\n WHITESPACE = 'WHITESPACE'\n}\n\nexport interface Token {\n type: TokenType;\n value: string;\n position: number;\n line: number;\n column: number;\n}\n\nexport const OPERATOR_KEYWORDS: Record<string, TokenType> = {\n 'and': TokenType.AND,\n '&&': TokenType.AND,\n 'or': TokenType.OR,\n '||': TokenType.OR,\n 'not': TokenType.NOT,\n '!': TokenType.NOT,\n 'xor': TokenType.XOR,\n '^': TokenType.XOR,\n 'implies': TokenType.IMPLIES,\n '=>': TokenType.IMPLIES,\n 'eq': TokenType.EQUALS,\n 'equals': TokenType.EQUALS,\n 'neq': TokenType.NOT_EQUALS,\n 'notequals': TokenType.NOT_EQUALS,\n 'lt': TokenType.LESS_THAN,\n 'lte': TokenType.LESS_THAN_OR_EQUAL,\n 'gt': TokenType.GREATER_THAN,\n 'gte': TokenType.GREATER_THAN_OR_EQUAL,\n 'in': TokenType.IN,\n 'matches': TokenType.MATCHES,\n '!~': TokenType.NOT_MATCHES,\n 'notmatches': TokenType.NOT_MATCHES,\n 'isnull': TokenType.IS_NULL,\n 'isNull': TokenType.IS_NULL,\n 'isnotnull': TokenType.IS_NOT_NULL,\n 'isNotNull': TokenType.IS_NOT_NULL,\n 'isempty': TokenType.IS_EMPTY,\n 'isEmpty': TokenType.IS_EMPTY,\n 'isnotempty': TokenType.IS_NOT_EMPTY,\n 'isNotEmpty': TokenType.IS_NOT_EMPTY,\n 'true': TokenType.BOOLEAN,\n 'false': TokenType.BOOLEAN,\n 'null': TokenType.NULL\n};\n\nexport const COMPARISON_OPERATORS: Record<string, TokenType> = {\n '==': TokenType.EQUALS,\n '!=': TokenType.NOT_EQUALS,\n '!~': TokenType.NOT_MATCHES,\n '~': TokenType.MATCHES,\n '<': TokenType.LESS_THAN,\n '<=': TokenType.LESS_THAN_OR_EQUAL,\n '>': TokenType.GREATER_THAN,\n '>=': TokenType.GREATER_THAN_OR_EQUAL\n};\n","import { Token, TokenType, OPERATOR_KEYWORDS, COMPARISON_OPERATORS } from './token';\n\nexport class DslTokenizer {\n private input: string;\n private position: number = 0;\n private line: number = 1;\n private column: number = 1;\n\n constructor(input: string) {\n this.input = input;\n }\n\n tokenize(): Token[] {\n const tokens: Token[] = [];\n \n while (this.position < this.input.length) {\n const token = this.nextToken();\n if (token.type !== TokenType.WHITESPACE) {\n tokens.push(token);\n }\n }\n \n tokens.push({\n type: TokenType.EOF,\n value: '',\n position: this.position,\n line: this.line,\n column: this.column\n });\n \n return tokens;\n }\n\n private nextToken(): Token {\n this.skipWhitespace();\n \n if (this.position >= this.input.length) {\n return this.createToken(TokenType.EOF, '');\n }\n\n const multiWordOperator = this.readMultiWordOperator();\n if (multiWordOperator) {\n return multiWordOperator;\n }\n\n const char = this.input[this.position];\n \n // Field references ${...}\n if (char === '$' && this.peek() === '{') {\n return this.readFieldReference();\n }\n \n // String literals\n if (char === '\"' || char === \"'\") {\n return this.readString(char);\n }\n\n // Regex literals /pattern/flags\n if (char === '/') {\n return this.readRegex();\n }\n \n // Numbers\n if (this.isDigit(char) || (char === '-' && this.isDigit(this.peek()))) {\n return this.readNumber();\n }\n \n // Multi-character operators\n if (char === '!' && this.peek() === '~') {\n const token = this.createToken(TokenType.NOT_MATCHES, '!~');\n this.advance(2);\n return token;\n }\n\n if (char === '=' && this.peek() === '>') {\n const token = this.createToken(TokenType.IMPLIES, '=>');\n this.advance(2);\n return token;\n }\n\n const twoChar = this.input.substr(this.position, 2);\n if (COMPARISON_OPERATORS[twoChar]) {\n const token = this.createToken(COMPARISON_OPERATORS[twoChar], twoChar);\n this.advance(2);\n return token;\n }\n \n // Single character operators and punctuation\n switch (char) {\n case '(':\n return this.createTokenAndAdvance(TokenType.LEFT_PAREN, char);\n case ')':\n return this.createTokenAndAdvance(TokenType.RIGHT_PAREN, char);\n case '[':\n return this.createTokenAndAdvance(TokenType.LEFT_BRACKET, char);\n case ']':\n return this.createTokenAndAdvance(TokenType.RIGHT_BRACKET, char);\n case ',':\n return this.createTokenAndAdvance(TokenType.COMMA, char);\n case '.':\n return this.createTokenAndAdvance(TokenType.DOT, char);\n case '!':\n if (this.peek() === '=') {\n const token = this.createToken(TokenType.NOT_EQUALS, '!=');\n this.advance(2);\n return token;\n }\n return this.createTokenAndAdvance(TokenType.NOT, char);\n case '~':\n return this.createTokenAndAdvance(TokenType.MATCHES, char);\n case '<':\n if (this.peek() === '=') {\n const token = this.createToken(TokenType.LESS_THAN_OR_EQUAL, '<=');\n this.advance(2);\n return token;\n }\n return this.createTokenAndAdvance(TokenType.LESS_THAN, char);\n case '>':\n if (this.peek() === '=') {\n const token = this.createToken(TokenType.GREATER_THAN_OR_EQUAL, '>=');\n this.advance(2);\n return token;\n }\n return this.createTokenAndAdvance(TokenType.GREATER_THAN, char);\n case '=':\n if (this.peek() === '=') {\n const token = this.createToken(TokenType.EQUALS, '==');\n this.advance(2);\n return token;\n }\n break;\n case '&':\n if (this.peek() === '&') {\n const token = this.createToken(TokenType.AND, '&&');\n this.advance(2);\n return token;\n }\n break;\n case '|':\n if (this.peek() === '|') {\n const token = this.createToken(TokenType.OR, '||');\n this.advance(2);\n return token;\n }\n break;\n case '^':\n return this.createTokenAndAdvance(TokenType.XOR, char);\n }\n \n // Identifiers and keywords\n if (this.isAlpha(char) || char === '_') {\n return this.readIdentifier();\n }\n \n throw new Error(`Unexpected character '${char}' at position ${this.position}`);\n }\n\n private readFieldReference(): Token {\n const start = this.position;\n this.advance(2); // Skip ${\n \n let value = '';\n while (this.position < this.input.length && this.input[this.position] !== '}') {\n value += this.input[this.position];\n this.advance();\n }\n \n if (this.position >= this.input.length) {\n throw new Error('Unterminated field reference');\n }\n \n this.advance(); // Skip }\n \n return this.createToken(TokenType.FIELD_REFERENCE, value, start);\n }\n\n private readString(quote: string): Token {\n const start = this.position;\n this.advance(); // Skip opening quote\n \n let value = '';\n while (this.position < this.input.length && this.input[this.position] !== quote) {\n if (this.input[this.position] === '\\\\') {\n this.advance();\n if (this.position < this.input.length) {\n const escaped = this.input[this.position];\n switch (escaped) {\n case 'n': value += '\\n'; break;\n case 't': value += '\\t'; break;\n case 'r': value += '\\r'; break;\n case '\\\\': value += '\\\\'; break;\n case '\"': value += '\"'; break;\n case \"'\": value += \"'\"; break;\n default: value += escaped; break;\n }\n this.advance();\n }\n } else {\n value += this.input[this.position];\n this.advance();\n }\n }\n \n if (this.position >= this.input.length) {\n throw new Error('Unterminated string literal');\n }\n \n this.advance(); // Skip closing quote\n \n return this.createToken(TokenType.STRING, value, start);\n }\n\n private readRegex(): Token {\n const start = this.position;\n this.advance(); // Skip opening /\n\n let pattern = '';\n\n while (this.position < this.input.length) {\n const current = this.input[this.position];\n\n if (current === '\\\\') {\n pattern += current;\n this.advance();\n if (this.position < this.input.length) {\n pattern += this.input[this.position];\n this.advance();\n }\n continue;\n }\n\n if (current === '/') {\n break;\n }\n\n pattern += current;\n this.advance();\n }\n\n if (this.position >= this.input.length) {\n throw new Error('Unterminated regex literal');\n }\n\n this.advance(); // Skip closing /\n\n let flags = '';\n while (this.position < this.input.length && this.isAlpha(this.input[this.position])) {\n flags += this.input[this.position];\n this.advance();\n }\n\n const value = `/${pattern}/${flags}`;\n return this.createToken(TokenType.REGEX, value, start);\n }\n\n private readNumber(): Token {\n const start = this.position;\n let value = '';\n \n if (this.input[this.position] === '-') {\n value += this.input[this.position];\n this.advance();\n }\n \n while (this.position < this.input.length && this.isDigit(this.input[this.position])) {\n value += this.input[this.position];\n this.advance();\n }\n \n if (this.position < this.input.length && this.input[this.position] === '.') {\n value += this.input[this.position];\n this.advance();\n \n while (this.position < this.input.length && this.isDigit(this.input[this.position])) {\n value += this.input[this.position];\n this.advance();\n }\n }\n \n return this.createToken(TokenType.NUMBER, value, start);\n }\n\n private readIdentifier(): Token {\n const start = this.position;\n let value = '';\n \n while (this.position < this.input.length && \n (this.isAlphaNumeric(this.input[this.position]) || this.input[this.position] === '_')) {\n value += this.input[this.position];\n this.advance();\n }\n\n const tokenType = OPERATOR_KEYWORDS[value] || TokenType.IDENTIFIER;\n return this.createToken(tokenType, value, start);\n }\n\n private readMultiWordOperator(): Token | null {\n const remaining = this.input.slice(this.position);\n const patterns: Array<{ regex: RegExp; type: TokenType }> = [\n { regex: /^is\\s+not\\s+empty\\b/i, type: TokenType.IS_NOT_EMPTY },\n { regex: /^is\\s+not\\s+null\\b/i, type: TokenType.IS_NOT_NULL },\n { regex: /^is\\s+empty\\b/i, type: TokenType.IS_EMPTY },\n { regex: /^is\\s+null\\b/i, type: TokenType.IS_NULL },\n { regex: /^not\\s+in\\b/i, type: TokenType.NOT_IN },\n { regex: /^not\\s+matches\\b/i, type: TokenType.NOT_MATCHES },\n ];\n\n for (const pattern of patterns) {\n const match = remaining.match(pattern.regex);\n if (match && match[0]) {\n const tokenValue = remaining.substring(0, match[0].length);\n const token = this.createToken(pattern.type, tokenValue, this.position);\n this.advance(match[0].length);\n return token;\n }\n }\n\n return null;\n }\n\n private skipWhitespace(): void {\n while (this.position < this.input.length && this.isWhitespace(this.input[this.position])) {\n if (this.input[this.position] === '\\n') {\n this.line++;\n this.column = 1;\n } else {\n this.column++;\n }\n this.position++;\n }\n }\n\n private createToken(type: TokenType, value: string, startPos?: number): Token {\n return {\n type,\n value,\n position: startPos ?? this.position,\n line: this.line,\n column: this.column - value.length\n };\n }\n\n private createTokenAndAdvance(type: TokenType, value: string): Token {\n const token = this.createToken(type, value);\n this.advance();\n return token;\n }\n\n private advance(count: number = 1): void {\n for (let i = 0; i < count && this.position < this.input.length; i++) {\n if (this.input[this.position] === '\\n') {\n this.line++;\n this.column = 1;\n } else {\n this.column++;\n }\n this.position++;\n }\n }\n\n private peek(offset: number = 1): string {\n const pos = this.position + offset;\n return pos < this.input.length ? this.input[pos] : '';\n }\n\n private isDigit(char: string): boolean {\n return char >= '0' && char <= '9';\n }\n\n private isAlpha(char: string): boolean {\n return (char >= 'a' && char <= 'z') || (char >= 'A' && char <= 'Z');\n }\n\n private isAlphaNumeric(char: string): boolean {\n return this.isAlpha(char) || this.isDigit(char);\n }\n\n private isWhitespace(char: string): boolean {\n return char === ' ' || char === '\\t' || char === '\\n' || char === '\\r';\n }\n}\n","import { Token, TokenType } from './token';\nimport { DslTokenizer } from './tokenizer';\nimport { Specification } from '@praxisui/specification-core';\nimport { FieldSpecification } from '../specification/field-specification';\nimport { FieldToFieldSpecification } from '../specification/field-to-field-specification';\nimport { AndSpecification } from '../specification/and-specification';\nimport { OrSpecification } from '../specification/or-specification';\nimport { NotSpecification } from '../specification/not-specification';\nimport { XorSpecification } from '../specification/xor-specification';\nimport { ImpliesSpecification } from '../specification/implies-specification';\nimport { FunctionSpecification } from '../specification/function-specification';\nimport { AtLeastSpecification } from '../specification/at-least-specification';\nimport { ExactlySpecification } from '../specification/exactly-specification';\nimport { ComparisonOperator } from '../specification/comparison-operator';\nimport { FunctionRegistry } from '../registry/function-registry';\n\nexport class DslParser<T extends object = any> {\n private tokens: Token[] = [];\n private current: number = 0;\n private lastArgumentTokenType: TokenType | null = null;\n\n constructor(private functionRegistry?: FunctionRegistry<T>) {}\n\n parse(input: string): Specification<T> {\n const tokenizer = new DslTokenizer(input);\n this.tokens = tokenizer.tokenize();\n this.current = 0;\n\n const spec = this.parseExpression();\n\n if (!this.isAtEnd()) {\n throw new Error(`Unexpected token: ${this.peek().value}`);\n }\n\n return spec;\n }\n\n private parseExpression(): Specification<T> {\n return this.parseImplies();\n }\n\n private parseImplies(): Specification<T> {\n let expr = this.parseXor();\n\n while (this.match(TokenType.IMPLIES)) {\n const right = this.parseXor();\n expr = new ImpliesSpecification<T>(expr, right);\n }\n\n return expr;\n }\n\n private parseXor(): Specification<T> {\n let expr = this.parseOr();\n\n while (this.match(TokenType.XOR)) {\n const right = this.parseOr();\n if (expr instanceof XorSpecification) {\n expr = new XorSpecification<T>([...expr.getSpecifications(), right]);\n } else {\n expr = new XorSpecification<T>([expr, right]);\n }\n }\n\n return expr;\n }\n\n private parseOr(): Specification<T> {\n let expr = this.parseAnd();\n\n while (this.match(TokenType.OR)) {\n const right = this.parseAnd();\n if (expr instanceof OrSpecification) {\n expr = new OrSpecification<T>([...expr.getSpecifications(), right]);\n } else {\n expr = new OrSpecification<T>([expr, right]);\n }\n }\n\n return expr;\n }\n\n private parseAnd(): Specification<T> {\n let expr = this.parseUnary();\n\n while (this.match(TokenType.AND)) {\n const right = this.parseUnary();\n if (expr instanceof AndSpecification) {\n expr = new AndSpecification<T>([...expr.getSpecifications(), right]);\n } else {\n expr = new AndSpecification<T>([expr, right]);\n }\n }\n\n return expr;\n }\n\n private parseUnary(): Specification<T> {\n if (this.match(TokenType.NOT)) {\n const expr = this.parseUnary();\n return new NotSpecification<T>(expr);\n }\n\n return this.parseComparison();\n }\n\n private parseComparison(): Specification<T> {\n let left = this.parsePrimary();\n\n if (this.matchComparison()) {\n const operatorToken = this.previous();\n const compOp = this.tokenTypeToComparisonOperator(operatorToken.type);\n\n // Parse RHS allowing literals, arrays and identifiers (as values)\n const rightValue = this.operatorRequiresValue(compOp)\n ? this.parseArgument()\n : this.defaultValueForOperator(compOp);\n\n if (left instanceof FieldSpecification) {\n const field = left.getField() as keyof T;\n\n if (\n (this.lastArgumentTokenType === TokenType.FIELD_REFERENCE ||\n this.lastArgumentTokenType === TokenType.IDENTIFIER) &&\n typeof rightValue === 'string'\n ) {\n return new FieldToFieldSpecification<T>(\n field,\n compOp,\n rightValue as keyof T,\n );\n }\n\n return new FieldSpecification<T>(field, compOp, rightValue as any);\n }\n\n throw new Error('Invalid comparison expression');\n }\n\n return left;\n }\n\n private parsePrimary(): Specification<T> {\n if (this.match(TokenType.LEFT_PAREN)) {\n const expr = this.parseExpression();\n this.consume(TokenType.RIGHT_PAREN, \"Expected ')' after expression\");\n return expr;\n }\n\n if (this.match(TokenType.FIELD_REFERENCE)) {\n const fieldName = this.previous().value;\n return new FieldSpecification<T>(\n fieldName as keyof T,\n ComparisonOperator.EQUALS,\n true,\n );\n }\n\n if (this.match(TokenType.IDENTIFIER, TokenType.MATCHES, TokenType.NOT_MATCHES)) {\n const identifier = this.previous().value;\n\n // Check if this is a function call\n if (this.match(TokenType.LEFT_PAREN)) {\n return this.parseFunctionCall(identifier);\n }\n\n // Otherwise treat as field reference\n return new FieldSpecification<T>(\n identifier as keyof T,\n ComparisonOperator.EQUALS,\n true,\n );\n }\n\n throw new Error(`Unexpected token: ${this.peek().value}`);\n }\n\n private parseFunctionCall(functionName: string): Specification<T> {\n const args: any[] = [];\n const argTokenTypes: TokenType[] = [];\n\n if (!this.check(TokenType.RIGHT_PAREN)) {\n do {\n args.push(this.parseArgument());\n argTokenTypes.push(this.lastArgumentTokenType ?? TokenType.EOF);\n } while (this.match(TokenType.COMMA));\n }\n\n this.consume(\n TokenType.RIGHT_PAREN,\n \"Expected ')' after function arguments\",\n );\n\n // Handle special built-in functions\n const normalizedFunctionName = this.normalizeFunctionName(functionName);\n\n switch (normalizedFunctionName) {\n case 'atLeast':\n if (args.length !== 2) {\n throw new Error('atLeast requires exactly 2 arguments');\n }\n const min = args[0];\n const specs = args[1];\n if (!Array.isArray(specs)) {\n throw new Error(\n 'atLeast second argument must be an array of specifications',\n );\n }\n return new AtLeastSpecification<T>(min, specs);\n\n case 'exactly':\n if (args.length !== 2) {\n throw new Error('exactly requires exactly 2 arguments');\n }\n const exact = args[0];\n const exactSpecs = args[1];\n if (!Array.isArray(exactSpecs)) {\n throw new Error(\n 'exactly second argument must be an array of specifications',\n );\n }\n return new ExactlySpecification<T>(exact, exactSpecs);\n\n case 'contains':\n case 'startsWith':\n case 'endsWith':\n case 'matches':\n case 'notMatches':\n if (args.length !== 2) {\n throw new Error(`${normalizedFunctionName} requires exactly 2 arguments`);\n }\n const field = args[0];\n const value = args[1];\n const op = this.functionNameToOperator(normalizedFunctionName);\n return new FieldSpecification<T>(field, op, value);\n\n default:\n // Custom functions keep identifier args as raw strings (legacy),\n // but preserve explicit field references (${field}) as typed args.\n const customArgs = args.map((arg, index) => {\n const tokenType = argTokenTypes[index];\n if (tokenType === TokenType.FIELD_REFERENCE && typeof arg === 'string') {\n return { type: 'field', field: arg };\n }\n return arg;\n });\n return new FunctionSpecification<T>(\n normalizedFunctionName,\n customArgs,\n this.functionRegistry,\n );\n }\n }\n\n private parseArgument(): any {\n this.lastArgumentTokenType = null;\n\n if (this.match(TokenType.STRING)) {\n this.lastArgumentTokenType = TokenType.STRING;\n return this.previous().value;\n }\n\n if (this.match(TokenType.NUMBER)) {\n const value = this.previous().value;\n this.lastArgumentTokenType = TokenType.NUMBER;\n return value.includes('.') ? parseFloat(value) : parseInt(value, 10);\n }\n\n if (this.match(TokenType.REGEX)) {\n this.lastArgumentTokenType = TokenType.REGEX;\n return this.parseRegexLiteral(this.previous().value);\n }\n\n if (this.match(TokenType.BOOLEAN)) {\n this.lastArgumentTokenType = TokenType.BOOLEAN;\n return this.previous().value === 'true';\n }\n\n if (this.match(TokenType.NULL)) {\n this.lastArgumentTokenType = TokenType.NULL;\n return null;\n }\n\n if (this.match(TokenType.FIELD_REFERENCE)) {\n this.lastArgumentTokenType = TokenType.FIELD_REFERENCE;\n return this.previous().value;\n }\n\n if (this.match(TokenType.IDENTIFIER, TokenType.MATCHES, TokenType.NOT_MATCHES)) {\n this.lastArgumentTokenType = this.previous().type;\n return this.previous().value;\n }\n\n if (this.match(TokenType.LEFT_BRACKET)) {\n this.lastArgumentTokenType = TokenType.LEFT_BRACKET;\n const elements: any[] = [];\n\n if (!this.check(TokenType.RIGHT_BRACKET)) {\n do {\n elements.push(this.parseArgument());\n } while (this.match(TokenType.COMMA));\n }\n\n this.consume(\n TokenType.RIGHT_BRACKET,\n \"Expected ']' after array elements\",\n );\n return elements;\n }\n\n this.lastArgumentTokenType = null;\n throw new Error(`Unexpected token in argument: ${this.peek().value}`);\n }\n\n private matchComparison(): boolean {\n return this.match(\n TokenType.EQUALS,\n TokenType.NOT_EQUALS,\n TokenType.LESS_THAN,\n TokenType.LESS_THAN_OR_EQUAL,\n TokenType.GREATER_THAN,\n TokenType.GREATER_THAN_OR_EQUAL,\n TokenType.IN,\n TokenType.NOT_IN,\n TokenType.MATCHES,\n TokenType.NOT_MATCHES,\n TokenType.IS_NULL,\n TokenType.IS_NOT_NULL,\n TokenType.IS_EMPTY,\n TokenType.IS_NOT_EMPTY,\n );\n }\n\n private tokenTypeToComparisonOperator(\n tokenType: TokenType,\n ): ComparisonOperator {\n switch (tokenType) {\n case TokenType.EQUALS:\n return ComparisonOperator.EQUALS;\n case TokenType.NOT_EQUALS:\n return ComparisonOperator.NOT_EQUALS;\n case TokenType.LESS_THAN:\n return ComparisonOperator.LESS_THAN;\n case TokenType.LESS_THAN_OR_EQUAL:\n return ComparisonOperator.LESS_THAN_OR_EQUAL;\n case TokenType.GREATER_THAN:\n return ComparisonOperator.GREATER_THAN;\n case TokenType.GREATER_THAN_OR_EQUAL:\n return ComparisonOperator.GREATER_THAN_OR_EQUAL;\n case TokenType.IN:\n return ComparisonOperator.IN;\n case TokenType.NOT_IN:\n return ComparisonOperator.NOT_IN;\n case TokenType.MATCHES:\n return ComparisonOperator.MATCHES;\n case TokenType.NOT_MATCHES:\n return ComparisonOperator.NOT_MATCHES;\n case TokenType.IS_NULL:\n return ComparisonOperator.IS_NULL;\n case TokenType.IS_NOT_NULL:\n return ComparisonOperator.IS_NOT_NULL;\n case TokenType.IS_EMPTY:\n return ComparisonOperator.IS_EMPTY;\n case TokenType.IS_NOT_EMPTY:\n return ComparisonOperator.IS_NOT_EMPTY;\n default:\n throw new Error(`Unknown comparison operator: ${tokenType}`);\n }\n }\n\n private functionNameToOperator(functionName: string): ComparisonOperator {\n const normalizedFunctionName = this.normalizeFunctionName(functionName);\n\n switch (normalizedFunctionName) {\n case 'contains':\n return ComparisonOperator.CONTAINS;\n case 'startsWith':\n return ComparisonOperator.STARTS_WITH;\n case 'endsWith':\n return ComparisonOperator.ENDS_WITH;\n case 'matches':\n return ComparisonOperator.MATCHES;\n case 'notMatches':\n return ComparisonOperator.NOT_MATCHES;\n default:\n throw new Error(`Unknown function: ${normalizedFunctionName}`);\n }\n }\n\n private normalizeFunctionName(functionName: string): string {\n const raw = String(functionName || '').trim();\n const compactLower = raw.replace(/\\s+/g, '').toLowerCase();\n if (compactLower === 'matches') return 'matches';\n if (compactLower === 'notmatches') return 'notMatches';\n return raw;\n }\n\n private extractValue(spec: any): any {\n // This is a simplified extraction - in a real implementation\n // we'd need to handle more complex cases\n if (spec instanceof FieldSpecification) {\n return spec.getValue();\n }\n return spec;\n }\n\n private operatorRequiresValue(operator: ComparisonOperator): boolean {\n switch (operator) {\n case ComparisonOperator.IS_NULL:\n case ComparisonOperator.IS_NOT_NULL:\n case ComparisonOperator.IS_EMPTY:\n case ComparisonOperator.IS_NOT_EMPTY:\n return false;\n default:\n return true;\n }\n }\n\n private defaultValueForOperator(operator: ComparisonOperator): any {\n switch (operator) {\n case ComparisonOperator.IS_NULL:\n case ComparisonOperator.IS_NOT_NULL:\n case ComparisonOperator.IS_EMPTY:\n case ComparisonOperator.IS_NOT_EMPTY:\n return null;\n default:\n return undefined;\n }\n }\n\n private parseRegexLiteral(raw: string): RegExp {\n const lastSlash = raw.lastIndexOf('/');\n const pattern = raw.slice(1, lastSlash);\n const flags = raw.slice(lastSlash + 1);\n return new RegExp(pattern, flags);\n }\n\n private match(...types: TokenType[]): boolean {\n for (const type of types) {\n if (this.check(type)) {\n this.advance();\n return true;\n }\n }\n return false;\n }\n\n private check(type: TokenType): boolean {\n if (this.isAtEnd()) return false;\n return this.peek().type === type;\n }\n\n private advance(): Token {\n if (!this.isAtEnd()) this.current++;\n return this.previous();\n }\n\n private isAtEnd(): boolean {\n return this.peek().type === TokenType.EOF;\n }\n\n private peek(): Token {\n return this.tokens[this.current];\n }\n\n private previous(): Token {\n return this.tokens[this.current - 1];\n }\n\n private consume(type: TokenType, message: string): Token {\n if (this.check(type)) return this.advance();\n throw new Error(`${message}. Got: ${this.peek().value}`);\n }\n}\n","import { Specification } from '@praxisui/specification-core';\nimport { FieldSpecification } from '../specification/field-specification';\nimport { AndSpecification } from '../specification/and-specification';\nimport { OrSpecification } from '../specification/or-specification';\nimport { NotSpecification } from '../specification/not-specification';\nimport { XorSpecification } from '../specification/xor-specification';\nimport { ImpliesSpecification } from '../specification/implies-specification';\nimport { FunctionSpecification } from '../specification/function-specification';\nimport { AtLeastSpecification } from '../specification/at-least-specification';\nimport { ExactlySpecification } from '../specification/exactly-specification';\nimport { FieldToFieldSpecification } from '../specification/field-to-field-specification';\nimport { ContextualSpecification } from '../specification/contextual-specification';\n\nexport interface ExportOptions {\n prettyPrint?: boolean;\n indentSize?: number;\n maxLineLength?: number;\n useParentheses?: 'minimal' | 'explicit' | 'auto';\n includeMetadata?: boolean;\n metadataPosition?: 'before' | 'after' | 'inline';\n}\n\nexport class DslExporter {\n private options: Required<ExportOptions>;\n\n constructor(options: ExportOptions = {}) {\n this.options = {\n prettyPrint: options.prettyPrint ?? false,\n indentSize: options.indentSize ?? 2,\n maxLineLength: options.maxLineLength ?? 80,\n useParentheses: options.useParentheses ?? 'auto',\n includeMetadata: options.includeMetadata ?? false,\n metadataPosition: options.metadataPosition ?? 'before',\n };\n }\n\n export<T extends object = any>(specification: Specification<T>): string {\n const dsl = this.exportSpecification(specification, 0);\n\n if (this.options.prettyPrint) {\n return this.formatPretty(dsl);\n }\n\n return dsl;\n }\n\n /**\n * Exports specification with metadata comments\n */\n exportWithMetadata<T extends object = any>(\n specification: Specification<T>,\n ): string {\n const originalIncludeMetadata = this.options.includeMetadata;\n this.options.includeMetadata = true;\n\n const result = this.export(specification);\n\n this.options.includeMetadata = originalIncludeMetadata;\n return result;\n }\n\n private exportSpecification<T extends object = any>(\n spec: Specification<T>,\n depth: number,\n ): string {\n const baseDsl = this.getSpecificationDsl(spec, depth);\n\n if (!this.options.includeMetadata) {\n return baseDsl;\n }\n\n return this.addMetadataComments(spec, baseDsl, depth);\n }\n\n private getSpecificationDsl<T extends object = any>(\n spec: Specification<T>,\n depth: number,\n ): string {\n if (spec instanceof FieldSpecification) {\n return this.exportFieldSpecification(spec);\n }\n\n if (spec instanceof AndSpecification) {\n return this.exportAndSpecification(spec, depth);\n }\n\n if (spec instanceof OrSpecification) {\n return this.exportOrSpecification(spec, depth);\n }\n\n if (spec instanceof NotSpecification) {\n return this.exportNotSpecification(spec, depth);\n }\n\n if (spec instanceof XorSpecification) {\n return this.exportXorSpecification(spec, depth);\n }\n\n if (spec instanceof ImpliesSpecification) {\n return this.exportImpliesSpecification(spec, depth);\n }\n\n if (spec instanceof FunctionSpecification) {\n return this.exportFunctionSpecification(spec);\n }\n\n if (spec instanceof AtLeastSpecification) {\n return this.exportAtLeastSpecification(spec, depth);\n }\n\n if (spec instanceof ExactlySpecification) {\n return this.exportExactlySpecification(spec, depth);\n }\n\n if (spec instanceof FieldToFieldSpecification) {\n return this.exportFieldToFieldSpecification(spec);\n }\n\n if (spec instanceof ContextualSpecification) {\n return this.exportContextualSpecification(spec);\n }\n\n // Fallback to toDSL method\n return spec.toDSL();\n }\n\n private addMetadataComments<T extends object = any>(\n spec: Specification<T>,\n dsl: string,\n depth: number,\n ): string {\n const metadata = spec.getMetadata();\n if (!metadata) {\n return dsl;\n }\n\n const indent = ' '.repeat(depth * this.options.indentSize);\n const comments: string[] = [];\n\n // Add metadata comments\n if (metadata.code) {\n comments.push(`${indent}// code: ${metadata.code}`);\n }\n\n if (metadata.message) {\n comments.push(`${indent}// message: ${metadata.message}`);\n }\n\n if (metadata.tag) {\n comments.push(`${indent}// tag: ${metadata.tag}`);\n }\n\n if (metadata.uiConfig) {\n const uiConfigStr = JSON.stringify(metadata.uiConfig);\n comments.push(`${indent}// uiConfig: ${uiConfigStr}`);\n }\n\n // Add any other metadata properties\n const standardKeys = ['code', 'message', 'tag', 'uiConfig'];\n for (const [key, value] of Object.entries(metadata)) {\n if (!standardKeys.includes(key) && value !== undefined) {\n comments.push(`${indent}// ${key}: ${JSON.stringify(value)}`);\n }\n }\n\n if (comments.length === 0) {\n return dsl;\n }\n\n switch (this.options.metadataPosition) {\n case 'before':\n return `${comments.join('\\n')}\\n${indent}${dsl}`;\n\n case 'after':\n return `${indent}${dsl}\\n${comments.join('\\n')}`;\n\n case 'inline':\n const firstComment = comments[0] ? ` ${comments[0].trim()}` : '';\n return `${indent}${dsl}${firstComment}`;\n\n default:\n return dsl;\n }\n }\n\n private exportFieldSpecification<T extends object = any>(\n spec: FieldSpecification<T>,\n ): string {\n return spec.toDSL();\n }\n\n private exportAndSpecification<T extends object = any>(\n spec: AndSpecification<T>,\n depth: number,\n ): string {\n const specifications = spec.getSpecifications();\n const parts = specifications.map((s) => {\n const dsl = this.exportSpecification(s, depth + 1);\n return this.needsParentheses(s, 'and') ? `(${dsl})` : dsl;\n });\n\n if (this.options.prettyPrint && this.shouldBreakLine(parts.join(' && '))) {\n const indent = ' '.repeat(depth * this.options.indentSize);\n const nextIndent = ' '.repeat((depth + 1) * this.options.indentSize);\n return parts.join(` &&\\n${nextIndent}`);\n }\n\n return parts.join(' && ');\n }\n\n private exportOrSpecification<T extends object = any>(\n spec: OrSpecification<T>,\n depth: number,\n ): string {\n const specifications = spec.getSpecifications();\n const parts = specifications.map((s) => {\n const dsl = this.exportSpecification(s, depth + 1);\n return this.needsParentheses(s, 'or') ? `(${dsl})` : dsl;\n });\n\n if (this.options.prettyPrint && this.shouldBreakLine(parts.join(' || '))) {\n const nextIndent = ' '.repeat((depth + 1) * this.options.indentSize);\n return parts.join(` ||\\n${nextIndent}`);\n }\n\n return parts.join(' || ');\n }\n\n private exportNotSpecification<T extends object = any>(\n spec: NotSpecification<T>,\n depth: number,\n ): string {\n const innerSpec = spec.getSpecification();\n const innerDsl = this.exportSpecification(innerSpec, depth);\n\n if (this.needsParentheses(innerSpec, 'not')) {\n return `!(${innerDsl})`;\n }\n\n return `!${innerDsl}`;\n }\n\n private exportXorSpecification<T extends object = any>(\n spec: XorSpecification<T>,\n depth: number,\n ): string {\n const specifications = spec.getSpecifications();\n const parts = specifications.map((s) => {\n const dsl = this.exportSpecification(s, depth + 1);\n return this.needsParentheses(s, 'xor') ? `(${dsl})` : dsl;\n });\n\n if (this.options.prettyPrint && this.shouldBreakLine(parts.join(' xor '))) {\n const nextIndent = ' '.repeat((depth + 1) * this.options.indentSize);\n return parts.join(` xor\\n${nextIndent}`);\n }\n\n return parts.join(' xor ');\n }\n\n private exportImpliesSpecification<T extends object = any>(\n spec: ImpliesSpecification<T>,\n depth: number,\n ): string {\n const antecedent = this.exportSpecification(\n spec.getAntecedent(),\n depth + 1,\n );\n const consequent = this.exportSpecification(\n spec.getConsequent(),\n depth + 1,\n );\n\n const leftPart = this.needsParentheses(spec.getAntecedent(), 'implies')\n ? `(${antecedent})`\n : antecedent;\n const rightPart = this.needsParentheses(spec.getConsequent(), 'implies')\n ? `(${consequent})`\n : consequent;\n\n if (\n this.options.prettyPrint &&\n this.shouldBreakLine(`${leftPart} implies ${rightPart}`)\n ) {\n const nextIndent = ' '.repeat((depth + 1) * this.options.indentSize);\n return `${leftPart} implies\\n${nextIndent}${rightPart}`;\n }\n\n return `${leftPart} implies ${rightPart}`;\n }\n\n private exportFunctionSpecification<T extends object = any>(\n spec: FunctionSpecification<T>,\n ): string {\n return spec.toDSL();\n }\n\n private exportAtLeastSpecification<T extends object = any>(\n spec: AtLeastSpecification<T>,\n depth: number,\n ): string {\n const minimum = spec.getMinimum();\n const specifications = spec.getSpecifications();\n const specDsls = specifications.map((s) =>\n this.exportSpecification(s, depth + 1),\n );\n\n if (this.options.prettyPrint && specDsls.length > 2) {\n const nextIndent = ' '.repeat((depth + 1) * this.options.indentSize);\n const specsStr = specDsls.join(`,\\n${nextIndent}`);\n return `atLeast(${minimum}, [\\n${nextIndent}${specsStr}\\n${' '.repeat(depth * this.options.indentSize)}])`;\n }\n\n return `atLeast(${minimum}, [${specDsls.join(', ')}])`;\n }\n\n private exportExactlySpecification<T extends object = any>(\n spec: ExactlySpecification<T>,\n depth: number,\n ): string {\n const exact = spec.getExact();\n const specifications = spec.getSpecifications();\n const specDsls = specifications.map((s) =>\n this.exportSpecification(s, depth + 1),\n );\n\n if (this.options.prettyPrint && specDsls.length > 2) {\n const nextIndent = ' '.repeat((depth + 1) * this.options.indentSize);\n const specsStr = specDsls.join(`,\\n${nextIndent}`);\n return `exactly(${exact}, [\\n${nextIndent}${specsStr}\\n${' '.repeat(depth * this.options.indentSize)}])`;\n }\n\n return `exactly(${exact}, [${specDsls.join(', ')}])`;\n }\n\n private exportFieldToFieldSpecification<T extends object = any>(\n spec: FieldToFieldSpecification<T>,\n ): string {\n return spec.toDSL();\n }\n\n private exportContextualSpecification<T extends object = any>(\n spec: ContextualSpecification<T>,\n ): string {\n return spec.toDSL();\n }\n\n private needsParentheses<T extends object = any>(\n spec: Specification<T>,\n parentContext: string,\n ): boolean {\n if (this.options.useParentheses === 'explicit') {\n return true;\n }\n\n if (this.options.useParentheses === 'minimal') {\n return false;\n }\n\n // Auto mode - determine based on operator precedence\n const precedence = this.getOperatorPrecedence(spec);\n const parentPrecedence = this.getContextPrecedence(parentContext);\n\n return precedence < parentPrecedence;\n }\n\n private getOperatorPrecedence<T extends object = any>(\n spec: Specification<T>,\n ): number {\n if (spec instanceof NotSpecification) return 5;\n if (spec instanceof AndSpecification) return 4;\n if (spec instanceof OrSpecification) return 3;\n if (spec instanceof XorSpecification) return 2;\n if (spec instanceof ImpliesSpecification) return 1;\n return 6; // Highest precedence for primitives\n }\n\n private getContextPrecedence(context: string): number {\n switch (context) {\n case 'not':\n return 5;\n case 'and':\n return 4;\n case 'or':\n return 3;\n case 'xor':\n return 2;\n case 'implies':\n return 1;\n default:\n return 0;\n }\n }\n\n private shouldBreakLine(line: string): boolean {\n return line.length > this.options.maxLineLength;\n }\n\n private formatPretty(dsl: string): string {\n // Additional pretty-printing logic could go here\n // For now, just return the DSL as-is since we handle formatting\n // in the individual export methods\n return dsl;\n }\n}\n","/**\n * Types of validation issues that can be found in DSL\n */\nexport enum ValidationIssueType {\n SYNTAX_ERROR = 'SyntaxError',\n UNKNOWN_FUNCTION = 'UnknownFunction',\n UNKNOWN_OPERATOR = 'UnknownOperator',\n UNBALANCED_PARENTHESES = 'UnbalancedParentheses',\n UNBALANCED_BRACKETS = 'UnbalancedBrackets',\n INVALID_TOKEN = 'InvalidToken',\n UNEXPECTED_TOKEN = 'UnexpectedToken',\n MISSING_ARGUMENT = 'MissingArgument',\n TOO_MANY_ARGUMENTS = 'TooManyArguments',\n INVALID_FIELD_REFERENCE = 'InvalidFieldReference',\n EMPTY_EXPRESSION = 'EmptyExpression',\n UNTERMINATED_STRING = 'UnterminatedString',\n INVALID_NUMBER = 'InvalidNumber',\n DEPRECATED_SYNTAX = 'DeprecatedSyntax',\n PERFORMANCE_WARNING = 'PerformanceWarning'\n}\n\n/**\n * Severity levels for validation issues\n */\nexport enum ValidationSeverity {\n ERROR = 'error',\n WARNING = 'warning',\n INFO = 'info',\n HINT = 'hint'\n}\n\n/**\n * Represents a validation issue found in DSL code\n */\nexport interface ValidationIssue {\n /**\n * Type of the issue\n */\n type: ValidationIssueType;\n\n /**\n * Severity level\n */\n severity: ValidationSeverity;\n\n /**\n * Human-readable error message\n */\n message: string;\n\n /**\n * Position information\n */\n position: {\n /**\n * Starting index in the input string\n */\n start: number;\n\n /**\n * Ending index in the input string\n */\n end: number;\n\n /**\n * Line number (1-based)\n */\n line: number;\n\n /**\n * Column number (1-based)\n */\n column: number;\n };\n\n /**\n * Suggested fix or correction\n */\n suggestion?: string;\n\n /**\n * Additional context or help text\n */\n help?: string;\n\n /**\n * Related documentation or examples\n */\n documentation?: string;\n}","import { DslTokenizer } from './tokenizer';\nimport { Token, TokenType, OPERATOR_KEYWORDS, COMPARISON_OPERATORS } from './token';\nimport { ValidationIssue, ValidationIssueType, ValidationSeverity } from './validation-issue';\nimport { FunctionRegistry } from '../registry/function-registry';\n\n/**\n * Configuration for DSL validation\n */\nexport interface DslValidatorConfig {\n /**\n * Available function names for validation\n */\n knownFunctions?: string[];\n\n /**\n * Function registry to check against\n */\n functionRegistry?: FunctionRegistry<any>;\n\n /**\n * Known field names for the target type\n */\n knownFields?: string[];\n\n /**\n * Maximum expression complexity (number of operators)\n */\n maxComplexity?: number;\n\n /**\n * Enable performance warnings\n */\n enablePerformanceWarnings?: boolean;\n\n /**\n * Enable deprecated syntax warnings\n */\n enableDeprecationWarnings?: boolean;\n}\n\n/**\n * Validates DSL expressions and provides detailed error reporting\n */\nexport class DslValidator {\n private config: Required<DslValidatorConfig>;\n\n private readonly BUILT_IN_FUNCTIONS = [\n 'contains', 'startsWith', 'endsWith', 'atLeast', 'exactly',\n 'forEach', 'uniqueBy', 'minLength', 'maxLength',\n 'requiredIf', 'visibleIf', 'disabledIf', 'readonlyIf',\n 'ifDefined', 'ifNotNull', 'ifExists', 'withDefault',\n 'matches', 'notMatches'\n ];\n\n constructor(config: DslValidatorConfig = {}) {\n this.config = {\n knownFunctions: config.knownFunctions || [],\n functionRegistry: config.functionRegistry,\n knownFields: config.knownFields || [],\n maxComplexity: config.maxComplexity || 50,\n enablePerformanceWarnings: config.enablePerformanceWarnings ?? true,\n enableDeprecationWarnings: config.enableDeprecationWarnings ?? true\n } as Required<DslValidatorConfig>;\n }\n\n /**\n * Validates a DSL expression and returns all issues found\n */\n validate(input: string): ValidationIssue[] {\n const issues: ValidationIssue[] = [];\n\n try {\n // Basic validation\n this.validateBasicStructure(input, issues);\n\n // Tokenize and validate tokens\n const tokenizer = new DslTokenizer(input);\n const tokens = tokenizer.tokenize();\n\n this.validateTokens(tokens, input, issues);\n this.validateSyntax(tokens, input, issues);\n this.validateSemantics(tokens, input, issues);\n this.validateComplexity(tokens, issues);\n\n } catch (error) {\n issues.push({\n type: ValidationIssueType.SYNTAX_ERROR,\n severity: ValidationSeverity.ERROR,\n message: `Unexpected error during validation: ${error}`,\n position: { start: 0, end: input.length, line: 1, column: 1 }\n });\n }\n\n return issues;\n }\n\n private validateBasicStructure(input: string, issues: ValidationIssue[]): void {\n // Check for empty expression\n if (input.trim().length === 0) {\n issues.push({\n type: ValidationIssueType.EMPTY_EXPRESSION,\n severity: ValidationSeverity.ERROR,\n message: 'Expression cannot be empty',\n position: { start: 0, end: 0, line: 1, column: 1 },\n suggestion: 'Add a valid expression'\n });\n return;\n }\n\n // Check for unbalanced parentheses\n this.validateBalancedDelimiters(input, '(', ')', ValidationIssueType.UNBALANCED_PARENTHESES, issues);\n\n // Check for unbalanced brackets\n this.validateBalancedDelimiters(input, '[', ']', ValidationIssueType.UNBALANCED_BRACKETS, issues);\n\n // Check for unterminated strings\n this.validateStringLiterals(input, issues);\n }\n\n private validateBalancedDelimiters(\n input: string,\n open: string,\n close: string,\n issueType: ValidationIssueType,\n issues: ValidationIssue[]\n ): void {\n let count = 0;\n let openPositions: number[] = [];\n\n for (let i = 0; i < input.length; i++) {\n if (input[i] === open) {\n count++;\n openPositions.push(i);\n } else if (input[i] === close) {\n count--;\n if (count < 0) {\n const { line, column } = this.getLineColumn(input, i);\n issues.push({\n type: issueType,\n severity: ValidationSeverity.ERROR,\n message: `Unexpected closing ${close}`,\n position: { start: i, end: i + 1, line, column },\n suggestion: `Remove the extra ${close} or add a matching ${open}`\n });\n } else {\n openPositions.pop();\n }\n }\n }\n\n // Report unclosed delimiters\n for (const pos of openPositions) {\n const { line, column } = this.getLineColumn(input, pos);\n issues.push({\n type: issueType,\n severity: ValidationSeverity.ERROR,\n message: `Unclosed ${open}`,\n position: { start: pos, end: pos + 1, line, column },\n suggestion: `Add a closing ${close}`\n });\n }\n }\n\n private validateStringLiterals(input: string, issues: ValidationIssue[]): void {\n const quotes = ['\"', \"'\"];\n\n for (const quote of quotes) {\n let inString = false;\n let startPos = -1;\n\n for (let i = 0; i < input.length; i++) {\n if (input[i] === quote) {\n if (!inString) {\n inString = true;\n startPos = i;\n } else {\n // Check if it's escaped\n let escaped = false;\n let backslashCount = 0;\n for (let j = i - 1; j >= 0 && input[j] === '\\\\'; j--) {\n backslashCount++;\n }\n escaped = backslashCount % 2 === 1;\n\n if (!escaped) {\n inString = false;\n startPos = -1;\n }\n }\n }\n }\n\n if (inString) {\n const { line, column } = this.getLineColumn(input, startPos);\n issues.push({\n type: ValidationIssueType.UNTERMINATED_STRING,\n severity: ValidationSeverity.ERROR,\n message: `Unterminated string literal starting with ${quote}`,\n position: { start: startPos, end: input.length, line, column },\n suggestion: `Add a closing ${quote}`\n });\n }\n }\n }\n\n private validateTokens(tokens: Token[], input: string, issues: ValidationIssue[]): void {\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n const nextToken = tokens[i + 1];\n if (token.type === TokenType.EOF) continue;\n\n // Validate numbers\n if (token.type === TokenType.NUMBER) {\n if (isNaN(Number(token.value))) {\n issues.push({\n type: ValidationIssueType.INVALID_NUMBER,\n severity: ValidationSeverity.ERROR,\n message: `Invalid number format: ${token.value}`,\n position: {\n start: token.position,\n end: token.position + token.value.length,\n line: token.line,\n column: token.column\n },\n suggestion: 'Use a valid number format (e.g., 42, 3.14, -5)'\n });\n }\n }\n\n // Validate field references\n if (token.type === TokenType.FIELD_REFERENCE || token.type === TokenType.IDENTIFIER) {\n // Function names are identifiers too, but should be validated as functions\n // (validateSemantics), not as field references.\n const isFunctionIdentifier = this.isFunctionToken(token, nextToken);\n if (isFunctionIdentifier) continue;\n\n if (this.config.knownFields.length > 0) {\n if (!this.config.knownFields.includes(token.value)) {\n issues.push({\n type: ValidationIssueType.INVALID_FIELD_REFERENCE,\n severity: ValidationSeverity.WARNING,\n message: `Unknown field: ${token.value}`,\n position: {\n start: token.position,\n end: token.position + token.value.length,\n line: token.line,\n column: token.column\n },\n suggestion: this.suggestSimilarField(token.value),\n help: `Available fields: ${this.config.knownFields.join(', ')}`\n });\n }\n }\n }\n }\n }\n\n private validateSyntax(tokens: Token[], input: string, issues: ValidationIssue[]): void {\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n const nextToken = tokens[i + 1];\n const prevToken = tokens[i - 1];\n\n // Check for consecutive operators\n if (this.isOperatorToken(token) && this.isOperatorToken(nextToken)) {\n // `matches(` and `notMatches(` can be tokenized as operator-like function names.\n if (this.isFunctionToken(nextToken, tokens[i + 2])) {\n continue;\n }\n\n // Allow NOT after binary operators (e.g. AND NOT, OR NOT)\n if (this.isBinaryOperatorToken(token) && nextToken.type === TokenType.NOT) {\n continue;\n }\n\n issues.push({\n type: ValidationIssueType.UNEXPECTED_TOKEN,\n severity: ValidationSeverity.ERROR,\n message: `Unexpected ${nextToken.type} after ${token.type}`,\n position: {\n start: nextToken.position,\n end: nextToken.position + nextToken.value.length,\n line: nextToken.line,\n column: nextToken.column\n },\n suggestion: 'Add an operand between operators'\n });\n }\n\n // Check for operators at the beginning/end\n if (i === 0 && this.isBinaryOperatorToken(token)) {\n if (this.isFunctionToken(token, nextToken)) {\n continue;\n }\n\n issues.push({\n type: ValidationIssueType.UNEXPECTED_TOKEN,\n severity: ValidationSeverity.ERROR,\n message: `Expression cannot start with ${token.type}`,\n position: {\n start: token.position,\n end: token.position + token.value.length,\n line: token.line,\n column: token.column\n },\n suggestion: 'Add an operand before the operator'\n });\n }\n\n if (i === tokens.length - 2 && this.isBinaryOperatorToken(token) && nextToken.type === TokenType.EOF) {\n issues.push({\n type: ValidationIssueType.UNEXPECTED_TOKEN,\n severity: ValidationSeverity.ERROR,\n message: `Expression cannot end with ${token.type}`,\n position: {\n start: token.position,\n end: token.position + token.value.length,\n line: token.line,\n column: token.column\n },\n suggestion: 'Add an operand after the operator'\n });\n }\n }\n }\n\n private validateSemantics(tokens: Token[], input: string, issues: ValidationIssue[]): void {\n // Check function calls\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n const nextToken = tokens[i + 1];\n\n if (this.isFunctionToken(token, nextToken)) {\n const functionName = this.normalizeFunctionTokenName(token);\n\n // Check if function is known\n const allKnownFunctions = [\n ...this.BUILT_IN_FUNCTIONS,\n ...this.config.knownFunctions\n ];\n\n if (this.config.functionRegistry) {\n allKnownFunctions.push(...Array.from(this.config.functionRegistry.getAll().keys()));\n }\n\n if (!allKnownFunctions.includes(functionName)) {\n issues.push({\n type: ValidationIssueType.UNKNOWN_FUNCTION,\n severity: ValidationSeverity.ERROR,\n message: `Unknown function: ${functionName}`,\n position: {\n start: token.position,\n end: token.position + token.value.length,\n line: token.line,\n column: token.column\n },\n suggestion: this.suggestSimilarFunction(functionName, allKnownFunctions),\n help: `Available functions: ${allKnownFunctions.join(', ')}`\n });\n }\n\n // Validate function arguments (basic check)\n this.validateFunctionArguments(functionName, i, tokens, issues);\n }\n }\n }\n\n private validateFunctionArguments(\n functionName: string,\n startIndex: number,\n tokens: Token[],\n issues: ValidationIssue[]\n ): void {\n // Find the argument list\n let parenCount = 0;\n let argCount = 0;\n let inArgs = false;\n\n for (let i = startIndex + 1; i < tokens.length; i++) {\n const token = tokens[i];\n\n if (token.type === TokenType.LEFT_PAREN) {\n parenCount++;\n if (parenCount === 1) {\n inArgs = true;\n }\n } else if (token.type === TokenType.RIGHT_PAREN) {\n parenCount--;\n if (parenCount === 0) {\n break;\n }\n } else if (token.type === TokenType.COMMA && parenCount === 1) {\n argCount++;\n } else if (inArgs && parenCount === 1 && token.type !== TokenType.COMMA) {\n // We have at least one argument\n if (argCount === 0) {\n argCount = 1;\n }\n }\n }\n\n // Check argument count for known functions\n const expectedArgs = this.getExpectedArgumentCount(functionName);\n if (expectedArgs !== null && argCount !== expectedArgs) {\n const functionToken = tokens[startIndex];\n const severity = argCount < expectedArgs ? ValidationSeverity.ERROR : ValidationSeverity.WARNING;\n const message = argCount < expectedArgs\n ? `Function ${functionName} expects ${expectedArgs} arguments, got ${argCount}`\n : `Function ${functionName} expects ${expectedArgs} arguments, got ${argCount}`;\n\n issues.push({\n type: argCount < expectedArgs ? ValidationIssueType.MISSING_ARGUMENT : ValidationIssueType.TOO_MANY_ARGUMENTS,\n severity,\n message,\n position: {\n start: functionToken.position,\n end: functionToken.position + functionToken.value.length,\n line: functionToken.line,\n column: functionToken.column\n },\n suggestion: `Use exactly ${expectedArgs} arguments`\n });\n }\n }\n\n private validateComplexity(tokens: Token[], issues: ValidationIssue[]): void {\n if (!this.config.enablePerformanceWarnings) return;\n\n const operatorCount = tokens.filter(token => this.isOperatorToken(token)).length;\n\n if (operatorCount > this.config.maxComplexity) {\n issues.push({\n type: ValidationIssueType.PERFORMANCE_WARNING,\n severity: ValidationSeverity.WARNING,\n message: `Expression complexity is high (${operatorCount} operators). Consider breaking into smaller expressions.`,\n position: { start: 0, end: 0, line: 1, column: 1 },\n help: 'Complex expressions can impact performance and readability'\n });\n }\n }\n\n private getExpectedArgumentCount(functionName: string): number | null {\n const argCounts: Record<string, number> = {\n 'contains': 2,\n 'startsWith': 2,\n 'endsWith': 2,\n 'atLeast': 2,\n 'exactly': 2,\n 'forEach': 2,\n 'uniqueBy': 2,\n 'minLength': 2,\n 'maxLength': 2,\n 'requiredIf': 2,\n 'visibleIf': 2,\n 'disabledIf': 2,\n 'readonlyIf': 2,\n 'ifDefined': 2,\n 'ifNotNull': 2,\n 'ifExists': 2,\n 'withDefault': 3,\n 'matches': 2,\n 'notMatches': 2\n };\n\n return argCounts[functionName] ?? null;\n }\n\n private isFunctionToken(token: Token | undefined, nextToken: Token | undefined): boolean {\n if (!token || !nextToken) return false;\n if (nextToken.type !== TokenType.LEFT_PAREN) return false;\n\n return token.type === TokenType.IDENTIFIER\n || token.type === TokenType.MATCHES\n || token.type === TokenType.NOT_MATCHES;\n }\n\n private normalizeFunctionTokenName(token: Token): string {\n if (token.type === TokenType.MATCHES) return 'matches';\n if (token.type === TokenType.NOT_MATCHES) return 'notMatches';\n return token.value;\n }\n\n private isOperatorToken(token: Token): boolean {\n return [\n TokenType.AND, TokenType.OR, TokenType.NOT, TokenType.XOR, TokenType.IMPLIES,\n TokenType.EQUALS, TokenType.NOT_EQUALS, TokenType.LESS_THAN,\n TokenType.LESS_THAN_OR_EQUAL, TokenType.GREATER_THAN, TokenType.GREATER_THAN_OR_EQUAL,\n TokenType.IN, TokenType.NOT_IN, TokenType.MATCHES, TokenType.NOT_MATCHES,\n TokenType.IS_NULL, TokenType.IS_NOT_NULL, TokenType.IS_EMPTY, TokenType.IS_NOT_EMPTY\n ].includes(token.type);\n }\n\n private isBinaryOperatorToken(token: Token): boolean {\n return [\n TokenType.AND, TokenType.OR, TokenType.XOR, TokenType.IMPLIES,\n TokenType.EQUALS, TokenType.NOT_EQUALS, TokenType.LESS_THAN,\n TokenType.LESS_THAN_OR_EQUAL, TokenType.GREATER_THAN, TokenType.GREATER_THAN_OR_EQUAL,\n TokenType.IN, TokenType.NOT_IN, TokenType.MATCHES, TokenType.NOT_MATCHES\n ].includes(token.type);\n }\n\n private suggestSimilarField(fieldName: string): string | undefined {\n return this.findSimilar(fieldName, this.config.knownFields);\n }\n\n private suggestSimilarFunction(functionName: string, knownFunctions: string[]): string | undefined {\n return this.findSimilar(functionName, knownFunctions);\n }\n\n private findSimilar(target: string, candidates: string[]): string | undefined {\n if (candidates.length === 0) return undefined;\n\n const similarities = candidates.map(candidate => ({\n candidate,\n distance: this.levenshteinDistance(target.toLowerCase(), candidate.toLowerCase())\n }));\n\n similarities.sort((a, b) => a.distance - b.distance);\n\n // Only suggest if the distance is reasonable\n if (similarities[0].distance <= Math.max(2, target.length * 0.4)) {\n return `Did you mean \"${similarities[0].candidate}\"?`;\n }\n\n return undefined;\n }\n\n private levenshteinDistance(a: string, b: string): number {\n const matrix: number[][] = [];\n\n for (let i = 0; i <= b.length; i++) {\n matrix[i] = [i];\n }\n\n for (let j = 0; j <= a.length; j++) {\n matrix[0][j] = j;\n }\n\n for (let i = 1; i <= b.length; i++) {\n for (let j = 1; j <= a.length; j++) {\n if (b.charAt(i - 1) === a.charAt(j - 1)) {\n matrix[i][j] = matrix[i - 1][j - 1];\n } else {\n matrix[i][j] = Math.min(\n matrix[i - 1][j - 1] + 1,\n matrix[i][j - 1] + 1,\n matrix[i - 1][j] + 1\n );\n }\n }\n }\n\n return matrix[b.length][a.length];\n }\n\n private getLineColumn(input: string, position: number): { line: number; column: number } {\n let line = 1;\n let column = 1;\n\n for (let i = 0; i < position && i < input.length; i++) {\n if (input[i] === '\\n') {\n line++;\n column = 1;\n } else {\n column++;\n }\n }\n\n return { line, column };\n }\n}\n","import { Specification } from '@praxisui/specification-core';\nimport { FieldSpecification } from '../specification/field-specification';\nimport { AndSpecification } from '../specification/and-specification';\nimport { OrSpecification } from '../specification/or-specification';\nimport { NotSpecification } from '../specification/not-specification';\nimport { XorSpecification } from '../specification/xor-specification';\nimport { ImpliesSpecification } from '../specification/implies-specification';\nimport { FunctionSpecification } from '../specification/function-specification';\nimport { AtLeastSpecification } from '../specification/at-least-specification';\nimport { ExactlySpecification } from '../specification/exactly-specification';\nimport { FieldToFieldSpecification } from '../specification/field-to-field-specification';\nimport { ContextualSpecification } from '../specification/contextual-specification';\nimport { ComparisonOperator } from '../specification/comparison-operator';\nimport { FunctionRegistry } from '../registry/function-registry';\nimport { TransformRegistry } from '../registry/transform-registry';\nimport { ContextProvider } from '../context/context-provider';\nimport { SpecificationMetadata } from '@praxisui/specification-core';\nimport {\n RequiredIfSpecification,\n VisibleIfSpecification,\n DisabledIfSpecification,\n ReadonlyIfSpecification,\n} from '../specification/conditional-validators';\nimport {\n ForEachSpecification,\n UniqueBySpecification,\n MinLengthSpecification,\n MaxLengthSpecification,\n} from '../specification/collection-specifications';\nimport {\n IfDefinedSpecification,\n IfNotNullSpecification,\n IfExistsSpecification,\n WithDefaultSpecification,\n} from '../specification/optional-specifications';\nimport { FormSpecification } from '../specification/form-specification';\n\nexport class SpecificationFactory {\n static fromJSON<T extends object = any>(json: any): Specification<T> {\n // Robustez: validar entrada e inferir quando possível\n if (json == null) {\n throw new Error('Invalid specification JSON: null/undefined');\n }\n\n if (Array.isArray(json)) {\n const specs = json.map((specJson) =>\n SpecificationFactory.fromJSON<T>(specJson),\n );\n return new AndSpecification<T>(specs);\n }\n\n if (typeof json !== 'object') {\n throw new Error(\n `Invalid specification JSON: expected object/array, got ${typeof json}`,\n );\n }\n\n // Inferência quando 'type' está ausente\n if (!json.type) {\n if (Array.isArray(json.specs)) {\n const specs = json.specs.map((specJson: any) =>\n SpecificationFactory.fromJSON<T>(specJson),\n );\n return new AndSpecification<T>(specs);\n }\n\n if ('field' in json && 'operator' in json) {\n return FieldSpecification.fromJSON<T>({ type: 'field', ...json });\n }\n\n if ('antecedent' in json && 'consequent' in json) {\n const antecedent = SpecificationFactory.fromJSON<T>(json.antecedent);\n const consequent = SpecificationFactory.fromJSON<T>(json.consequent);\n return new ImpliesSpecification<T>(antecedent, consequent);\n }\n\n if ('spec' in json) {\n const notSpec = SpecificationFactory.fromJSON<T>(json.spec);\n return new NotSpecification<T>(notSpec);\n }\n\n if ('itemSpecification' in json && 'arrayField' in json) {\n const itemSpec = SpecificationFactory.fromJSON(json.itemSpecification);\n return new ForEachSpecification<T>(\n json.arrayField as keyof T,\n itemSpec,\n json.metadata,\n );\n }\n\n // Se não for possível inferir, manter erro claro\n throw new Error('Unknown specification type: undefined');\n }\n\n switch (json.type) {\n case 'field':\n return FieldSpecification.fromJSON<T>(json);\n\n case 'and':\n const andSpecs = json.specs.map((specJson: any) =>\n SpecificationFactory.fromJSON<T>(specJson),\n );\n return new AndSpecification<T>(andSpecs);\n\n case 'or':\n const orSpecs = json.specs.map((specJson: any) =>\n SpecificationFactory.fromJSON<T>(specJson),\n );\n return new OrSpecification<T>(orSpecs);\n\n case 'not':\n const notSpec = SpecificationFactory.fromJSON<T>(json.spec);\n return new NotSpecification<T>(notSpec);\n\n case 'xor':\n const xorSpecs = json.specs.map((specJson: any) =>\n SpecificationFactory.fromJSON<T>(specJson),\n );\n return new XorSpecification<T>(xorSpecs);\n\n case 'implies':\n const antecedent = SpecificationFactory.fromJSON<T>(json.antecedent);\n const consequent = SpecificationFactory.fromJSON<T>(json.consequent);\n return new ImpliesSpecification<T>(antecedent, consequent);\n\n case 'function':\n return FunctionSpecification.fromJSON<T>(json);\n\n case 'atLeast':\n const atLeastSpecs = json.specs.map((specJson: any) =>\n SpecificationFactory.fromJSON<T>(specJson),\n );\n return new AtLeastSpecification<T>(json.minimum, atLeastSpecs);\n\n case 'exactly':\n const exactlySpecs = json.specs.map((specJson: any) =>\n SpecificationFactory.fromJSON<T>(specJson),\n );\n return new ExactlySpecification<T>(json.exact, exactlySpecs);\n\n case 'fieldToField':\n return FieldToFieldSpecification.fromJSON<T>(json);\n\n case 'contextual':\n return ContextualSpecification.fromJSON<T>(json);\n\n case 'requiredIf':\n const requiredCondition = SpecificationFactory.fromJSON<T>(\n json.condition,\n );\n return new RequiredIfSpecification<T>(\n json.field as keyof T,\n requiredCondition,\n json.metadata,\n );\n\n case 'visibleIf':\n const visibleCondition = SpecificationFactory.fromJSON<T>(\n json.condition,\n );\n return new VisibleIfSpecification<T>(\n json.field as keyof T,\n visibleCondition,\n json.metadata,\n );\n\n case 'disabledIf':\n const disabledCondition = SpecificationFactory.fromJSON<T>(\n json.condition,\n );\n return new DisabledIfSpecification<T>(\n json.field as keyof T,\n disabledCondition,\n json.metadata,\n );\n\n case 'readonlyIf':\n const readonlyCondition = SpecificationFactory.fromJSON<T>(\n json.condition,\n );\n return new ReadonlyIfSpecification<T>(\n json.field as keyof T,\n readonlyCondition,\n json.metadata,\n );\n\n case 'forEach':\n const itemSpec = SpecificationFactory.fromJSON(json.itemSpecification);\n return new ForEachSpecification<T>(\n json.arrayField as keyof T,\n itemSpec,\n json.metadata,\n );\n\n case 'uniqueBy':\n return UniqueBySpecification.fromJSON<T>(json);\n\n case 'minLength':\n return MinLengthSpecification.fromJSON<T>(json);\n\n case 'maxLength':\n return MaxLengthSpecification.fromJSON<T>(json);\n\n case 'ifDefined':\n const ifDefinedSpec = SpecificationFactory.fromJSON<T>(\n json.specification,\n );\n return new IfDefinedSpecification<T>(\n json.field as keyof T,\n ifDefinedSpec,\n json.metadata,\n );\n\n case 'ifNotNull':\n const ifNotNullSpec = SpecificationFactory.fromJSON<T>(\n json.specification,\n );\n return new IfNotNullSpecification<T>(\n json.field as keyof T,\n ifNotNullSpec,\n json.metadata,\n );\n\n case 'ifExists':\n const ifExistsSpec = SpecificationFactory.fromJSON<T>(\n json.specification,\n );\n return new IfExistsSpecification<T>(\n json.field as keyof T,\n ifExistsSpec,\n json.metadata,\n );\n\n case 'withDefault':\n const withDefaultSpec = SpecificationFactory.fromJSON<T>(\n json.specification,\n );\n return new WithDefaultSpecification<T>(\n json.field as keyof T,\n json.defaultValue,\n withDefaultSpec,\n json.metadata,\n );\n\n case 'form':\n // Form specifications require special reconstruction\n throw new Error('FormSpecification.fromJSON not yet implemented');\n\n default:\n throw new Error(`Unknown specification type: ${json.type}`);\n }\n }\n\n static field<T extends object = any>(\n field: keyof T,\n operator: ComparisonOperator,\n value: any,\n ): FieldSpecification<T> {\n return new FieldSpecification<T>(field, operator, value);\n }\n\n static and<T extends object = any>(\n ...specs: Specification<T>[]\n ): AndSpecification<T> {\n return new AndSpecification<T>(specs);\n }\n\n static or<T extends object = any>(\n ...specs: Specification<T>[]\n ): OrSpecification<T> {\n return new OrSpecification<T>(specs);\n }\n\n static not<T extends object = any>(\n spec: Specification<T>,\n ): NotSpecification<T> {\n return new NotSpecification<T>(spec);\n }\n\n static xor<T extends object = any>(\n ...specs: Specification<T>[]\n ): XorSpecification<T> {\n return new XorSpecification<T>(specs);\n }\n\n static implies<T extends object = any>(\n antecedent: Specification<T>,\n consequent: Specification<T>,\n ): ImpliesSpecification<T> {\n return new ImpliesSpecification<T>(antecedent, consequent);\n }\n\n static func<T extends object = any>(\n name: string,\n args: any[],\n registry?: FunctionRegistry<T>,\n ): FunctionSpecification<T> {\n return new FunctionSpecification<T>(name, args, registry);\n }\n\n static atLeast<T extends object = any>(\n minimum: number,\n specs: Specification<T>[],\n ): AtLeastSpecification<T> {\n return new AtLeastSpecification<T>(minimum, specs);\n }\n\n static exactly<T extends object = any>(\n exact: number,\n specs: Specification<T>[],\n ): ExactlySpecification<T> {\n return new ExactlySpecification<T>(exact, specs);\n }\n\n static fieldToField<T extends object = any>(\n fieldA: keyof T,\n operator: ComparisonOperator,\n fieldB: keyof T,\n transformA?: string[],\n transformB?: string[],\n registry?: TransformRegistry,\n metadata?: SpecificationMetadata,\n ): FieldToFieldSpecification<T> {\n return new FieldToFieldSpecification<T>(\n fieldA,\n operator,\n fieldB,\n transformA,\n transformB,\n registry,\n metadata,\n );\n }\n\n static contextual<T extends object = any>(\n template: string,\n provider?: ContextProvider,\n ): ContextualSpecification<T> {\n return new ContextualSpecification<T>(template, provider);\n }\n\n // Convenience methods for common operators\n static equals<T extends object = any>(\n field: keyof T,\n value: any,\n ): FieldSpecification<T> {\n return new FieldSpecification<T>(field, ComparisonOperator.EQUALS, value);\n }\n\n static notEquals<T extends object = any>(\n field: keyof T,\n value: any,\n ): FieldSpecification<T> {\n return new FieldSpecification<T>(\n field,\n ComparisonOperator.NOT_EQUALS,\n value,\n );\n }\n\n static greaterThan<T extends object = any>(\n field: keyof T,\n value: any,\n ): FieldSpecification<T> {\n return new FieldSpecification<T>(\n field,\n ComparisonOperator.GREATER_THAN,\n value,\n );\n }\n\n static lessThan<T extends object = any>(\n field: keyof T,\n value: any,\n ): FieldSpecification<T> {\n return new FieldSpecification<T>(\n field,\n ComparisonOperator.LESS_THAN,\n value,\n );\n }\n\n static contains<T extends object = any>(\n field: keyof T,\n value: any,\n ): FieldSpecification<T> {\n return new FieldSpecification<T>(field, ComparisonOperator.CONTAINS, value);\n }\n\n static startsWith<T extends object = any>(\n field: keyof T,\n value: any,\n ): FieldSpecification<T> {\n return new FieldSpecification<T>(\n field,\n ComparisonOperator.STARTS_WITH,\n value,\n );\n }\n\n static endsWith<T extends object = any>(\n field: keyof T,\n value: any,\n ): FieldSpecification<T> {\n return new FieldSpecification<T>(\n field,\n ComparisonOperator.ENDS_WITH,\n value,\n );\n }\n\n static isIn<T extends object = any>(\n field: keyof T,\n values: any[],\n ): FieldSpecification<T> {\n return new FieldSpecification<T>(field, ComparisonOperator.IN, values);\n }\n\n // Phase 2: Conditional validators\n static requiredIf<T extends object = any>(\n field: keyof T,\n condition: Specification<T>,\n metadata?: SpecificationMetadata,\n ): RequiredIfSpecification<T> {\n return new RequiredIfSpecification<T>(field, condition, metadata);\n }\n\n static visibleIf<T extends object = any>(\n field: keyof T,\n condition: Specification<T>,\n metadata?: SpecificationMetadata,\n ): VisibleIfSpecification<T> {\n return new VisibleIfSpecification<T>(field, condition, metadata);\n }\n\n static disabledIf<T extends object = any>(\n field: keyof T,\n condition: Specification<T>,\n metadata?: SpecificationMetadata,\n ): DisabledIfSpecification<T> {\n return new DisabledIfSpecification<T>(field, condition, metadata);\n }\n\n static readonlyIf<T extends object = any>(\n field: keyof T,\n condition: Specification<T>,\n metadata?: SpecificationMetadata,\n ): ReadonlyIfSpecification<T> {\n return new ReadonlyIfSpecification<T>(field, condition, metadata);\n }\n\n // Phase 2: Collection specifications\n static forEach<T extends object = any, TItem extends object = any>(\n arrayField: keyof T,\n itemSpecification: Specification<TItem>,\n metadata?: SpecificationMetadata,\n ): ForEachSpecification<T, TItem> {\n return new ForEachSpecification<T, TItem>(\n arrayField,\n itemSpecification,\n metadata,\n );\n }\n\n static uniqueBy<T extends object = any>(\n arrayField: keyof T,\n keySelector: string | ((item: any) => any),\n metadata?: SpecificationMetadata,\n ): UniqueBySpecification<T> {\n return new UniqueBySpecification<T>(arrayField, keySelector, metadata);\n }\n\n static minLength<T extends object = any>(\n arrayField: keyof T,\n minLength: number,\n metadata?: SpecificationMetadata,\n ): MinLengthSpecification<T> {\n return new MinLengthSpecification<T>(arrayField, minLength, metadata);\n }\n\n static maxLength<T extends object = any>(\n arrayField: keyof T,\n maxLength: number,\n metadata?: SpecificationMetadata,\n ): MaxLengthSpecification<T> {\n return new MaxLengthSpecification<T>(arrayField, maxLength, metadata);\n }\n\n // Phase 2: Optional field handling\n static ifDefined<T extends object = any>(\n field: keyof T,\n specification: Specification<T>,\n metadata?: SpecificationMetadata,\n ): IfDefinedSpecification<T> {\n return new IfDefinedSpecification<T>(field, specification, metadata);\n }\n\n static ifNotNull<T extends object = any>(\n field: keyof T,\n specification: Specification<T>,\n metadata?: SpecificationMetadata,\n ): IfNotNullSpecification<T> {\n return new IfNotNullSpecification<T>(field, specification, metadata);\n }\n\n static ifExists<T extends object = any>(\n field: keyof T,\n specification: Specification<T>,\n metadata?: SpecificationMetadata,\n ): IfExistsSpecification<T> {\n return new IfExistsSpecification<T>(field, specification, metadata);\n }\n\n static withDefault<T extends object = any>(\n field: keyof T,\n defaultValue: any,\n specification: Specification<T>,\n metadata?: SpecificationMetadata,\n ): WithDefaultSpecification<T> {\n return new WithDefaultSpecification<T>(\n field,\n defaultValue,\n specification,\n metadata,\n );\n }\n\n // Phase 2: Form specifications\n static form<T extends object = any>(\n metadata?: SpecificationMetadata,\n ): FormSpecification<T> {\n return new FormSpecification<T>(metadata);\n }\n\n // Phase 2: Enhanced field specifications with metadata\n static fieldWithMetadata<T extends object = any>(\n field: keyof T,\n operator: ComparisonOperator,\n value: any,\n metadata: SpecificationMetadata,\n ): FieldSpecification<T> {\n return new FieldSpecification<T>(field, operator, value, metadata);\n }\n\n // Convenience methods with metadata support\n static equalsWithMetadata<T extends object = any>(\n field: keyof T,\n value: any,\n metadata: SpecificationMetadata,\n ): FieldSpecification<T> {\n return new FieldSpecification<T>(\n field,\n ComparisonOperator.EQUALS,\n value,\n metadata,\n );\n }\n\n static greaterThanWithMetadata<T extends object = any>(\n field: keyof T,\n value: any,\n metadata: SpecificationMetadata,\n ): FieldSpecification<T> {\n return new FieldSpecification<T>(\n field,\n ComparisonOperator.GREATER_THAN,\n value,\n metadata,\n );\n }\n}\n","import { Specification } from '@praxisui/specification-core';\nimport { AndSpecification } from '../specification/and-specification';\nimport { OrSpecification } from '../specification/or-specification';\nimport { NotSpecification } from '../specification/not-specification';\nimport { FieldSpecification } from '../specification/field-specification';\n\nexport class SpecificationUtils {\n /**\n * Simplifies a specification by removing redundant nesting and applying logical rules\n */\n static simplify<T extends object = any>(\n spec: Specification<T>,\n ): Specification<T> {\n if (spec instanceof AndSpecification) {\n return this.simplifyAnd(spec);\n }\n\n if (spec instanceof OrSpecification) {\n return this.simplifyOr(spec);\n }\n\n if (spec instanceof NotSpecification) {\n return this.simplifyNot(spec);\n }\n\n return spec;\n }\n\n private static simplifyAnd<T extends object = any>(\n spec: AndSpecification<T>,\n ): Specification<T> {\n const specs = spec.getSpecifications();\n const flattened: Specification<T>[] = [];\n\n // Flatten nested AND specifications\n for (const s of specs) {\n const simplified = this.simplify(s);\n if (simplified instanceof AndSpecification) {\n flattened.push(...simplified.getSpecifications());\n } else {\n flattened.push(simplified);\n }\n }\n\n // Remove duplicates and contradictions\n const unique = this.removeDuplicates(flattened);\n\n if (unique.length === 0) {\n throw new Error('Empty AND specification');\n }\n\n if (unique.length === 1) {\n return unique[0];\n }\n\n return new AndSpecification<T>(unique);\n }\n\n private static simplifyOr<T extends object = any>(\n spec: OrSpecification<T>,\n ): Specification<T> {\n const specs = spec.getSpecifications();\n const flattened: Specification<T>[] = [];\n\n // Flatten nested OR specifications\n for (const s of specs) {\n const simplified = this.simplify(s);\n if (simplified instanceof OrSpecification) {\n flattened.push(...simplified.getSpecifications());\n } else {\n flattened.push(simplified);\n }\n }\n\n // Remove duplicates\n const unique = this.removeDuplicates(flattened);\n\n if (unique.length === 0) {\n throw new Error('Empty OR specification');\n }\n\n if (unique.length === 1) {\n return unique[0];\n }\n\n return new OrSpecification<T>(unique);\n }\n\n private static simplifyNot<T extends object = any>(\n spec: NotSpecification<T>,\n ): Specification<T> {\n const inner = spec.getSpecification();\n\n // Double negation elimination: !!A = A\n if (inner instanceof NotSpecification) {\n return this.simplify(inner.getSpecification());\n }\n\n const simplified = this.simplify(inner);\n\n if (simplified === inner) {\n return spec;\n }\n\n return new NotSpecification<T>(simplified);\n }\n\n private static removeDuplicates<T extends object = any>(\n specs: Specification<T>[],\n ): Specification<T>[] {\n const unique: Specification<T>[] = [];\n const seen = new Set<string>();\n\n for (const spec of specs) {\n const key = JSON.stringify(spec.toJSON());\n if (!seen.has(key)) {\n seen.add(key);\n unique.push(spec);\n }\n }\n\n return unique;\n }\n\n /**\n * Checks if two specifications are logically equivalent\n */\n static areEquivalent<T extends object = any>(\n spec1: Specification<T>,\n spec2: Specification<T>,\n ): boolean {\n const json1 = JSON.stringify(this.simplify(spec1).toJSON());\n const json2 = JSON.stringify(this.simplify(spec2).toJSON());\n return json1 === json2;\n }\n\n /**\n * Gets all field references used in a specification\n */\n static getReferencedFields<T extends object = any>(\n spec: Specification<T>,\n ): Set<keyof T> {\n const fields = new Set<keyof T>();\n this.collectFields(spec, fields);\n return fields;\n }\n\n private static collectFields<T extends object = any>(\n spec: Specification<T>,\n fields: Set<keyof T>,\n ): void {\n if (spec instanceof FieldSpecification) {\n fields.add(spec.getField() as keyof T);\n } else if (\n spec instanceof AndSpecification ||\n spec instanceof OrSpecification\n ) {\n spec.getSpecifications().forEach((s) => this.collectFields(s, fields));\n } else if (spec instanceof NotSpecification) {\n this.collectFields(spec.getSpecification(), fields);\n }\n // Add more cases as needed for other specification types\n }\n\n /**\n * Validates a specification for common issues\n */\n static validate<T extends object = any>(\n spec: Specification<T>,\n ): ValidationResult {\n const errors: string[] = [];\n const warnings: string[] = [];\n\n try {\n this.validateSpecification(spec, errors, warnings);\n } catch (error) {\n errors.push(`Validation error: ${error}`);\n }\n\n return {\n isValid: errors.length === 0,\n errors,\n warnings,\n };\n }\n\n private static validateSpecification<T extends object = any>(\n spec: Specification<T>,\n errors: string[],\n warnings: string[],\n ): void {\n if (spec instanceof AndSpecification || spec instanceof OrSpecification) {\n const specs = spec.getSpecifications();\n if (specs.length === 0) {\n errors.push(\n `${spec.constructor.name} must have at least one specification`,\n );\n }\n specs.forEach((s) => this.validateSpecification(s, errors, warnings));\n } else if (spec instanceof NotSpecification) {\n this.validateSpecification(spec.getSpecification(), errors, warnings);\n }\n // Add more validation rules as needed\n }\n\n /**\n * Estimates the complexity of a specification (useful for performance analysis)\n */\n static getComplexity<T extends object = any>(spec: Specification<T>): number {\n if (spec instanceof FieldSpecification) {\n return 1;\n }\n\n if (spec instanceof AndSpecification || spec instanceof OrSpecification) {\n return spec\n .getSpecifications()\n .reduce((total, s) => total + this.getComplexity(s), 1);\n }\n\n if (spec instanceof NotSpecification) {\n return 1 + this.getComplexity(spec.getSpecification());\n }\n\n return 1; // Base complexity for unknown types\n }\n}\n\nexport interface ValidationResult {\n isValid: boolean;\n errors: string[];\n warnings: string[];\n}\n","// Utility functions for specifications\nexport * from './specification-factory';\nexport * from './specification-utils';","// Main entry point for @praxisui/specification library\nexport * from './specification';\nexport * from './dsl';\nexport * from './registry';\nexport * from './context';\nexport * from './utils';\n\n// Re-export commonly used classes for convenience\nexport { SpecificationFactory } from './utils/specification-factory';\nexport { DslParser } from './dsl/parser';\nexport { DslExporter } from './dsl/exporter';\nexport { FunctionRegistry } from './registry/function-registry';\nexport { TransformRegistry } from './registry/transform-registry';\n","/*\n * Public API Surface of @praxisui/specification\n */\n\nexport * from './lib/praxis-specification';\n\n// Specification exports\nexport * from './lib/specification';\n\n// DSL exports \nexport * from './lib/dsl';\n\n// Context exports\nexport * from './lib/context';\n\n// Registry exports\nexport * from './lib/registry';\n\n// Utils exports\nexport * from './lib/utils';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"praxisui-specification.mjs","sources":["../../../projects/praxis-specification/src/lib/specification/comparison-operator.ts","../../../projects/praxis-specification/src/lib/specification/field-specification.ts","../../../projects/praxis-specification/src/lib/specification/and-specification.ts","../../../projects/praxis-specification/src/lib/specification/or-specification.ts","../../../projects/praxis-specification/src/lib/specification/xor-specification.ts","../../../projects/praxis-specification/src/lib/specification/implies-specification.ts","../../../projects/praxis-specification/src/lib/specification/not-specification.ts","../../../projects/praxis-specification/src/lib/registry/function-registry.ts","../../../projects/praxis-specification/src/lib/specification/function-specification.ts","../../../projects/praxis-specification/src/lib/specification/at-least-specification.ts","../../../projects/praxis-specification/src/lib/specification/exactly-specification.ts","../../../projects/praxis-specification/src/lib/registry/transform-registry.ts","../../../projects/praxis-specification/src/lib/specification/field-to-field-specification.ts","../../../projects/praxis-specification/src/lib/context/context-provider.ts","../../../projects/praxis-specification/src/lib/specification/contextual-specification.ts","../../../projects/praxis-specification/src/lib/specification/conditional-validators.ts","../../../projects/praxis-specification/src/lib/specification/collection-specifications.ts","../../../projects/praxis-specification/src/lib/specification/optional-specifications.ts","../../../projects/praxis-specification/src/lib/specification/form-specification.ts","../../../projects/praxis-specification/src/lib/dsl/token.ts","../../../projects/praxis-specification/src/lib/dsl/tokenizer.ts","../../../projects/praxis-specification/src/lib/dsl/parser.ts","../../../projects/praxis-specification/src/lib/dsl/exporter.ts","../../../projects/praxis-specification/src/lib/dsl/validation-issue.ts","../../../projects/praxis-specification/src/lib/dsl/dsl-validator.ts","../../../projects/praxis-specification/src/lib/utils/specification-factory.ts","../../../projects/praxis-specification/src/lib/utils/specification-utils.ts","../../../projects/praxis-specification/src/lib/utils/index.ts","../../../projects/praxis-specification/src/lib/praxis-specification.ts","../../../projects/praxis-specification/src/public-api.ts","../../../projects/praxis-specification/src/praxisui-specification.ts"],"sourcesContent":["export enum ComparisonOperator {\n EQUALS = 'eq',\n NOT_EQUALS = 'neq',\n LESS_THAN = 'lt',\n LESS_THAN_OR_EQUAL = 'lte',\n GREATER_THAN = 'gt',\n GREATER_THAN_OR_EQUAL = 'gte',\n CONTAINS = 'contains',\n STARTS_WITH = 'startsWith',\n ENDS_WITH = 'endsWith',\n IN = 'in',\n NOT_IN = 'notIn',\n MATCHES = 'matches',\n NOT_MATCHES = 'notMatches',\n IS_NULL = 'isNull',\n IS_NOT_NULL = 'isNotNull',\n IS_EMPTY = 'isEmpty',\n IS_NOT_EMPTY = 'isNotEmpty'\n}\n\nexport const OPERATOR_SYMBOLS: Record<ComparisonOperator, string> = {\n [ComparisonOperator.EQUALS]: '==',\n [ComparisonOperator.NOT_EQUALS]: '!=',\n [ComparisonOperator.LESS_THAN]: '<',\n [ComparisonOperator.LESS_THAN_OR_EQUAL]: '<=',\n [ComparisonOperator.GREATER_THAN]: '>',\n [ComparisonOperator.GREATER_THAN_OR_EQUAL]: '>=',\n [ComparisonOperator.CONTAINS]: 'contains',\n [ComparisonOperator.STARTS_WITH]: 'startsWith',\n [ComparisonOperator.ENDS_WITH]: 'endsWith',\n [ComparisonOperator.IN]: 'in',\n [ComparisonOperator.NOT_IN]: 'not in',\n [ComparisonOperator.MATCHES]: 'matches',\n [ComparisonOperator.NOT_MATCHES]: '!~',\n [ComparisonOperator.IS_NULL]: 'is null',\n [ComparisonOperator.IS_NOT_NULL]: 'is not null',\n [ComparisonOperator.IS_EMPTY]: 'is empty',\n [ComparisonOperator.IS_NOT_EMPTY]: 'is not empty'\n};\n","import { Specification } from '@praxisui/specification-core';\nimport { ComparisonOperator, OPERATOR_SYMBOLS } from './comparison-operator';\nimport { SpecificationMetadata } from '@praxisui/specification-core';\n\nexport class FieldSpecification<\n T extends object = any,\n> extends Specification<T> {\n constructor(\n private field: keyof T,\n private operator: ComparisonOperator,\n private value: any,\n metadata?: SpecificationMetadata,\n ) {\n super(metadata);\n }\n\n isSatisfiedBy(obj: T): boolean {\n const fieldValue = obj[this.field];\n\n switch (this.operator) {\n case ComparisonOperator.EQUALS:\n return fieldValue === this.value;\n\n case ComparisonOperator.NOT_EQUALS:\n return fieldValue !== this.value;\n\n case ComparisonOperator.LESS_THAN:\n return fieldValue < this.value;\n\n case ComparisonOperator.LESS_THAN_OR_EQUAL:\n return fieldValue <= this.value;\n\n case ComparisonOperator.GREATER_THAN:\n return fieldValue > this.value;\n\n case ComparisonOperator.GREATER_THAN_OR_EQUAL:\n return fieldValue >= this.value;\n\n case ComparisonOperator.CONTAINS:\n return String(fieldValue).includes(String(this.value));\n\n case ComparisonOperator.STARTS_WITH:\n return String(fieldValue).startsWith(String(this.value));\n\n case ComparisonOperator.ENDS_WITH:\n return String(fieldValue).endsWith(String(this.value));\n\n case ComparisonOperator.IN:\n return Array.isArray(this.value) && this.value.includes(fieldValue);\n\n case ComparisonOperator.NOT_IN:\n return Array.isArray(this.value) && !this.value.includes(fieldValue);\n\n case ComparisonOperator.MATCHES:\n if (this.value === undefined || this.value === null) {\n return false;\n }\n return this.toRegExp(this.value).test(String(fieldValue));\n\n case ComparisonOperator.NOT_MATCHES:\n if (this.value === undefined || this.value === null) {\n return false;\n }\n return !this.toRegExp(this.value).test(String(fieldValue));\n\n case ComparisonOperator.IS_NULL:\n return fieldValue === null || fieldValue === undefined;\n\n case ComparisonOperator.IS_NOT_NULL:\n return fieldValue !== null && fieldValue !== undefined;\n\n case ComparisonOperator.IS_EMPTY:\n return this.isEmpty(fieldValue);\n\n case ComparisonOperator.IS_NOT_EMPTY:\n return this.isNotEmpty(fieldValue);\n\n default:\n throw new Error(`Unsupported operator: ${this.operator}`);\n }\n }\n\n toJSON(): any {\n return {\n type: 'field',\n field: String(this.field),\n operator: this.operator,\n value: this.value,\n metadata: this.metadata,\n };\n }\n\n static override fromJSON<T extends object = any>(\n json: any,\n ): FieldSpecification<T> {\n return new FieldSpecification<T>(\n json.field as keyof T,\n json.operator as ComparisonOperator,\n json.value,\n json.metadata,\n );\n }\n\n clone(): FieldSpecification<T> {\n return new FieldSpecification<T>(\n this.field,\n this.operator,\n this.value,\n this.metadata,\n );\n }\n\n toDSL(): string {\n const fieldName = String(this.field);\n const symbol = OPERATOR_SYMBOLS[this.operator];\n\n switch (this.operator) {\n case ComparisonOperator.CONTAINS:\n return `contains(${fieldName}, ${JSON.stringify(this.value)})`;\n\n case ComparisonOperator.STARTS_WITH:\n return `startsWith(${fieldName}, ${JSON.stringify(this.value)})`;\n\n case ComparisonOperator.ENDS_WITH:\n return `endsWith(${fieldName}, ${JSON.stringify(this.value)})`;\n\n case ComparisonOperator.IN:\n case ComparisonOperator.NOT_IN: {\n const values = Array.isArray(this.value)\n ? this.value.map((v) => JSON.stringify(v)).join(', ')\n : JSON.stringify(this.value);\n const keyword =\n this.operator === ComparisonOperator.NOT_IN ? 'not in' : 'in';\n return `${fieldName} ${keyword} [${values}]`;\n }\n\n case ComparisonOperator.MATCHES:\n return `${fieldName} matches ${this.formatMatchesValue(this.value)}`;\n case ComparisonOperator.NOT_MATCHES:\n return `${fieldName} !~ ${this.formatMatchesValue(this.value)}`;\n\n case ComparisonOperator.IS_NULL:\n return `${fieldName} is null`;\n\n case ComparisonOperator.IS_NOT_NULL:\n return `${fieldName} is not null`;\n\n case ComparisonOperator.IS_EMPTY:\n return `${fieldName} is empty`;\n\n case ComparisonOperator.IS_NOT_EMPTY:\n return `${fieldName} is not empty`;\n\n default:\n return `${fieldName} ${symbol} ${JSON.stringify(this.value)}`;\n }\n }\n\n getField(): keyof T {\n return this.field;\n }\n\n getOperator(): ComparisonOperator {\n return this.operator;\n }\n\n getValue(): any {\n return this.value;\n }\n\n private toRegExp(value: any): RegExp {\n if (value instanceof RegExp) {\n return value;\n }\n\n if (typeof value === 'string') {\n const regexLiteral = value.match(/^\\/(.+)\\/([gimsuy]*)$/);\n if (regexLiteral) {\n return new RegExp(regexLiteral[1], regexLiteral[2]);\n }\n return new RegExp(value);\n }\n\n return new RegExp(String(value));\n }\n\n private isEmpty(value: any): boolean {\n // Consider null/undefined as empty to align with DSL semantics for \"is empty\".\n if (value === null || value === undefined) {\n return true;\n }\n\n if (typeof value === 'string' || Array.isArray(value)) {\n return value.length === 0;\n }\n\n if (value instanceof Set || value instanceof Map) {\n return value.size === 0;\n }\n\n if (typeof value === 'object') {\n return Object.keys(value).length === 0;\n }\n\n return false;\n }\n\n private isNotEmpty(value: any): boolean {\n if (value === null || value === undefined) {\n return false;\n }\n return !this.isEmpty(value);\n }\n\n private formatMatchesValue(value: any): string {\n if (value instanceof RegExp) {\n return value.toString();\n }\n\n if (typeof value === 'string') {\n const regexLiteral = value.match(/^\\/.+\\/[gimsuy]*$/);\n if (regexLiteral) {\n return value;\n }\n }\n\n return JSON.stringify(value);\n }\n}\n","import { Specification } from '@praxisui/specification-core';\nimport { SpecificationMetadata } from '@praxisui/specification-core';\n\nexport class AndSpecification<T extends object = any> extends Specification<T> {\n constructor(\n private specifications: Specification<T>[],\n metadata?: SpecificationMetadata,\n ) {\n super(metadata);\n if (specifications.length === 0) {\n throw new Error('AndSpecification requires at least one specification');\n }\n }\n\n isSatisfiedBy(obj: T): boolean {\n return this.specifications.every((spec) => spec.isSatisfiedBy(obj));\n }\n\n toJSON(): any {\n return {\n type: 'and',\n specs: this.specifications.map((spec) => spec.toJSON()),\n metadata: this.metadata,\n };\n }\n\n static override fromJSON<T extends object = any>(\n json: any,\n ): AndSpecification<T> {\n const specs = json.specs.map((specJson: any) =>\n Specification.fromJSON<T>(specJson),\n );\n return new AndSpecification<T>(specs);\n }\n\n toDSL(): string {\n if (this.specifications.length === 1) {\n return this.specifications[0].toDSL();\n }\n\n const parts = this.specifications.map((spec) => {\n const dsl = spec.toDSL();\n // Add parentheses if needed for precedence\n const kind = spec.getOperatorKind?.();\n if (kind === 'or' || kind === 'xor') {\n return `(${dsl})`;\n }\n return dsl;\n });\n\n return parts.join(' && ');\n }\n\n getSpecifications(): Specification<T>[] {\n return [...this.specifications];\n }\n\n add(specification: Specification<T>): AndSpecification<T> {\n return new AndSpecification<T>(\n [...this.specifications, specification],\n this.metadata,\n );\n }\n\n clone(): AndSpecification<T> {\n return new AndSpecification<T>(\n this.specifications.map((spec) => spec.clone()),\n this.metadata,\n );\n }\n\n override getOperatorKind(): 'and' | 'or' | 'xor' | undefined {\n return 'and';\n }\n}\n","import { Specification } from '@praxisui/specification-core';\nimport { SpecificationMetadata } from '@praxisui/specification-core';\n\nexport class OrSpecification<T extends object = any> extends Specification<T> {\n constructor(\n private specifications: Specification<T>[],\n metadata?: SpecificationMetadata,\n ) {\n super(metadata);\n if (specifications.length === 0) {\n throw new Error('OrSpecification requires at least one specification');\n }\n }\n\n isSatisfiedBy(obj: T): boolean {\n return this.specifications.some((spec) => spec.isSatisfiedBy(obj));\n }\n\n toJSON(): any {\n return {\n type: 'or',\n specs: this.specifications.map((spec) => spec.toJSON()),\n metadata: this.metadata,\n };\n }\n\n static override fromJSON<T extends object = any>(\n json: any,\n ): OrSpecification<T> {\n const specs = json.specs.map((specJson: any) =>\n Specification.fromJSON<T>(specJson),\n );\n return new OrSpecification<T>(specs);\n }\n\n toDSL(): string {\n if (this.specifications.length === 1) {\n return this.specifications[0].toDSL();\n }\n\n const parts = this.specifications.map((spec) => {\n const dsl = spec.toDSL();\n // Add parentheses if needed for precedence\n const kind = spec.getOperatorKind?.();\n if (kind === 'and') {\n return `(${dsl})`;\n }\n return dsl;\n });\n\n return parts.join(' || ');\n }\n\n getSpecifications(): Specification<T>[] {\n return [...this.specifications];\n }\n\n add(specification: Specification<T>): OrSpecification<T> {\n return new OrSpecification<T>(\n [...this.specifications, specification],\n this.metadata,\n );\n }\n\n clone(): OrSpecification<T> {\n return new OrSpecification<T>(\n this.specifications.map((spec) => spec.clone()),\n this.metadata,\n );\n }\n\n override getOperatorKind(): 'and' | 'or' | 'xor' | undefined {\n return 'or';\n }\n}\n","import { Specification } from '@praxisui/specification-core';\nimport { SpecificationMetadata } from '@praxisui/specification-core';\n\nexport class XorSpecification<T extends object = any> extends Specification<T> {\n constructor(\n private specifications: Specification<T>[],\n metadata?: SpecificationMetadata,\n ) {\n super(metadata);\n if (specifications.length < 2) {\n throw new Error('XorSpecification requires at least two specifications');\n }\n }\n\n isSatisfiedBy(obj: T): boolean {\n const satisfiedCount = this.specifications.filter((spec) =>\n spec.isSatisfiedBy(obj),\n ).length;\n return satisfiedCount === 1;\n }\n\n toJSON(): any {\n return {\n type: 'xor',\n specs: this.specifications.map((spec) => spec.toJSON()),\n };\n }\n\n static override fromJSON<T extends object = any>(\n json: any,\n ): XorSpecification<T> {\n const specs = json.specs.map((specJson: any) =>\n Specification.fromJSON<T>(specJson),\n );\n return new XorSpecification<T>(specs);\n }\n\n toDSL(): string {\n const parts = this.specifications.map((spec) => {\n const dsl = spec.toDSL();\n // Add parentheses if needed for precedence\n const kind = spec.getOperatorKind?.();\n if (kind === 'and' || kind === 'or') {\n return `(${dsl})`;\n }\n return dsl;\n });\n\n return parts.join(' xor ');\n }\n\n getSpecifications(): Specification<T>[] {\n return [...this.specifications];\n }\n\n clone(): XorSpecification<T> {\n return new XorSpecification<T>(\n this.specifications.map((spec) => spec.clone()),\n this.metadata,\n );\n }\n\n override getOperatorKind(): 'and' | 'or' | 'xor' | undefined {\n return 'xor';\n }\n}\n","import { Specification } from '@praxisui/specification-core';\nimport { SpecificationMetadata } from '@praxisui/specification-core';\n\nexport class ImpliesSpecification<\n T extends object = any,\n> extends Specification<T> {\n constructor(\n private antecedent: Specification<T>,\n private consequent: Specification<T>,\n metadata?: SpecificationMetadata,\n ) {\n super(metadata);\n }\n\n isSatisfiedBy(obj: T): boolean {\n // A implies B is equivalent to (!A || B)\n return (\n !this.antecedent.isSatisfiedBy(obj) || this.consequent.isSatisfiedBy(obj)\n );\n }\n\n toJSON(): any {\n return {\n type: 'implies',\n antecedent: this.antecedent.toJSON(),\n consequent: this.consequent.toJSON(),\n };\n }\n\n static override fromJSON<T extends object = any>(\n json: any,\n ): ImpliesSpecification<T> {\n const antecedent = Specification.fromJSON<T>(json.antecedent);\n const consequent = Specification.fromJSON<T>(json.consequent);\n return new ImpliesSpecification<T>(antecedent, consequent);\n }\n\n toDSL(): string {\n const antecedentDsl = this.antecedent.toDSL();\n const consequentDsl = this.consequent.toDSL();\n\n // Add parentheses for complex expressions\n const leftPart =\n this.antecedent instanceof AndSpecification ||\n this.antecedent instanceof OrSpecification ||\n this.antecedent instanceof XorSpecification\n ? `(${antecedentDsl})`\n : antecedentDsl;\n\n const rightPart =\n this.consequent instanceof AndSpecification ||\n this.consequent instanceof OrSpecification ||\n this.consequent instanceof XorSpecification\n ? `(${consequentDsl})`\n : consequentDsl;\n\n return `${leftPart} implies ${rightPart}`;\n }\n\n getAntecedent(): Specification<T> {\n return this.antecedent;\n }\n\n getConsequent(): Specification<T> {\n return this.consequent;\n }\n\n clone(): ImpliesSpecification<T> {\n return new ImpliesSpecification<T>(\n this.antecedent.clone(),\n this.consequent.clone(),\n this.metadata,\n );\n }\n}\n\n// Avoid circular imports\nimport { AndSpecification } from './and-specification';\nimport { OrSpecification } from './or-specification';\nimport { XorSpecification } from './xor-specification';\n","import { Specification } from '@praxisui/specification-core';\nimport { SpecificationMetadata } from '@praxisui/specification-core';\n\nexport class NotSpecification<T extends object = any> extends Specification<T> {\n constructor(\n private specification: Specification<T>,\n metadata?: SpecificationMetadata,\n ) {\n super(metadata);\n }\n\n isSatisfiedBy(obj: T): boolean {\n return !this.specification.isSatisfiedBy(obj);\n }\n\n toJSON(): any {\n return {\n type: 'not',\n spec: this.specification.toJSON(),\n };\n }\n\n static override fromJSON<T extends object = any>(\n json: any,\n ): NotSpecification<T> {\n const spec = Specification.fromJSON<T>(json.spec);\n return new NotSpecification<T>(spec);\n }\n\n toDSL(): string {\n const innerDsl = this.specification.toDSL();\n\n // Add parentheses for complex expressions\n if (\n this.specification instanceof AndSpecification ||\n this.specification instanceof OrSpecification ||\n this.specification instanceof XorSpecification ||\n this.specification instanceof ImpliesSpecification\n ) {\n return `!(${innerDsl})`;\n }\n\n return `!${innerDsl}`;\n }\n\n getSpecification(): Specification<T> {\n return this.specification;\n }\n\n clone(): NotSpecification<T> {\n return new NotSpecification<T>(this.specification.clone(), this.metadata);\n }\n}\n\n// Avoid circular imports\nimport { AndSpecification } from './and-specification';\nimport { OrSpecification } from './or-specification';\nimport { XorSpecification } from './xor-specification';\nimport { ImpliesSpecification } from './implies-specification';\n","export type SpecificationFunction<T> = (obj: T, ...args: any[]) => boolean;\n\nexport class FunctionRegistry<T> {\n private static instances = new Map<string, FunctionRegistry<any>>();\n private functions = new Map<string, SpecificationFunction<T>>();\n\n private constructor(private contextKey: string) {}\n\n static getInstance<T>(contextKey: string = 'default'): FunctionRegistry<T> {\n if (!this.instances.has(contextKey)) {\n this.instances.set(contextKey, new FunctionRegistry<T>(contextKey));\n }\n return this.instances.get(contextKey)!;\n }\n\n register(name: string, fn: SpecificationFunction<T>): void {\n this.functions.set(name, fn);\n }\n\n unregister(name: string): boolean {\n return this.functions.delete(name);\n }\n\n get(name: string): SpecificationFunction<T> | undefined {\n return this.functions.get(name);\n }\n\n has(name: string): boolean {\n return this.functions.has(name);\n }\n\n getAll(): Map<string, SpecificationFunction<T>> {\n return new Map(this.functions);\n }\n\n clear(): void {\n this.functions.clear();\n }\n\n execute(name: string, obj: T, ...args: any[]): boolean {\n const fn = this.functions.get(name);\n if (!fn) {\n throw new Error(`Function '${name}' not found in registry`);\n }\n return fn(obj, ...args);\n }\n\n getContextKey(): string {\n return this.contextKey;\n }\n}","import { Specification } from '@praxisui/specification-core';\nimport { FunctionRegistry } from '../registry/function-registry';\nimport { SpecificationMetadata } from '@praxisui/specification-core';\n\ntype FunctionFieldArg = { type: 'field'; field: string };\n\nexport class FunctionSpecification<\n T extends object = any,\n> extends Specification<T> {\n constructor(\n private functionName: string,\n private args: any[],\n private registry?: FunctionRegistry<T>,\n metadata?: SpecificationMetadata,\n ) {\n super(metadata);\n }\n\n isSatisfiedBy(obj: T): boolean {\n const registry = this.registry || FunctionRegistry.getInstance<T>();\n const resolvedArgs = this.args.map((arg) => this.resolveArg(obj, arg));\n return registry.execute(this.functionName, obj, ...resolvedArgs);\n }\n\n toJSON(): any {\n return {\n type: 'function',\n name: this.functionName,\n args: this.args,\n };\n }\n\n static override fromJSON<T extends object = any>(\n json: any,\n registry?: FunctionRegistry<T>,\n ): FunctionSpecification<T> {\n return new FunctionSpecification<T>(json.name, json.args, registry);\n }\n\n toDSL(): string {\n const argsStr = this.args\n .map((arg) => {\n if (typeof arg === 'string') {\n return JSON.stringify(arg);\n }\n if (typeof arg === 'object' && arg !== null && arg.type === 'field') {\n return `${arg.field}`;\n }\n return JSON.stringify(arg);\n })\n .join(', ');\n\n return `${this.functionName}(${argsStr})`;\n }\n\n getFunctionName(): string {\n return this.functionName;\n }\n\n getArgs(): any[] {\n return [...this.args];\n }\n\n getRegistry(): FunctionRegistry<T> | undefined {\n return this.registry;\n }\n\n clone(): FunctionSpecification<T> {\n return new FunctionSpecification<T>(\n this.functionName,\n [...this.args],\n this.registry,\n this.metadata,\n );\n }\n\n private resolveArg(obj: T, arg: any): any {\n if (Array.isArray(arg)) {\n return arg.map((entry) => this.resolveArg(obj, entry));\n }\n\n if (this.isFieldArg(arg)) {\n const lookup = this.getPathValue(obj, arg.field);\n if (lookup.found) return lookup.value;\n // Backward-compatible fallback when field path is not present.\n return arg.field;\n }\n\n return arg;\n }\n\n private isFieldArg(arg: any): arg is FunctionFieldArg {\n return !!(\n arg\n && typeof arg === 'object'\n && arg.type === 'field'\n && typeof arg.field === 'string'\n );\n }\n\n private getPathValue(source: any, path: string): { found: boolean; value: any } {\n if (!source || typeof source !== 'object') {\n return { found: false, value: undefined };\n }\n const raw = String(path || '').trim();\n if (!raw) {\n return { found: false, value: undefined };\n }\n const blocked = new Set(['__proto__', 'prototype', 'constructor']);\n if (blocked.has(raw)) {\n return { found: false, value: undefined };\n }\n if (raw in source) {\n return { found: true, value: (source as any)[raw] };\n }\n if (!raw.includes('.')) {\n return { found: false, value: undefined };\n }\n\n const segments = raw.split('.').filter(Boolean);\n let cursor: any = source;\n for (const segment of segments) {\n if (blocked.has(segment)) {\n return { found: false, value: undefined };\n }\n if (cursor == null || (typeof cursor !== 'object' && typeof cursor !== 'function')) {\n return { found: false, value: undefined };\n }\n if (!(segment in cursor)) {\n return { found: false, value: undefined };\n }\n cursor = cursor[segment];\n }\n\n return { found: true, value: cursor };\n }\n}\n","import { Specification } from '@praxisui/specification-core';\nimport { SpecificationMetadata } from '@praxisui/specification-core';\n\nexport class AtLeastSpecification<\n T extends object = any,\n> extends Specification<T> {\n constructor(\n private minimum: number,\n private specifications: Specification<T>[],\n metadata?: SpecificationMetadata,\n ) {\n super(metadata);\n if (minimum < 0) {\n throw new Error('Minimum count must be non-negative');\n }\n if (specifications.length === 0) {\n throw new Error(\n 'AtLeastSpecification requires at least one specification',\n );\n }\n }\n\n isSatisfiedBy(obj: T): boolean {\n const satisfiedCount = this.specifications.filter((spec) =>\n spec.isSatisfiedBy(obj),\n ).length;\n return satisfiedCount >= this.minimum;\n }\n\n toJSON(): any {\n return {\n type: 'atLeast',\n minimum: this.minimum,\n specs: this.specifications.map((spec) => spec.toJSON()),\n metadata: this.metadata,\n };\n }\n\n static override fromJSON<T extends object = any>(\n json: any,\n ): AtLeastSpecification<T> {\n const specs = json.specs.map((specJson: any) =>\n Specification.fromJSON<T>(specJson),\n );\n return new AtLeastSpecification<T>(json.minimum, specs, json.metadata);\n }\n\n toDSL(): string {\n const specDsls = this.specifications.map((spec) => spec.toDSL());\n const specsStr = specDsls.join(', ');\n return `atLeast(${this.minimum}, [${specsStr}])`;\n }\n\n getMinimum(): number {\n return this.minimum;\n }\n\n getSpecifications(): Specification<T>[] {\n return [...this.specifications];\n }\n\n getSatisfiedCount(obj: T): number {\n return this.specifications.filter((spec) => spec.isSatisfiedBy(obj)).length;\n }\n\n clone(): AtLeastSpecification<T> {\n const clonedSpecs = this.specifications.map((spec) => spec.clone());\n return new AtLeastSpecification<T>(\n this.minimum,\n clonedSpecs,\n this.metadata,\n );\n }\n}\n","import { Specification } from '@praxisui/specification-core';\nimport { SpecificationMetadata } from '@praxisui/specification-core';\n\nexport class ExactlySpecification<\n T extends object = any,\n> extends Specification<T> {\n constructor(\n private exact: number,\n private specifications: Specification<T>[],\n metadata?: SpecificationMetadata,\n ) {\n super(metadata);\n if (exact < 0) {\n throw new Error('Exact count must be non-negative');\n }\n if (specifications.length === 0) {\n throw new Error(\n 'ExactlySpecification requires at least one specification',\n );\n }\n }\n\n isSatisfiedBy(obj: T): boolean {\n const satisfiedCount = this.specifications.filter((spec) =>\n spec.isSatisfiedBy(obj),\n ).length;\n return satisfiedCount === this.exact;\n }\n\n toJSON(): any {\n return {\n type: 'exactly',\n exact: this.exact,\n specs: this.specifications.map((spec) => spec.toJSON()),\n metadata: this.metadata,\n };\n }\n\n static override fromJSON<T extends object = any>(\n json: any,\n ): ExactlySpecification<T> {\n const specs = json.specs.map((specJson: any) =>\n Specification.fromJSON<T>(specJson),\n );\n return new ExactlySpecification<T>(json.exact, specs, json.metadata);\n }\n\n toDSL(): string {\n const specDsls = this.specifications.map((spec) => spec.toDSL());\n const specsStr = specDsls.join(', ');\n return `exactly(${this.exact}, [${specsStr}])`;\n }\n\n getExact(): number {\n return this.exact;\n }\n\n getSpecifications(): Specification<T>[] {\n return [...this.specifications];\n }\n\n getSatisfiedCount(obj: T): number {\n return this.specifications.filter((spec) => spec.isSatisfiedBy(obj)).length;\n }\n\n clone(): ExactlySpecification<T> {\n const clonedSpecs = this.specifications.map((spec) => spec.clone());\n return new ExactlySpecification<T>(this.exact, clonedSpecs, this.metadata);\n }\n}\n","export type TransformFunction = (value: any) => any;\n\nexport class TransformRegistry {\n private static instance: TransformRegistry;\n private transforms = new Map<string, TransformFunction>();\n\n private constructor() {\n // Register default transforms\n this.registerDefaults();\n }\n\n static getInstance(): TransformRegistry {\n if (!this.instance) {\n this.instance = new TransformRegistry();\n }\n return this.instance;\n }\n\n private registerDefaults(): void {\n this.register('toLowerCase', (value: any) => String(value).toLowerCase());\n this.register('toUpperCase', (value: any) => String(value).toUpperCase());\n this.register('trim', (value: any) => String(value).trim());\n this.register('toString', (value: any) => String(value));\n this.register('toNumber', (value: any) => Number(value));\n this.register('toBoolean', (value: any) => Boolean(value));\n this.register('length', (value: any) => {\n if (typeof value === 'string' || Array.isArray(value)) {\n return value.length;\n }\n return 0;\n });\n }\n\n register(name: string, fn: TransformFunction): void {\n this.transforms.set(name, fn);\n }\n\n unregister(name: string): boolean {\n return this.transforms.delete(name);\n }\n\n get(name: string): TransformFunction | undefined {\n return this.transforms.get(name);\n }\n\n has(name: string): boolean {\n return this.transforms.has(name);\n }\n\n getAll(): Map<string, TransformFunction> {\n return new Map(this.transforms);\n }\n\n clear(): void {\n this.transforms.clear();\n this.registerDefaults();\n }\n\n apply(name: string, value: any): any {\n const transform = this.transforms.get(name);\n if (!transform) {\n throw new Error(`Transform '${name}' not found in registry`);\n }\n return transform(value);\n }\n\n applyChain(transforms: string[], value: any): any {\n return transforms.reduce((acc, transformName) => {\n return this.apply(transformName, acc);\n }, value);\n }\n}","import { Specification } from '@praxisui/specification-core';\nimport { ComparisonOperator, OPERATOR_SYMBOLS } from './comparison-operator';\nimport { TransformRegistry } from '../registry/transform-registry';\nimport { SpecificationMetadata } from '@praxisui/specification-core';\n\nexport class FieldToFieldSpecification<\n T extends object = any,\n> extends Specification<T> {\n constructor(\n private fieldA: keyof T,\n private operator: ComparisonOperator,\n private fieldB: keyof T,\n private transformA?: string[],\n private transformB?: string[],\n private transformRegistry?: TransformRegistry,\n metadata?: SpecificationMetadata,\n ) {\n super(metadata);\n }\n\n isSatisfiedBy(obj: T): boolean {\n let valueA = obj[this.fieldA];\n let valueB = obj[this.fieldB];\n\n const registry = this.transformRegistry || TransformRegistry.getInstance();\n\n // Apply transforms if specified\n if (this.transformA && this.transformA.length > 0) {\n valueA = registry.applyChain(this.transformA, valueA);\n }\n if (this.transformB && this.transformB.length > 0) {\n valueB = registry.applyChain(this.transformB, valueB);\n }\n\n switch (this.operator) {\n case ComparisonOperator.EQUALS:\n return valueA === valueB;\n\n case ComparisonOperator.NOT_EQUALS:\n return valueA !== valueB;\n\n case ComparisonOperator.LESS_THAN:\n return valueA < valueB;\n\n case ComparisonOperator.LESS_THAN_OR_EQUAL:\n return valueA <= valueB;\n\n case ComparisonOperator.GREATER_THAN:\n return valueA > valueB;\n\n case ComparisonOperator.GREATER_THAN_OR_EQUAL:\n return valueA >= valueB;\n\n case ComparisonOperator.CONTAINS:\n return String(valueA).includes(String(valueB));\n\n case ComparisonOperator.STARTS_WITH:\n return String(valueA).startsWith(String(valueB));\n\n case ComparisonOperator.ENDS_WITH:\n return String(valueA).endsWith(String(valueB));\n\n case ComparisonOperator.IN:\n return Array.isArray(valueB) && valueB.includes(valueA);\n\n case ComparisonOperator.NOT_IN:\n return Array.isArray(valueB) && !valueB.includes(valueA);\n\n case ComparisonOperator.MATCHES:\n if (valueB === undefined || valueB === null) {\n return false;\n }\n return this.toRegExp(valueB).test(String(valueA));\n case ComparisonOperator.NOT_MATCHES:\n if (valueB === undefined || valueB === null) {\n return false;\n }\n return !this.toRegExp(valueB).test(String(valueA));\n\n case ComparisonOperator.IS_NULL:\n return valueA === null || valueA === undefined;\n\n case ComparisonOperator.IS_NOT_NULL:\n return valueA !== null && valueA !== undefined;\n\n case ComparisonOperator.IS_EMPTY:\n return this.isEmpty(valueA);\n\n case ComparisonOperator.IS_NOT_EMPTY:\n return this.isNotEmpty(valueA);\n\n default:\n throw new Error(`Unsupported operator: ${this.operator}`);\n }\n }\n\n toJSON(): any {\n return {\n type: 'fieldToField',\n fieldA: String(this.fieldA),\n operator: this.operator,\n fieldB: String(this.fieldB),\n transformA: this.transformA,\n transformB: this.transformB,\n metadata: this.metadata,\n };\n }\n\n static override fromJSON<T extends object = any>(\n json: any,\n transformRegistry?: TransformRegistry,\n ): FieldToFieldSpecification<T> {\n return new FieldToFieldSpecification<T>(\n json.fieldA as keyof T,\n json.operator as ComparisonOperator,\n json.fieldB as keyof T,\n json.transformA,\n json.transformB,\n transformRegistry,\n json.metadata,\n );\n }\n\n toDSL(): string {\n const fieldAName = String(this.fieldA);\n const fieldBName = String(this.fieldB);\n\n let leftField = fieldAName;\n let rightField = fieldBName;\n\n // Apply transform notation\n if (this.transformA && this.transformA.length > 0) {\n leftField = `${fieldAName}.${this.transformA.join('.')}`;\n }\n if (this.transformB && this.transformB.length > 0) {\n rightField = `${fieldBName}.${this.transformB.join('.')}`;\n }\n\n const symbol = OPERATOR_SYMBOLS[this.operator];\n\n switch (this.operator) {\n case ComparisonOperator.CONTAINS:\n return `contains(${leftField}, ${rightField})`;\n\n case ComparisonOperator.STARTS_WITH:\n return `startsWith(${leftField}, ${rightField})`;\n\n case ComparisonOperator.ENDS_WITH:\n return `endsWith(${leftField}, ${rightField})`;\n\n case ComparisonOperator.IN:\n case ComparisonOperator.NOT_IN: {\n const keyword =\n this.operator === ComparisonOperator.NOT_IN ? 'not in' : 'in';\n return `${leftField} ${keyword} ${rightField}`;\n }\n\n case ComparisonOperator.MATCHES:\n return `${leftField} matches ${rightField}`;\n case ComparisonOperator.NOT_MATCHES:\n return `${leftField} !~ ${rightField}`;\n\n case ComparisonOperator.IS_NULL:\n return `${leftField} is null`;\n\n case ComparisonOperator.IS_NOT_NULL:\n return `${leftField} is not null`;\n\n case ComparisonOperator.IS_EMPTY:\n return `${leftField} is empty`;\n\n case ComparisonOperator.IS_NOT_EMPTY:\n return `${leftField} is not empty`;\n\n default:\n return `${leftField} ${symbol} ${rightField}`;\n }\n }\n\n getFieldA(): keyof T {\n return this.fieldA;\n }\n\n getFieldB(): keyof T {\n return this.fieldB;\n }\n\n getOperator(): ComparisonOperator {\n return this.operator;\n }\n\n getTransformA(): string[] | undefined {\n return this.transformA ? [...this.transformA] : undefined;\n }\n\n getTransformB(): string[] | undefined {\n return this.transformB ? [...this.transformB] : undefined;\n }\n\n clone(): FieldToFieldSpecification<T> {\n return new FieldToFieldSpecification<T>(\n this.fieldA,\n this.operator,\n this.fieldB,\n this.transformA ? [...this.transformA] : undefined,\n this.transformB ? [...this.transformB] : undefined,\n this.transformRegistry,\n this.metadata,\n );\n }\n\n private toRegExp(value: any): RegExp {\n if (value instanceof RegExp) {\n return value;\n }\n\n if (typeof value === 'string') {\n const regexLiteral = value.match(/^\\/(.+)\\/([gimsuy]*)$/);\n if (regexLiteral) {\n return new RegExp(regexLiteral[1], regexLiteral[2]);\n }\n return new RegExp(value);\n }\n\n return new RegExp(String(value));\n }\n\n private isEmpty(value: any): boolean {\n if (value === null || value === undefined) {\n return true;\n }\n\n if (typeof value === 'string' || Array.isArray(value)) {\n return value.length === 0;\n }\n\n if (value instanceof Set || value instanceof Map) {\n return value.size === 0;\n }\n\n if (typeof value === 'object') {\n return Object.keys(value).length === 0;\n }\n\n return false;\n }\n\n private isNotEmpty(value: any): boolean {\n if (value === null || value === undefined) {\n return false;\n }\n return !this.isEmpty(value);\n }\n}\n","export interface ContextProvider {\n getValue(path: string): any;\n hasValue(path: string): boolean;\n}\n\nexport class DefaultContextProvider implements ContextProvider {\n constructor(private context: Record<string, any> = {}) {}\n\n getValue(path: string): any {\n return this.getNestedValue(this.context, path);\n }\n\n hasValue(path: string): boolean {\n try {\n const value = this.getNestedValue(this.context, path);\n return value !== undefined;\n } catch {\n return false;\n }\n }\n\n private getNestedValue(obj: any, path: string): any {\n return path.split('.').reduce((current, key) => {\n return current && current[key] !== undefined ? current[key] : undefined;\n }, obj);\n }\n\n setContext(context: Record<string, any>): void {\n this.context = context;\n }\n\n updateContext(updates: Record<string, any>): void {\n this.context = { ...this.context, ...updates };\n }\n\n getContext(): Record<string, any> {\n return { ...this.context };\n }\n}\n\nexport class DateContextProvider implements ContextProvider {\n getValue(path: string): any {\n switch (path) {\n case 'now':\n return new Date();\n case 'today':\n const today = new Date();\n today.setHours(0, 0, 0, 0);\n return today;\n case 'timestamp':\n return Date.now();\n default:\n return undefined;\n }\n }\n\n hasValue(path: string): boolean {\n return ['now', 'today', 'timestamp'].includes(path);\n }\n}\n\nexport class CompositeContextProvider implements ContextProvider {\n constructor(private providers: ContextProvider[]) {}\n\n getValue(path: string): any {\n for (const provider of this.providers) {\n if (provider.hasValue(path)) {\n return provider.getValue(path);\n }\n }\n return undefined;\n }\n\n hasValue(path: string): boolean {\n return this.providers.some(provider => provider.hasValue(path));\n }\n\n addProvider(provider: ContextProvider): void {\n this.providers.push(provider);\n }\n\n removeProvider(provider: ContextProvider): void {\n const index = this.providers.indexOf(provider);\n if (index > -1) {\n this.providers.splice(index, 1);\n }\n }\n}","import { Specification } from '@praxisui/specification-core';\nimport {\n ContextProvider,\n DefaultContextProvider,\n} from '../context/context-provider';\nimport { SpecificationMetadata } from '@praxisui/specification-core';\n\nexport class ContextualSpecification<\n T extends object,\n> extends Specification<T> {\n private static readonly TOKEN_REGEX = /\\$\\{([^}]+)\\}/g;\n\n constructor(\n private template: string,\n private contextProvider?: ContextProvider,\n metadata?: SpecificationMetadata,\n ) {\n super(metadata);\n }\n\n isSatisfiedBy(obj: T): boolean {\n const resolvedExpression = this.resolveTokens(this.template, obj);\n // This would need to be evaluated by the DSL parser\n // For now, we'll throw an error indicating this needs the parser\n throw new Error(\n `ContextualSpecification requires DSL parser to evaluate: ${resolvedExpression}`,\n );\n }\n\n toJSON(): any {\n return {\n type: 'contextual',\n template: this.template,\n metadata: this.metadata,\n };\n }\n\n static override fromJSON<T extends object>(\n json: any,\n contextProvider?: ContextProvider,\n ): ContextualSpecification<T> {\n return new ContextualSpecification<T>(\n json.template,\n contextProvider,\n json.metadata,\n );\n }\n\n toDSL(): string {\n return this.template;\n }\n\n resolveTokens(template: string, obj: T): string {\n const provider = this.contextProvider || new DefaultContextProvider();\n\n return template.replace(\n ContextualSpecification.TOKEN_REGEX,\n (match, tokenPath) => {\n // First try to resolve from context\n if (provider.hasValue(tokenPath)) {\n const value = provider.getValue(tokenPath);\n return this.valueToString(value);\n }\n\n // Then try to resolve from object fields\n if (tokenPath in obj) {\n const value = (obj as any)[tokenPath];\n return this.valueToString(value);\n }\n\n // If not found, return the original token\n return match;\n },\n );\n }\n\n private valueToString(value: any): string {\n if (value === null || value === undefined) {\n return 'null';\n }\n if (typeof value === 'string') {\n return `\"${value}\"`;\n }\n if (typeof value === 'number' || typeof value === 'boolean') {\n return String(value);\n }\n if (value instanceof Date) {\n return `\"${value.toISOString()}\"`;\n }\n return JSON.stringify(value);\n }\n\n getTemplate(): string {\n return this.template;\n }\n\n getContextProvider(): ContextProvider | undefined {\n return this.contextProvider;\n }\n\n setContextProvider(provider: ContextProvider): ContextualSpecification<T> {\n return new ContextualSpecification<T>(\n this.template,\n provider,\n this.metadata,\n );\n }\n\n getTokens(): string[] {\n const tokens: string[] = [];\n let match;\n const regex = new RegExp(ContextualSpecification.TOKEN_REGEX);\n\n while ((match = regex.exec(this.template)) !== null) {\n tokens.push(match[1]);\n }\n\n return tokens;\n }\n\n clone(): ContextualSpecification<T> {\n return new ContextualSpecification<T>(\n this.template,\n this.contextProvider,\n this.metadata,\n );\n }\n}\n","import { Specification } from '@praxisui/specification-core';\nimport { SpecificationMetadata } from '@praxisui/specification-core';\n\n/**\n * Types of conditional validation\n */\nexport enum ConditionalType {\n REQUIRED_IF = 'requiredIf',\n VISIBLE_IF = 'visibleIf',\n DISABLED_IF = 'disabledIf',\n READONLY_IF = 'readonlyIf',\n}\n\n/**\n * Base class for conditional validators\n */\nexport abstract class ConditionalSpecification<\n T extends object = any,\n> extends Specification<T> {\n constructor(\n protected condition: Specification<T>,\n protected conditionalType: ConditionalType,\n metadata?: SpecificationMetadata,\n ) {\n super(metadata);\n }\n\n getCondition(): Specification<T> {\n return this.condition;\n }\n\n getConditionalType(): ConditionalType {\n return this.conditionalType;\n }\n\n abstract override clone(): ConditionalSpecification<T>;\n}\n\n/**\n * Validates that a field is required when a condition is met\n */\nexport class RequiredIfSpecification<\n T extends object = any,\n> extends ConditionalSpecification<T> {\n constructor(\n private field: keyof T,\n condition: Specification<T>,\n metadata?: SpecificationMetadata,\n ) {\n super(condition, ConditionalType.REQUIRED_IF, metadata);\n }\n\n isSatisfiedBy(obj: T): boolean {\n // If condition is not met, validation passes (field is not required)\n if (!this.condition.isSatisfiedBy(obj)) {\n return true;\n }\n\n // If condition is met, check if field has a value\n const fieldValue = obj[this.field];\n return fieldValue !== null && fieldValue !== undefined && fieldValue !== '';\n }\n\n toJSON(): any {\n return {\n type: 'requiredIf',\n field: String(this.field),\n condition: this.condition.toJSON(),\n metadata: this.metadata,\n };\n }\n\n static override fromJSON<T extends object = any>(\n json: any,\n ): RequiredIfSpecification<T> {\n // This would need the SpecificationFactory to reconstruct the condition\n throw new Error(\n 'Use SpecificationFactory.fromJSON() for proper reconstruction',\n );\n }\n\n toDSL(): string {\n return `requiredIf(${String(this.field)}, ${this.condition.toDSL()})`;\n }\n\n clone(): RequiredIfSpecification<T> {\n return new RequiredIfSpecification<T>(\n this.field,\n this.condition.clone(),\n this.metadata,\n );\n }\n\n getField(): keyof T {\n return this.field;\n }\n}\n\n/**\n * Determines if a field should be visible based on a condition\n */\nexport class VisibleIfSpecification<\n T extends object = any,\n> extends ConditionalSpecification<T> {\n constructor(\n private field: keyof T,\n condition: Specification<T>,\n metadata?: SpecificationMetadata,\n ) {\n super(condition, ConditionalType.VISIBLE_IF, metadata);\n }\n\n isSatisfiedBy(obj: T): boolean {\n // This returns whether the field should be visible\n return this.condition.isSatisfiedBy(obj);\n }\n\n toJSON(): any {\n return {\n type: 'visibleIf',\n field: String(this.field),\n condition: this.condition.toJSON(),\n metadata: this.metadata,\n };\n }\n\n static override fromJSON<T extends object = any>(\n json: any,\n ): VisibleIfSpecification<T> {\n throw new Error(\n 'Use SpecificationFactory.fromJSON() for proper reconstruction',\n );\n }\n\n toDSL(): string {\n return `visibleIf(${String(this.field)}, ${this.condition.toDSL()})`;\n }\n\n clone(): VisibleIfSpecification<T> {\n return new VisibleIfSpecification<T>(\n this.field,\n this.condition.clone(),\n this.metadata,\n );\n }\n\n getField(): keyof T {\n return this.field;\n }\n}\n\n/**\n * Determines if a field should be disabled based on a condition\n */\nexport class DisabledIfSpecification<\n T extends object = any,\n> extends ConditionalSpecification<T> {\n constructor(\n private field: keyof T,\n condition: Specification<T>,\n metadata?: SpecificationMetadata,\n ) {\n super(condition, ConditionalType.DISABLED_IF, metadata);\n }\n\n isSatisfiedBy(obj: T): boolean {\n // This returns whether the field should be disabled\n return this.condition.isSatisfiedBy(obj);\n }\n\n toJSON(): any {\n return {\n type: 'disabledIf',\n field: String(this.field),\n condition: this.condition.toJSON(),\n metadata: this.metadata,\n };\n }\n\n static override fromJSON<T extends object = any>(\n json: any,\n ): DisabledIfSpecification<T> {\n throw new Error(\n 'Use SpecificationFactory.fromJSON() for proper reconstruction',\n );\n }\n\n toDSL(): string {\n return `disabledIf(${String(this.field)}, ${this.condition.toDSL()})`;\n }\n\n clone(): DisabledIfSpecification<T> {\n return new DisabledIfSpecification<T>(\n this.field,\n this.condition.clone(),\n this.metadata,\n );\n }\n\n getField(): keyof T {\n return this.field;\n }\n}\n\n/**\n * Determines if a field should be readonly based on a condition\n */\nexport class ReadonlyIfSpecification<\n T extends object = any,\n> extends ConditionalSpecification<T> {\n constructor(\n private field: keyof T,\n condition: Specification<T>,\n metadata?: SpecificationMetadata,\n ) {\n super(condition, ConditionalType.READONLY_IF, metadata);\n }\n\n isSatisfiedBy(obj: T): boolean {\n // This returns whether the field should be readonly\n return this.condition.isSatisfiedBy(obj);\n }\n\n toJSON(): any {\n return {\n type: 'readonlyIf',\n field: String(this.field),\n condition: this.condition.toJSON(),\n metadata: this.metadata,\n };\n }\n\n static override fromJSON<T extends object = any>(\n json: any,\n ): ReadonlyIfSpecification<T> {\n throw new Error(\n 'Use SpecificationFactory.fromJSON() for proper reconstruction',\n );\n }\n\n toDSL(): string {\n return `readonlyIf(${String(this.field)}, ${this.condition.toDSL()})`;\n }\n\n clone(): ReadonlyIfSpecification<T> {\n return new ReadonlyIfSpecification<T>(\n this.field,\n this.condition.clone(),\n this.metadata,\n );\n }\n\n getField(): keyof T {\n return this.field;\n }\n}\n","import { Specification } from '@praxisui/specification-core';\nimport { SpecificationMetadata } from '@praxisui/specification-core';\n\n/**\n * Applies a specification to all elements in an array field\n */\nexport class ForEachSpecification<\n T extends object = any,\n TItem extends object = any,\n> extends Specification<T> {\n constructor(\n private arrayField: keyof T,\n private itemSpecification: Specification<TItem>,\n metadata?: SpecificationMetadata,\n ) {\n super(metadata);\n }\n\n isSatisfiedBy(obj: T): boolean {\n const arrayValue = obj[this.arrayField];\n\n // If not an array, fail validation\n if (!Array.isArray(arrayValue)) {\n return false;\n }\n\n // Check if all items satisfy the specification\n return arrayValue.every((item: TItem) => {\n try {\n return this.itemSpecification.isSatisfiedBy(item);\n } catch (error) {\n // If item doesn't match expected structure, fail validation\n return false;\n }\n });\n }\n\n toJSON(): any {\n return {\n type: 'forEach',\n arrayField: String(this.arrayField),\n itemSpecification: this.itemSpecification.toJSON(),\n metadata: this.metadata,\n };\n }\n\n static override fromJSON<T extends object = any>(\n json: any,\n ): ForEachSpecification<T> {\n throw new Error(\n 'Use SpecificationFactory.fromJSON() for proper reconstruction',\n );\n }\n\n toDSL(): string {\n return `forEach(${String(this.arrayField)}, ${this.itemSpecification.toDSL()})`;\n }\n\n clone(): ForEachSpecification<T, TItem> {\n return new ForEachSpecification<T, TItem>(\n this.arrayField,\n this.itemSpecification.clone(),\n this.metadata,\n );\n }\n\n getArrayField(): keyof T {\n return this.arrayField;\n }\n\n getItemSpecification(): Specification<TItem> {\n return this.itemSpecification;\n }\n\n /**\n * Gets items that fail the specification\n */\n getFailingItems(obj: T): { index: number; item: any; errors?: string[] }[] {\n const arrayValue = obj[this.arrayField];\n\n if (!Array.isArray(arrayValue)) {\n return [];\n }\n\n const failingItems: { index: number; item: any; errors?: string[] }[] = [];\n\n arrayValue.forEach((item: any, index: number) => {\n if (!this.itemSpecification.isSatisfiedBy(item)) {\n failingItems.push({\n index,\n item,\n errors: [`Item at index ${index} failed validation`],\n });\n }\n });\n\n return failingItems;\n }\n}\n\n/**\n * Ensures all items in an array are unique based on a field or key selector\n */\nexport class UniqueBySpecification<\n T extends object = any,\n> extends Specification<T> {\n constructor(\n private arrayField: keyof T,\n private keySelector: string | ((item: any) => any),\n metadata?: SpecificationMetadata,\n ) {\n super(metadata);\n }\n\n isSatisfiedBy(obj: T): boolean {\n const arrayValue = obj[this.arrayField];\n\n // If not an array, pass validation (empty case)\n if (!Array.isArray(arrayValue)) {\n return true;\n }\n\n // If empty array, pass validation\n if (arrayValue.length === 0) {\n return true;\n }\n\n const seen = new Set();\n\n for (const item of arrayValue) {\n let key: any;\n\n if (typeof this.keySelector === 'string') {\n // Field name selector\n key = item?.[this.keySelector];\n } else {\n // Function selector\n key = this.keySelector(item);\n }\n\n // Convert key to string for Set comparison\n const keyStr = JSON.stringify(key);\n\n if (seen.has(keyStr)) {\n return false; // Duplicate found\n }\n\n seen.add(keyStr);\n }\n\n return true;\n }\n\n toJSON(): any {\n return {\n type: 'uniqueBy',\n arrayField: String(this.arrayField),\n keySelector:\n typeof this.keySelector === 'string' ? this.keySelector : '[Function]',\n metadata: this.metadata,\n };\n }\n\n static override fromJSON<T extends object = any>(\n json: any,\n ): UniqueBySpecification<T> {\n return new UniqueBySpecification<T>(\n json.arrayField as keyof T,\n json.keySelector,\n json.metadata,\n );\n }\n\n toDSL(): string {\n const selector =\n typeof this.keySelector === 'string'\n ? `\"${this.keySelector}\"`\n : '[Function]';\n return `uniqueBy(${String(this.arrayField)}, ${selector})`;\n }\n\n clone(): UniqueBySpecification<T> {\n return new UniqueBySpecification<T>(\n this.arrayField,\n this.keySelector,\n this.metadata,\n );\n }\n\n getArrayField(): keyof T {\n return this.arrayField;\n }\n\n getKeySelector(): string | ((item: any) => any) {\n return this.keySelector;\n }\n\n /**\n * Gets duplicate items found in the array\n */\n getDuplicates(obj: T): { key: any; items: { index: number; item: any }[] }[] {\n const arrayValue = obj[this.arrayField];\n\n if (!Array.isArray(arrayValue)) {\n return [];\n }\n\n const keyMap = new Map<string, { index: number; item: any }[]>();\n\n arrayValue.forEach((item: any, index: number) => {\n let key: any;\n\n if (typeof this.keySelector === 'string') {\n key = item?.[this.keySelector];\n } else {\n key = this.keySelector(item);\n }\n\n const keyStr = JSON.stringify(key);\n\n if (!keyMap.has(keyStr)) {\n keyMap.set(keyStr, []);\n }\n\n keyMap.get(keyStr)!.push({ index, item });\n });\n\n // Return only keys that have duplicates\n return Array.from(keyMap.entries())\n .filter(([_, items]) => items.length > 1)\n .map(([keyStr, items]) => ({\n key: JSON.parse(keyStr),\n items,\n }));\n }\n}\n\n/**\n * Validates that an array has a minimum number of elements\n */\nexport class MinLengthSpecification<\n T extends object = any,\n> extends Specification<T> {\n constructor(\n private arrayField: keyof T,\n private minLength: number,\n metadata?: SpecificationMetadata,\n ) {\n super(metadata);\n }\n\n isSatisfiedBy(obj: T): boolean {\n const arrayValue = obj[this.arrayField];\n\n if (!Array.isArray(arrayValue)) {\n return false;\n }\n\n return arrayValue.length >= this.minLength;\n }\n\n toJSON(): any {\n return {\n type: 'minLength',\n arrayField: String(this.arrayField),\n minLength: this.minLength,\n metadata: this.metadata,\n };\n }\n\n static override fromJSON<T extends object = any>(\n json: any,\n ): MinLengthSpecification<T> {\n return new MinLengthSpecification<T>(\n json.arrayField as keyof T,\n json.minLength,\n json.metadata,\n );\n }\n\n toDSL(): string {\n return `minLength(${String(this.arrayField)}, ${this.minLength})`;\n }\n\n clone(): MinLengthSpecification<T> {\n return new MinLengthSpecification<T>(\n this.arrayField,\n this.minLength,\n this.metadata,\n );\n }\n\n getArrayField(): keyof T {\n return this.arrayField;\n }\n\n getMinLength(): number {\n return this.minLength;\n }\n}\n\n/**\n * Validates that an array has a maximum number of elements\n */\nexport class MaxLengthSpecification<\n T extends object = any,\n> extends Specification<T> {\n constructor(\n private arrayField: keyof T,\n private maxLength: number,\n metadata?: SpecificationMetadata,\n ) {\n super(metadata);\n }\n\n isSatisfiedBy(obj: T): boolean {\n const arrayValue = obj[this.arrayField];\n\n if (!Array.isArray(arrayValue)) {\n return true; // If not array, max length doesn't apply\n }\n\n return arrayValue.length <= this.maxLength;\n }\n\n toJSON(): any {\n return {\n type: 'maxLength',\n arrayField: String(this.arrayField),\n maxLength: this.maxLength,\n metadata: this.metadata,\n };\n }\n\n static override fromJSON<T extends object = any>(\n json: any,\n ): MaxLengthSpecification<T> {\n return new MaxLengthSpecification<T>(\n json.arrayField as keyof T,\n json.maxLength,\n json.metadata,\n );\n }\n\n toDSL(): string {\n return `maxLength(${String(this.arrayField)}, ${this.maxLength})`;\n }\n\n clone(): MaxLengthSpecification<T> {\n return new MaxLengthSpecification<T>(\n this.arrayField,\n this.maxLength,\n this.metadata,\n );\n }\n\n getArrayField(): keyof T {\n return this.arrayField;\n }\n\n getMaxLength(): number {\n return this.maxLength;\n }\n}\n","import { Specification } from '@praxisui/specification-core';\nimport { SpecificationMetadata } from '@praxisui/specification-core';\n\n/**\n * Only applies the inner specification if the field is defined (not null, undefined, or empty)\n */\nexport class IfDefinedSpecification<\n T extends object = any,\n> extends Specification<T> {\n constructor(\n private field: keyof T,\n private innerSpecification: Specification<T>,\n metadata?: SpecificationMetadata,\n ) {\n super(metadata);\n }\n\n isSatisfiedBy(obj: T): boolean {\n const fieldValue = obj[this.field];\n\n // If field is not defined, validation passes\n if (this.isUndefined(fieldValue)) {\n return true;\n }\n\n // If field is defined, apply the inner specification\n return this.innerSpecification.isSatisfiedBy(obj);\n }\n\n private isUndefined(value: any): boolean {\n return value === null || value === undefined || value === '';\n }\n\n toJSON(): any {\n return {\n type: 'ifDefined',\n field: String(this.field),\n specification: this.innerSpecification.toJSON(),\n metadata: this.metadata,\n };\n }\n\n static override fromJSON<T extends object = any>(\n json: any,\n ): IfDefinedSpecification<T> {\n throw new Error(\n 'Use SpecificationFactory.fromJSON() for proper reconstruction',\n );\n }\n\n toDSL(): string {\n return `ifDefined(${String(this.field)}, ${this.innerSpecification.toDSL()})`;\n }\n\n clone(): IfDefinedSpecification<T> {\n return new IfDefinedSpecification<T>(\n this.field,\n this.innerSpecification.clone(),\n this.metadata,\n );\n }\n\n getField(): keyof T {\n return this.field;\n }\n\n getInnerSpecification(): Specification<T> {\n return this.innerSpecification;\n }\n}\n\n/**\n * Only applies the inner specification if the field value is not null\n */\nexport class IfNotNullSpecification<\n T extends object = any,\n> extends Specification<T> {\n constructor(\n private field: keyof T,\n private innerSpecification: Specification<T>,\n metadata?: SpecificationMetadata,\n ) {\n super(metadata);\n }\n\n isSatisfiedBy(obj: T): boolean {\n const fieldValue = obj[this.field];\n\n // If field is null, validation passes\n if (fieldValue === null) {\n return true;\n }\n\n // If field is not null, apply the inner specification\n return this.innerSpecification.isSatisfiedBy(obj);\n }\n\n toJSON(): any {\n return {\n type: 'ifNotNull',\n field: String(this.field),\n specification: this.innerSpecification.toJSON(),\n metadata: this.metadata,\n };\n }\n\n static override fromJSON<T extends object = any>(\n json: any,\n ): IfNotNullSpecification<T> {\n throw new Error(\n 'Use SpecificationFactory.fromJSON() for proper reconstruction',\n );\n }\n\n toDSL(): string {\n return `ifNotNull(${String(this.field)}, ${this.innerSpecification.toDSL()})`;\n }\n\n clone(): IfNotNullSpecification<T> {\n return new IfNotNullSpecification<T>(\n this.field,\n this.innerSpecification.clone(),\n this.metadata,\n );\n }\n\n getField(): keyof T {\n return this.field;\n }\n\n getInnerSpecification(): Specification<T> {\n return this.innerSpecification;\n }\n}\n\n/**\n * Only applies the inner specification if the field exists as a property on the object\n */\nexport class IfExistsSpecification<\n T extends object = any,\n> extends Specification<T> {\n constructor(\n private field: keyof T,\n private innerSpecification: Specification<T>,\n metadata?: SpecificationMetadata,\n ) {\n super(metadata);\n }\n\n isSatisfiedBy(obj: T): boolean {\n // If field doesn't exist as a property, validation passes\n if (!(this.field in obj)) {\n return true;\n }\n\n // If field exists, apply the inner specification\n return this.innerSpecification.isSatisfiedBy(obj);\n }\n\n toJSON(): any {\n return {\n type: 'ifExists',\n field: String(this.field),\n specification: this.innerSpecification.toJSON(),\n metadata: this.metadata,\n };\n }\n\n static override fromJSON<T extends object = any>(\n json: any,\n ): IfExistsSpecification<T> {\n throw new Error(\n 'Use SpecificationFactory.fromJSON() for proper reconstruction',\n );\n }\n\n toDSL(): string {\n return `ifExists(${String(this.field)}, ${this.innerSpecification.toDSL()})`;\n }\n\n clone(): IfExistsSpecification<T> {\n return new IfExistsSpecification<T>(\n this.field,\n this.innerSpecification.clone(),\n this.metadata,\n );\n }\n\n getField(): keyof T {\n return this.field;\n }\n\n getInnerSpecification(): Specification<T> {\n return this.innerSpecification;\n }\n}\n\n/**\n * Provides a default value for a field if it's undefined, then applies the specification\n */\nexport class WithDefaultSpecification<\n T extends object = any,\n> extends Specification<T> {\n constructor(\n private field: keyof T,\n private defaultValue: any,\n private innerSpecification: Specification<T>,\n metadata?: SpecificationMetadata,\n ) {\n super(metadata);\n }\n\n isSatisfiedBy(obj: T): boolean {\n // Create a copy of the object with default value if field is undefined\n const objWithDefault = { ...obj };\n\n if (this.isUndefined(obj[this.field])) {\n (objWithDefault as any)[this.field] = this.defaultValue;\n }\n\n return this.innerSpecification.isSatisfiedBy(objWithDefault);\n }\n\n private isUndefined(value: any): boolean {\n return value === null || value === undefined;\n }\n\n toJSON(): any {\n return {\n type: 'withDefault',\n field: String(this.field),\n defaultValue: this.defaultValue,\n specification: this.innerSpecification.toJSON(),\n metadata: this.metadata,\n };\n }\n\n static override fromJSON<T extends object = any>(\n json: any,\n ): WithDefaultSpecification<T> {\n throw new Error(\n 'Use SpecificationFactory.fromJSON() for proper reconstruction',\n );\n }\n\n toDSL(): string {\n const defaultStr = JSON.stringify(this.defaultValue);\n return `withDefault(${String(this.field)}, ${defaultStr}, ${this.innerSpecification.toDSL()})`;\n }\n\n clone(): WithDefaultSpecification<T> {\n return new WithDefaultSpecification<T>(\n this.field,\n this.defaultValue,\n this.innerSpecification.clone(),\n this.metadata,\n );\n }\n\n getField(): keyof T {\n return this.field;\n }\n\n getDefaultValue(): any {\n return this.defaultValue;\n }\n\n getInnerSpecification(): Specification<T> {\n return this.innerSpecification;\n }\n}\n","import { Specification } from '@praxisui/specification-core';\nimport { SpecificationMetadata } from '@praxisui/specification-core';\nimport {\n RequiredIfSpecification,\n VisibleIfSpecification,\n DisabledIfSpecification,\n ReadonlyIfSpecification,\n} from './conditional-validators';\n\n/**\n * Form validation result for a specific field\n */\nexport interface FieldValidationResult {\n field: string;\n isValid: boolean;\n errors: string[];\n warnings: string[];\n metadata?: SpecificationMetadata;\n}\n\n/**\n * Complete form validation result\n */\nexport interface FormValidationResult {\n isValid: boolean;\n fields: Record<string, FieldValidationResult>;\n globalErrors: string[];\n warnings: string[];\n}\n\n/**\n * Field rules configuration\n */\nexport interface FieldRules<T extends object = any> {\n validation?: Specification<T>[];\n required?: boolean | Specification<T>;\n visible?: boolean | Specification<T>;\n disabled?: boolean | Specification<T>;\n readonly?: boolean | Specification<T>;\n metadata?: SpecificationMetadata;\n}\n\n/**\n * Form specification that manages validation rules for multiple fields\n */\nexport class FormSpecification<\n T extends object = any,\n> extends Specification<T> {\n private fieldRules = new Map<keyof T, FieldRules<T>>();\n private globalValidations: Specification<T>[] = [];\n\n constructor(metadata?: SpecificationMetadata) {\n super(metadata);\n }\n\n /**\n * Adds validation rules for a specific field\n */\n addFieldRules(field: keyof T, rules: FieldRules<T>): FormSpecification<T> {\n this.fieldRules.set(field, rules);\n return this;\n }\n\n /**\n * Adds a global validation rule that applies to the entire form\n */\n addGlobalValidation(specification: Specification<T>): FormSpecification<T> {\n this.globalValidations.push(specification);\n return this;\n }\n\n /**\n * Sets required condition for a field\n */\n setRequired(\n field: keyof T,\n condition: boolean | Specification<T>,\n ): FormSpecification<T> {\n const existing = this.fieldRules.get(field) || {};\n existing.required = condition;\n this.fieldRules.set(field, existing);\n return this;\n }\n\n /**\n * Sets visibility condition for a field\n */\n setVisible(\n field: keyof T,\n condition: boolean | Specification<T>,\n ): FormSpecification<T> {\n const existing = this.fieldRules.get(field) || {};\n existing.visible = condition;\n this.fieldRules.set(field, existing);\n return this;\n }\n\n /**\n * Sets disabled condition for a field\n */\n setDisabled(\n field: keyof T,\n condition: boolean | Specification<T>,\n ): FormSpecification<T> {\n const existing = this.fieldRules.get(field) || {};\n existing.disabled = condition;\n this.fieldRules.set(field, existing);\n return this;\n }\n\n /**\n * Sets readonly condition for a field\n */\n setReadonly(\n field: keyof T,\n condition: boolean | Specification<T>,\n ): FormSpecification<T> {\n const existing = this.fieldRules.get(field) || {};\n existing.readonly = condition;\n this.fieldRules.set(field, existing);\n return this;\n }\n\n /**\n * Basic satisfaction check - validates all rules\n */\n isSatisfiedBy(obj: T): boolean {\n const result = this.validateForm(obj);\n return result.isValid;\n }\n\n /**\n * Comprehensive form validation with detailed results\n */\n validateForm(obj: T): FormValidationResult {\n const result: FormValidationResult = {\n isValid: true,\n fields: {},\n globalErrors: [],\n warnings: [],\n };\n\n // Validate each field\n for (const [field, rules] of this.fieldRules.entries()) {\n const fieldResult = this.validateField(field, rules, obj);\n result.fields[String(field)] = fieldResult;\n\n if (!fieldResult.isValid) {\n result.isValid = false;\n }\n }\n\n // Validate global rules\n for (const globalSpec of this.globalValidations) {\n try {\n if (!globalSpec.isSatisfiedBy(obj)) {\n const metadata = globalSpec.getMetadata();\n const message = metadata?.message || 'Global validation failed';\n result.globalErrors.push(message);\n result.isValid = false;\n }\n } catch (error) {\n result.globalErrors.push(`Global validation error: ${error}`);\n result.isValid = false;\n }\n }\n\n return result;\n }\n\n private validateField(\n field: keyof T,\n rules: FieldRules<T>,\n obj: T,\n ): FieldValidationResult {\n const fieldResult: FieldValidationResult = {\n field: String(field),\n isValid: true,\n errors: [],\n warnings: [],\n metadata: rules.metadata,\n };\n\n // Check if field should be visible\n if (!this.isFieldVisible(field, rules, obj)) {\n // If field is not visible, skip validation\n return fieldResult;\n }\n\n // Check required validation\n if (rules.required) {\n const isRequired =\n typeof rules.required === 'boolean'\n ? rules.required\n : rules.required.isSatisfiedBy(obj);\n\n if (isRequired) {\n const fieldValue = obj[field];\n if (\n fieldValue === null ||\n fieldValue === undefined ||\n fieldValue === ''\n ) {\n fieldResult.errors.push(\n rules.metadata?.message || `${String(field)} is required`,\n );\n fieldResult.isValid = false;\n }\n }\n }\n\n // Run validation specifications\n if (rules.validation) {\n for (const spec of rules.validation) {\n try {\n if (!spec.isSatisfiedBy(obj)) {\n const metadata = spec.getMetadata();\n const message =\n metadata?.message || `${String(field)} validation failed`;\n fieldResult.errors.push(message);\n fieldResult.isValid = false;\n }\n } catch (error) {\n fieldResult.errors.push(\n `Validation error for ${String(field)}: ${error}`,\n );\n fieldResult.isValid = false;\n }\n }\n }\n\n return fieldResult;\n }\n\n /**\n * Checks if a field should be visible\n */\n isFieldVisible(\n field: keyof T,\n rules: FieldRules<T> | undefined,\n obj: T,\n ): boolean {\n if (!rules?.visible) {\n return true; // Default to visible\n }\n\n return typeof rules.visible === 'boolean'\n ? rules.visible\n : rules.visible.isSatisfiedBy(obj);\n }\n\n /**\n * Checks if a field should be disabled\n */\n isFieldDisabled(field: keyof T, obj: T): boolean {\n const rules = this.fieldRules.get(field);\n if (!rules?.disabled) {\n return false; // Default to enabled\n }\n\n return typeof rules.disabled === 'boolean'\n ? rules.disabled\n : rules.disabled.isSatisfiedBy(obj);\n }\n\n /**\n * Checks if a field should be readonly\n */\n isFieldReadonly(field: keyof T, obj: T): boolean {\n const rules = this.fieldRules.get(field);\n if (!rules?.readonly) {\n return false; // Default to editable\n }\n\n return typeof rules.readonly === 'boolean'\n ? rules.readonly\n : rules.readonly.isSatisfiedBy(obj);\n }\n\n /**\n * Gets all configured fields\n */\n getFields(): (keyof T)[] {\n return Array.from(this.fieldRules.keys());\n }\n\n /**\n * Gets rules for a specific field\n */\n getFieldRules(field: keyof T): FieldRules<T> | undefined {\n return this.fieldRules.get(field);\n }\n\n toJSON(): any {\n const fieldsJson: Record<string, any> = {};\n\n for (const [field, rules] of this.fieldRules.entries()) {\n fieldsJson[String(field)] = {\n validation: rules.validation?.map((spec) => spec.toJSON()),\n required:\n typeof rules.required === 'object'\n ? rules.required.toJSON()\n : rules.required,\n visible:\n typeof rules.visible === 'object'\n ? rules.visible.toJSON()\n : rules.visible,\n disabled:\n typeof rules.disabled === 'object'\n ? rules.disabled.toJSON()\n : rules.disabled,\n readonly:\n typeof rules.readonly === 'object'\n ? rules.readonly.toJSON()\n : rules.readonly,\n metadata: rules.metadata,\n };\n }\n\n return {\n type: 'form',\n fields: fieldsJson,\n globalValidations: this.globalValidations.map((spec) => spec.toJSON()),\n metadata: this.metadata,\n };\n }\n\n static override fromJSON<T extends object = any>(\n json: any,\n ): FormSpecification<T> {\n throw new Error(\n 'FormSpecification.fromJSON not yet implemented - requires SpecificationFactory',\n );\n }\n\n toDSL(): string {\n const parts: string[] = [];\n\n // Export field rules\n for (const [field, rules] of this.fieldRules.entries()) {\n if (rules.required && typeof rules.required === 'object') {\n parts.push(`requiredIf(${String(field)}, ${rules.required.toDSL()})`);\n }\n if (rules.visible && typeof rules.visible === 'object') {\n parts.push(`visibleIf(${String(field)}, ${rules.visible.toDSL()})`);\n }\n if (rules.disabled && typeof rules.disabled === 'object') {\n parts.push(`disabledIf(${String(field)}, ${rules.disabled.toDSL()})`);\n }\n if (rules.readonly && typeof rules.readonly === 'object') {\n parts.push(`readonlyIf(${String(field)}, ${rules.readonly.toDSL()})`);\n }\n if (rules.validation) {\n for (const spec of rules.validation) {\n parts.push(spec.toDSL());\n }\n }\n }\n\n // Export global validations\n for (const spec of this.globalValidations) {\n parts.push(spec.toDSL());\n }\n\n return parts.join(' && ');\n }\n\n clone(): FormSpecification<T> {\n const cloned = new FormSpecification<T>(this.metadata);\n\n // Clone field rules\n for (const [field, rules] of this.fieldRules.entries()) {\n const clonedRules: FieldRules<T> = {\n validation: rules.validation?.map((spec) => spec.clone()),\n required:\n typeof rules.required === 'object'\n ? rules.required.clone()\n : rules.required,\n visible:\n typeof rules.visible === 'object'\n ? rules.visible.clone()\n : rules.visible,\n disabled:\n typeof rules.disabled === 'object'\n ? rules.disabled.clone()\n : rules.disabled,\n readonly:\n typeof rules.readonly === 'object'\n ? rules.readonly.clone()\n : rules.readonly,\n metadata: rules.metadata,\n };\n cloned.fieldRules.set(field, clonedRules);\n }\n\n // Clone global validations\n cloned.globalValidations = this.globalValidations.map((spec) =>\n spec.clone(),\n );\n\n return cloned;\n }\n}\n","export enum TokenType {\n // Literals\n IDENTIFIER = 'IDENTIFIER',\n STRING = 'STRING',\n NUMBER = 'NUMBER',\n BOOLEAN = 'BOOLEAN',\n NULL = 'NULL',\n REGEX = 'REGEX',\n \n // Operators\n AND = 'AND',\n OR = 'OR',\n NOT = 'NOT',\n XOR = 'XOR',\n IMPLIES = 'IMPLIES',\n \n // Comparison operators\n EQUALS = 'EQUALS',\n NOT_EQUALS = 'NOT_EQUALS',\n LESS_THAN = 'LESS_THAN',\n LESS_THAN_OR_EQUAL = 'LESS_THAN_OR_EQUAL',\n GREATER_THAN = 'GREATER_THAN',\n GREATER_THAN_OR_EQUAL = 'GREATER_THAN_OR_EQUAL',\n IN = 'IN',\n NOT_IN = 'NOT_IN',\n MATCHES = 'MATCHES',\n NOT_MATCHES = 'NOT_MATCHES',\n IS_NULL = 'IS_NULL',\n IS_NOT_NULL = 'IS_NOT_NULL',\n IS_EMPTY = 'IS_EMPTY',\n IS_NOT_EMPTY = 'IS_NOT_EMPTY',\n \n // Function tokens\n CONTAINS = 'CONTAINS',\n STARTS_WITH = 'STARTS_WITH',\n ENDS_WITH = 'ENDS_WITH',\n AT_LEAST = 'AT_LEAST',\n EXACTLY = 'EXACTLY',\n \n // Punctuation\n LEFT_PAREN = 'LEFT_PAREN',\n RIGHT_PAREN = 'RIGHT_PAREN',\n LEFT_BRACKET = 'LEFT_BRACKET',\n RIGHT_BRACKET = 'RIGHT_BRACKET',\n COMMA = 'COMMA',\n DOT = 'DOT',\n \n // Special\n FIELD_REFERENCE = 'FIELD_REFERENCE', // ${field}\n EOF = 'EOF',\n WHITESPACE = 'WHITESPACE'\n}\n\nexport interface Token {\n type: TokenType;\n value: string;\n position: number;\n line: number;\n column: number;\n}\n\nexport const OPERATOR_KEYWORDS: Record<string, TokenType> = {\n 'and': TokenType.AND,\n '&&': TokenType.AND,\n 'or': TokenType.OR,\n '||': TokenType.OR,\n 'not': TokenType.NOT,\n '!': TokenType.NOT,\n 'xor': TokenType.XOR,\n '^': TokenType.XOR,\n 'implies': TokenType.IMPLIES,\n '=>': TokenType.IMPLIES,\n 'eq': TokenType.EQUALS,\n 'equals': TokenType.EQUALS,\n 'neq': TokenType.NOT_EQUALS,\n 'notequals': TokenType.NOT_EQUALS,\n 'lt': TokenType.LESS_THAN,\n 'lte': TokenType.LESS_THAN_OR_EQUAL,\n 'gt': TokenType.GREATER_THAN,\n 'gte': TokenType.GREATER_THAN_OR_EQUAL,\n 'in': TokenType.IN,\n 'matches': TokenType.MATCHES,\n '!~': TokenType.NOT_MATCHES,\n 'notmatches': TokenType.NOT_MATCHES,\n 'isnull': TokenType.IS_NULL,\n 'isNull': TokenType.IS_NULL,\n 'isnotnull': TokenType.IS_NOT_NULL,\n 'isNotNull': TokenType.IS_NOT_NULL,\n 'isempty': TokenType.IS_EMPTY,\n 'isEmpty': TokenType.IS_EMPTY,\n 'isnotempty': TokenType.IS_NOT_EMPTY,\n 'isNotEmpty': TokenType.IS_NOT_EMPTY,\n 'true': TokenType.BOOLEAN,\n 'false': TokenType.BOOLEAN,\n 'null': TokenType.NULL\n};\n\nexport const COMPARISON_OPERATORS: Record<string, TokenType> = {\n '==': TokenType.EQUALS,\n '!=': TokenType.NOT_EQUALS,\n '!~': TokenType.NOT_MATCHES,\n '~': TokenType.MATCHES,\n '<': TokenType.LESS_THAN,\n '<=': TokenType.LESS_THAN_OR_EQUAL,\n '>': TokenType.GREATER_THAN,\n '>=': TokenType.GREATER_THAN_OR_EQUAL\n};\n","import { Token, TokenType, OPERATOR_KEYWORDS, COMPARISON_OPERATORS } from './token';\n\nexport class DslTokenizer {\n private input: string;\n private position: number = 0;\n private line: number = 1;\n private column: number = 1;\n\n constructor(input: string) {\n this.input = input;\n }\n\n tokenize(): Token[] {\n const tokens: Token[] = [];\n \n while (this.position < this.input.length) {\n const token = this.nextToken();\n if (token.type !== TokenType.WHITESPACE) {\n tokens.push(token);\n }\n }\n \n tokens.push({\n type: TokenType.EOF,\n value: '',\n position: this.position,\n line: this.line,\n column: this.column\n });\n \n return tokens;\n }\n\n private nextToken(): Token {\n this.skipWhitespace();\n \n if (this.position >= this.input.length) {\n return this.createToken(TokenType.EOF, '');\n }\n\n const multiWordOperator = this.readMultiWordOperator();\n if (multiWordOperator) {\n return multiWordOperator;\n }\n\n const char = this.input[this.position];\n \n // Field references ${...}\n if (char === '$' && this.peek() === '{') {\n return this.readFieldReference();\n }\n \n // String literals\n if (char === '\"' || char === \"'\") {\n return this.readString(char);\n }\n\n // Regex literals /pattern/flags\n if (char === '/') {\n return this.readRegex();\n }\n \n // Numbers\n if (this.isDigit(char) || (char === '-' && this.isDigit(this.peek()))) {\n return this.readNumber();\n }\n \n // Multi-character operators\n if (char === '!' && this.peek() === '~') {\n const token = this.createToken(TokenType.NOT_MATCHES, '!~');\n this.advance(2);\n return token;\n }\n\n if (char === '=' && this.peek() === '>') {\n const token = this.createToken(TokenType.IMPLIES, '=>');\n this.advance(2);\n return token;\n }\n\n const twoChar = this.input.substr(this.position, 2);\n if (COMPARISON_OPERATORS[twoChar]) {\n const token = this.createToken(COMPARISON_OPERATORS[twoChar], twoChar);\n this.advance(2);\n return token;\n }\n \n // Single character operators and punctuation\n switch (char) {\n case '(':\n return this.createTokenAndAdvance(TokenType.LEFT_PAREN, char);\n case ')':\n return this.createTokenAndAdvance(TokenType.RIGHT_PAREN, char);\n case '[':\n return this.createTokenAndAdvance(TokenType.LEFT_BRACKET, char);\n case ']':\n return this.createTokenAndAdvance(TokenType.RIGHT_BRACKET, char);\n case ',':\n return this.createTokenAndAdvance(TokenType.COMMA, char);\n case '.':\n return this.createTokenAndAdvance(TokenType.DOT, char);\n case '!':\n if (this.peek() === '=') {\n const token = this.createToken(TokenType.NOT_EQUALS, '!=');\n this.advance(2);\n return token;\n }\n return this.createTokenAndAdvance(TokenType.NOT, char);\n case '~':\n return this.createTokenAndAdvance(TokenType.MATCHES, char);\n case '<':\n if (this.peek() === '=') {\n const token = this.createToken(TokenType.LESS_THAN_OR_EQUAL, '<=');\n this.advance(2);\n return token;\n }\n return this.createTokenAndAdvance(TokenType.LESS_THAN, char);\n case '>':\n if (this.peek() === '=') {\n const token = this.createToken(TokenType.GREATER_THAN_OR_EQUAL, '>=');\n this.advance(2);\n return token;\n }\n return this.createTokenAndAdvance(TokenType.GREATER_THAN, char);\n case '=':\n if (this.peek() === '=') {\n const token = this.createToken(TokenType.EQUALS, '==');\n this.advance(2);\n return token;\n }\n break;\n case '&':\n if (this.peek() === '&') {\n const token = this.createToken(TokenType.AND, '&&');\n this.advance(2);\n return token;\n }\n break;\n case '|':\n if (this.peek() === '|') {\n const token = this.createToken(TokenType.OR, '||');\n this.advance(2);\n return token;\n }\n break;\n case '^':\n return this.createTokenAndAdvance(TokenType.XOR, char);\n }\n \n // Identifiers and keywords\n if (this.isAlpha(char) || char === '_') {\n return this.readIdentifier();\n }\n \n throw new Error(`Unexpected character '${char}' at position ${this.position}`);\n }\n\n private readFieldReference(): Token {\n const start = this.position;\n this.advance(2); // Skip ${\n \n let value = '';\n while (this.position < this.input.length && this.input[this.position] !== '}') {\n value += this.input[this.position];\n this.advance();\n }\n \n if (this.position >= this.input.length) {\n throw new Error('Unterminated field reference');\n }\n \n this.advance(); // Skip }\n \n return this.createToken(TokenType.FIELD_REFERENCE, value, start);\n }\n\n private readString(quote: string): Token {\n const start = this.position;\n this.advance(); // Skip opening quote\n \n let value = '';\n while (this.position < this.input.length && this.input[this.position] !== quote) {\n if (this.input[this.position] === '\\\\') {\n this.advance();\n if (this.position < this.input.length) {\n const escaped = this.input[this.position];\n switch (escaped) {\n case 'n': value += '\\n'; break;\n case 't': value += '\\t'; break;\n case 'r': value += '\\r'; break;\n case '\\\\': value += '\\\\'; break;\n case '\"': value += '\"'; break;\n case \"'\": value += \"'\"; break;\n default: value += escaped; break;\n }\n this.advance();\n }\n } else {\n value += this.input[this.position];\n this.advance();\n }\n }\n \n if (this.position >= this.input.length) {\n throw new Error('Unterminated string literal');\n }\n \n this.advance(); // Skip closing quote\n \n return this.createToken(TokenType.STRING, value, start);\n }\n\n private readRegex(): Token {\n const start = this.position;\n this.advance(); // Skip opening /\n\n let pattern = '';\n\n while (this.position < this.input.length) {\n const current = this.input[this.position];\n\n if (current === '\\\\') {\n pattern += current;\n this.advance();\n if (this.position < this.input.length) {\n pattern += this.input[this.position];\n this.advance();\n }\n continue;\n }\n\n if (current === '/') {\n break;\n }\n\n pattern += current;\n this.advance();\n }\n\n if (this.position >= this.input.length) {\n throw new Error('Unterminated regex literal');\n }\n\n this.advance(); // Skip closing /\n\n let flags = '';\n while (this.position < this.input.length && this.isAlpha(this.input[this.position])) {\n flags += this.input[this.position];\n this.advance();\n }\n\n const value = `/${pattern}/${flags}`;\n return this.createToken(TokenType.REGEX, value, start);\n }\n\n private readNumber(): Token {\n const start = this.position;\n let value = '';\n \n if (this.input[this.position] === '-') {\n value += this.input[this.position];\n this.advance();\n }\n \n while (this.position < this.input.length && this.isDigit(this.input[this.position])) {\n value += this.input[this.position];\n this.advance();\n }\n \n if (this.position < this.input.length && this.input[this.position] === '.') {\n value += this.input[this.position];\n this.advance();\n \n while (this.position < this.input.length && this.isDigit(this.input[this.position])) {\n value += this.input[this.position];\n this.advance();\n }\n }\n \n return this.createToken(TokenType.NUMBER, value, start);\n }\n\n private readIdentifier(): Token {\n const start = this.position;\n let value = '';\n \n while (this.position < this.input.length && \n (this.isAlphaNumeric(this.input[this.position]) || this.input[this.position] === '_')) {\n value += this.input[this.position];\n this.advance();\n }\n\n const tokenType = OPERATOR_KEYWORDS[value] || TokenType.IDENTIFIER;\n return this.createToken(tokenType, value, start);\n }\n\n private readMultiWordOperator(): Token | null {\n const remaining = this.input.slice(this.position);\n const patterns: Array<{ regex: RegExp; type: TokenType }> = [\n { regex: /^is\\s+not\\s+empty\\b/i, type: TokenType.IS_NOT_EMPTY },\n { regex: /^is\\s+not\\s+null\\b/i, type: TokenType.IS_NOT_NULL },\n { regex: /^is\\s+empty\\b/i, type: TokenType.IS_EMPTY },\n { regex: /^is\\s+null\\b/i, type: TokenType.IS_NULL },\n { regex: /^not\\s+in\\b/i, type: TokenType.NOT_IN },\n { regex: /^not\\s+matches\\b/i, type: TokenType.NOT_MATCHES },\n ];\n\n for (const pattern of patterns) {\n const match = remaining.match(pattern.regex);\n if (match && match[0]) {\n const tokenValue = remaining.substring(0, match[0].length);\n const token = this.createToken(pattern.type, tokenValue, this.position);\n this.advance(match[0].length);\n return token;\n }\n }\n\n return null;\n }\n\n private skipWhitespace(): void {\n while (this.position < this.input.length && this.isWhitespace(this.input[this.position])) {\n if (this.input[this.position] === '\\n') {\n this.line++;\n this.column = 1;\n } else {\n this.column++;\n }\n this.position++;\n }\n }\n\n private createToken(type: TokenType, value: string, startPos?: number): Token {\n return {\n type,\n value,\n position: startPos ?? this.position,\n line: this.line,\n column: this.column - value.length\n };\n }\n\n private createTokenAndAdvance(type: TokenType, value: string): Token {\n const token = this.createToken(type, value);\n this.advance();\n return token;\n }\n\n private advance(count: number = 1): void {\n for (let i = 0; i < count && this.position < this.input.length; i++) {\n if (this.input[this.position] === '\\n') {\n this.line++;\n this.column = 1;\n } else {\n this.column++;\n }\n this.position++;\n }\n }\n\n private peek(offset: number = 1): string {\n const pos = this.position + offset;\n return pos < this.input.length ? this.input[pos] : '';\n }\n\n private isDigit(char: string): boolean {\n return char >= '0' && char <= '9';\n }\n\n private isAlpha(char: string): boolean {\n return (char >= 'a' && char <= 'z') || (char >= 'A' && char <= 'Z');\n }\n\n private isAlphaNumeric(char: string): boolean {\n return this.isAlpha(char) || this.isDigit(char);\n }\n\n private isWhitespace(char: string): boolean {\n return char === ' ' || char === '\\t' || char === '\\n' || char === '\\r';\n }\n}\n","import { Token, TokenType } from './token';\nimport { DslTokenizer } from './tokenizer';\nimport { Specification } from '@praxisui/specification-core';\nimport { FieldSpecification } from '../specification/field-specification';\nimport { FieldToFieldSpecification } from '../specification/field-to-field-specification';\nimport { AndSpecification } from '../specification/and-specification';\nimport { OrSpecification } from '../specification/or-specification';\nimport { NotSpecification } from '../specification/not-specification';\nimport { XorSpecification } from '../specification/xor-specification';\nimport { ImpliesSpecification } from '../specification/implies-specification';\nimport { FunctionSpecification } from '../specification/function-specification';\nimport { AtLeastSpecification } from '../specification/at-least-specification';\nimport { ExactlySpecification } from '../specification/exactly-specification';\nimport { ComparisonOperator } from '../specification/comparison-operator';\nimport { FunctionRegistry } from '../registry/function-registry';\n\nexport class DslParser<T extends object = any> {\n private tokens: Token[] = [];\n private current: number = 0;\n private lastArgumentTokenType: TokenType | null = null;\n\n constructor(private functionRegistry?: FunctionRegistry<T>) {}\n\n parse(input: string): Specification<T> {\n const tokenizer = new DslTokenizer(input);\n this.tokens = tokenizer.tokenize();\n this.current = 0;\n\n const spec = this.parseExpression();\n\n if (!this.isAtEnd()) {\n throw new Error(`Unexpected token: ${this.peek().value}`);\n }\n\n return spec;\n }\n\n private parseExpression(): Specification<T> {\n return this.parseImplies();\n }\n\n private parseImplies(): Specification<T> {\n let expr = this.parseXor();\n\n while (this.match(TokenType.IMPLIES)) {\n const right = this.parseXor();\n expr = new ImpliesSpecification<T>(expr, right);\n }\n\n return expr;\n }\n\n private parseXor(): Specification<T> {\n let expr = this.parseOr();\n\n while (this.match(TokenType.XOR)) {\n const right = this.parseOr();\n if (expr instanceof XorSpecification) {\n expr = new XorSpecification<T>([...expr.getSpecifications(), right]);\n } else {\n expr = new XorSpecification<T>([expr, right]);\n }\n }\n\n return expr;\n }\n\n private parseOr(): Specification<T> {\n let expr = this.parseAnd();\n\n while (this.match(TokenType.OR)) {\n const right = this.parseAnd();\n if (expr instanceof OrSpecification) {\n expr = new OrSpecification<T>([...expr.getSpecifications(), right]);\n } else {\n expr = new OrSpecification<T>([expr, right]);\n }\n }\n\n return expr;\n }\n\n private parseAnd(): Specification<T> {\n let expr = this.parseUnary();\n\n while (this.match(TokenType.AND)) {\n const right = this.parseUnary();\n if (expr instanceof AndSpecification) {\n expr = new AndSpecification<T>([...expr.getSpecifications(), right]);\n } else {\n expr = new AndSpecification<T>([expr, right]);\n }\n }\n\n return expr;\n }\n\n private parseUnary(): Specification<T> {\n if (this.match(TokenType.NOT)) {\n const expr = this.parseUnary();\n return new NotSpecification<T>(expr);\n }\n\n return this.parseComparison();\n }\n\n private parseComparison(): Specification<T> {\n let left = this.parsePrimary();\n\n if (this.matchComparison()) {\n const operatorToken = this.previous();\n const compOp = this.tokenTypeToComparisonOperator(operatorToken.type);\n\n // Parse RHS allowing literals, arrays and identifiers (as values)\n const rightValue = this.operatorRequiresValue(compOp)\n ? this.parseArgument()\n : this.defaultValueForOperator(compOp);\n\n if (left instanceof FieldSpecification) {\n const field = left.getField() as keyof T;\n\n if (\n (this.lastArgumentTokenType === TokenType.FIELD_REFERENCE ||\n this.lastArgumentTokenType === TokenType.IDENTIFIER) &&\n typeof rightValue === 'string'\n ) {\n return new FieldToFieldSpecification<T>(\n field,\n compOp,\n rightValue as keyof T,\n );\n }\n\n return new FieldSpecification<T>(field, compOp, rightValue as any);\n }\n\n throw new Error('Invalid comparison expression');\n }\n\n return left;\n }\n\n private parsePrimary(): Specification<T> {\n if (this.match(TokenType.LEFT_PAREN)) {\n const expr = this.parseExpression();\n this.consume(TokenType.RIGHT_PAREN, \"Expected ')' after expression\");\n return expr;\n }\n\n if (this.match(TokenType.FIELD_REFERENCE)) {\n const fieldName = this.previous().value;\n return new FieldSpecification<T>(\n fieldName as keyof T,\n ComparisonOperator.EQUALS,\n true,\n );\n }\n\n if (this.match(TokenType.IDENTIFIER, TokenType.MATCHES, TokenType.NOT_MATCHES)) {\n const identifier = this.previous().value;\n\n // Check if this is a function call\n if (this.match(TokenType.LEFT_PAREN)) {\n return this.parseFunctionCall(identifier);\n }\n\n // Otherwise treat as field reference\n return new FieldSpecification<T>(\n identifier as keyof T,\n ComparisonOperator.EQUALS,\n true,\n );\n }\n\n throw new Error(`Unexpected token: ${this.peek().value}`);\n }\n\n private parseFunctionCall(functionName: string): Specification<T> {\n const args: any[] = [];\n const argTokenTypes: TokenType[] = [];\n\n if (!this.check(TokenType.RIGHT_PAREN)) {\n do {\n args.push(this.parseArgument());\n argTokenTypes.push(this.lastArgumentTokenType ?? TokenType.EOF);\n } while (this.match(TokenType.COMMA));\n }\n\n this.consume(\n TokenType.RIGHT_PAREN,\n \"Expected ')' after function arguments\",\n );\n\n // Handle special built-in functions\n const normalizedFunctionName = this.normalizeFunctionName(functionName);\n\n switch (normalizedFunctionName) {\n case 'atLeast':\n if (args.length !== 2) {\n throw new Error('atLeast requires exactly 2 arguments');\n }\n const min = args[0];\n const specs = args[1];\n if (!Array.isArray(specs)) {\n throw new Error(\n 'atLeast second argument must be an array of specifications',\n );\n }\n return new AtLeastSpecification<T>(min, specs);\n\n case 'exactly':\n if (args.length !== 2) {\n throw new Error('exactly requires exactly 2 arguments');\n }\n const exact = args[0];\n const exactSpecs = args[1];\n if (!Array.isArray(exactSpecs)) {\n throw new Error(\n 'exactly second argument must be an array of specifications',\n );\n }\n return new ExactlySpecification<T>(exact, exactSpecs);\n\n case 'contains':\n case 'startsWith':\n case 'endsWith':\n case 'matches':\n case 'notMatches':\n if (args.length !== 2) {\n throw new Error(`${normalizedFunctionName} requires exactly 2 arguments`);\n }\n const field = args[0];\n const value = args[1];\n const op = this.functionNameToOperator(normalizedFunctionName);\n return new FieldSpecification<T>(field, op, value);\n\n default:\n // Custom functions keep identifier args as raw strings (legacy),\n // but preserve explicit field references (${field}) as typed args.\n const customArgs = args.map((arg, index) => {\n const tokenType = argTokenTypes[index];\n if (tokenType === TokenType.FIELD_REFERENCE && typeof arg === 'string') {\n return { type: 'field', field: arg };\n }\n return arg;\n });\n return new FunctionSpecification<T>(\n normalizedFunctionName,\n customArgs,\n this.functionRegistry,\n );\n }\n }\n\n private parseArgument(): any {\n this.lastArgumentTokenType = null;\n\n if (this.match(TokenType.STRING)) {\n this.lastArgumentTokenType = TokenType.STRING;\n return this.previous().value;\n }\n\n if (this.match(TokenType.NUMBER)) {\n const value = this.previous().value;\n this.lastArgumentTokenType = TokenType.NUMBER;\n return value.includes('.') ? parseFloat(value) : parseInt(value, 10);\n }\n\n if (this.match(TokenType.REGEX)) {\n this.lastArgumentTokenType = TokenType.REGEX;\n return this.parseRegexLiteral(this.previous().value);\n }\n\n if (this.match(TokenType.BOOLEAN)) {\n this.lastArgumentTokenType = TokenType.BOOLEAN;\n return this.previous().value === 'true';\n }\n\n if (this.match(TokenType.NULL)) {\n this.lastArgumentTokenType = TokenType.NULL;\n return null;\n }\n\n if (this.match(TokenType.FIELD_REFERENCE)) {\n this.lastArgumentTokenType = TokenType.FIELD_REFERENCE;\n return this.previous().value;\n }\n\n if (this.match(TokenType.IDENTIFIER, TokenType.MATCHES, TokenType.NOT_MATCHES)) {\n this.lastArgumentTokenType = this.previous().type;\n return this.previous().value;\n }\n\n if (this.match(TokenType.LEFT_BRACKET)) {\n this.lastArgumentTokenType = TokenType.LEFT_BRACKET;\n const elements: any[] = [];\n\n if (!this.check(TokenType.RIGHT_BRACKET)) {\n do {\n elements.push(this.parseArgument());\n } while (this.match(TokenType.COMMA));\n }\n\n this.consume(\n TokenType.RIGHT_BRACKET,\n \"Expected ']' after array elements\",\n );\n return elements;\n }\n\n this.lastArgumentTokenType = null;\n throw new Error(`Unexpected token in argument: ${this.peek().value}`);\n }\n\n private matchComparison(): boolean {\n return this.match(\n TokenType.EQUALS,\n TokenType.NOT_EQUALS,\n TokenType.LESS_THAN,\n TokenType.LESS_THAN_OR_EQUAL,\n TokenType.GREATER_THAN,\n TokenType.GREATER_THAN_OR_EQUAL,\n TokenType.IN,\n TokenType.NOT_IN,\n TokenType.MATCHES,\n TokenType.NOT_MATCHES,\n TokenType.IS_NULL,\n TokenType.IS_NOT_NULL,\n TokenType.IS_EMPTY,\n TokenType.IS_NOT_EMPTY,\n );\n }\n\n private tokenTypeToComparisonOperator(\n tokenType: TokenType,\n ): ComparisonOperator {\n switch (tokenType) {\n case TokenType.EQUALS:\n return ComparisonOperator.EQUALS;\n case TokenType.NOT_EQUALS:\n return ComparisonOperator.NOT_EQUALS;\n case TokenType.LESS_THAN:\n return ComparisonOperator.LESS_THAN;\n case TokenType.LESS_THAN_OR_EQUAL:\n return ComparisonOperator.LESS_THAN_OR_EQUAL;\n case TokenType.GREATER_THAN:\n return ComparisonOperator.GREATER_THAN;\n case TokenType.GREATER_THAN_OR_EQUAL:\n return ComparisonOperator.GREATER_THAN_OR_EQUAL;\n case TokenType.IN:\n return ComparisonOperator.IN;\n case TokenType.NOT_IN:\n return ComparisonOperator.NOT_IN;\n case TokenType.MATCHES:\n return ComparisonOperator.MATCHES;\n case TokenType.NOT_MATCHES:\n return ComparisonOperator.NOT_MATCHES;\n case TokenType.IS_NULL:\n return ComparisonOperator.IS_NULL;\n case TokenType.IS_NOT_NULL:\n return ComparisonOperator.IS_NOT_NULL;\n case TokenType.IS_EMPTY:\n return ComparisonOperator.IS_EMPTY;\n case TokenType.IS_NOT_EMPTY:\n return ComparisonOperator.IS_NOT_EMPTY;\n default:\n throw new Error(`Unknown comparison operator: ${tokenType}`);\n }\n }\n\n private functionNameToOperator(functionName: string): ComparisonOperator {\n const normalizedFunctionName = this.normalizeFunctionName(functionName);\n\n switch (normalizedFunctionName) {\n case 'contains':\n return ComparisonOperator.CONTAINS;\n case 'startsWith':\n return ComparisonOperator.STARTS_WITH;\n case 'endsWith':\n return ComparisonOperator.ENDS_WITH;\n case 'matches':\n return ComparisonOperator.MATCHES;\n case 'notMatches':\n return ComparisonOperator.NOT_MATCHES;\n default:\n throw new Error(`Unknown function: ${normalizedFunctionName}`);\n }\n }\n\n private normalizeFunctionName(functionName: string): string {\n const raw = String(functionName || '').trim();\n const compactLower = raw.replace(/\\s+/g, '').toLowerCase();\n if (compactLower === 'matches') return 'matches';\n if (compactLower === 'notmatches') return 'notMatches';\n return raw;\n }\n\n private extractValue(spec: any): any {\n // This is a simplified extraction - in a real implementation\n // we'd need to handle more complex cases\n if (spec instanceof FieldSpecification) {\n return spec.getValue();\n }\n return spec;\n }\n\n private operatorRequiresValue(operator: ComparisonOperator): boolean {\n switch (operator) {\n case ComparisonOperator.IS_NULL:\n case ComparisonOperator.IS_NOT_NULL:\n case ComparisonOperator.IS_EMPTY:\n case ComparisonOperator.IS_NOT_EMPTY:\n return false;\n default:\n return true;\n }\n }\n\n private defaultValueForOperator(operator: ComparisonOperator): any {\n switch (operator) {\n case ComparisonOperator.IS_NULL:\n case ComparisonOperator.IS_NOT_NULL:\n case ComparisonOperator.IS_EMPTY:\n case ComparisonOperator.IS_NOT_EMPTY:\n return null;\n default:\n return undefined;\n }\n }\n\n private parseRegexLiteral(raw: string): RegExp {\n const lastSlash = raw.lastIndexOf('/');\n const pattern = raw.slice(1, lastSlash);\n const flags = raw.slice(lastSlash + 1);\n return new RegExp(pattern, flags);\n }\n\n private match(...types: TokenType[]): boolean {\n for (const type of types) {\n if (this.check(type)) {\n this.advance();\n return true;\n }\n }\n return false;\n }\n\n private check(type: TokenType): boolean {\n if (this.isAtEnd()) return false;\n return this.peek().type === type;\n }\n\n private advance(): Token {\n if (!this.isAtEnd()) this.current++;\n return this.previous();\n }\n\n private isAtEnd(): boolean {\n return this.peek().type === TokenType.EOF;\n }\n\n private peek(): Token {\n return this.tokens[this.current];\n }\n\n private previous(): Token {\n return this.tokens[this.current - 1];\n }\n\n private consume(type: TokenType, message: string): Token {\n if (this.check(type)) return this.advance();\n throw new Error(`${message}. Got: ${this.peek().value}`);\n }\n}\n","import { Specification } from '@praxisui/specification-core';\nimport { FieldSpecification } from '../specification/field-specification';\nimport { AndSpecification } from '../specification/and-specification';\nimport { OrSpecification } from '../specification/or-specification';\nimport { NotSpecification } from '../specification/not-specification';\nimport { XorSpecification } from '../specification/xor-specification';\nimport { ImpliesSpecification } from '../specification/implies-specification';\nimport { FunctionSpecification } from '../specification/function-specification';\nimport { AtLeastSpecification } from '../specification/at-least-specification';\nimport { ExactlySpecification } from '../specification/exactly-specification';\nimport { FieldToFieldSpecification } from '../specification/field-to-field-specification';\nimport { ContextualSpecification } from '../specification/contextual-specification';\n\nexport interface ExportOptions {\n prettyPrint?: boolean;\n indentSize?: number;\n maxLineLength?: number;\n useParentheses?: 'minimal' | 'explicit' | 'auto';\n includeMetadata?: boolean;\n metadataPosition?: 'before' | 'after' | 'inline';\n}\n\nexport class DslExporter {\n private options: Required<ExportOptions>;\n\n constructor(options: ExportOptions = {}) {\n this.options = {\n prettyPrint: options.prettyPrint ?? false,\n indentSize: options.indentSize ?? 2,\n maxLineLength: options.maxLineLength ?? 80,\n useParentheses: options.useParentheses ?? 'auto',\n includeMetadata: options.includeMetadata ?? false,\n metadataPosition: options.metadataPosition ?? 'before',\n };\n }\n\n export<T extends object = any>(specification: Specification<T>): string {\n const dsl = this.exportSpecification(specification, 0);\n\n if (this.options.prettyPrint) {\n return this.formatPretty(dsl);\n }\n\n return dsl;\n }\n\n /**\n * Exports specification with metadata comments\n */\n exportWithMetadata<T extends object = any>(\n specification: Specification<T>,\n ): string {\n const originalIncludeMetadata = this.options.includeMetadata;\n this.options.includeMetadata = true;\n\n const result = this.export(specification);\n\n this.options.includeMetadata = originalIncludeMetadata;\n return result;\n }\n\n private exportSpecification<T extends object = any>(\n spec: Specification<T>,\n depth: number,\n ): string {\n const baseDsl = this.getSpecificationDsl(spec, depth);\n\n if (!this.options.includeMetadata) {\n return baseDsl;\n }\n\n return this.addMetadataComments(spec, baseDsl, depth);\n }\n\n private getSpecificationDsl<T extends object = any>(\n spec: Specification<T>,\n depth: number,\n ): string {\n if (spec instanceof FieldSpecification) {\n return this.exportFieldSpecification(spec);\n }\n\n if (spec instanceof AndSpecification) {\n return this.exportAndSpecification(spec, depth);\n }\n\n if (spec instanceof OrSpecification) {\n return this.exportOrSpecification(spec, depth);\n }\n\n if (spec instanceof NotSpecification) {\n return this.exportNotSpecification(spec, depth);\n }\n\n if (spec instanceof XorSpecification) {\n return this.exportXorSpecification(spec, depth);\n }\n\n if (spec instanceof ImpliesSpecification) {\n return this.exportImpliesSpecification(spec, depth);\n }\n\n if (spec instanceof FunctionSpecification) {\n return this.exportFunctionSpecification(spec);\n }\n\n if (spec instanceof AtLeastSpecification) {\n return this.exportAtLeastSpecification(spec, depth);\n }\n\n if (spec instanceof ExactlySpecification) {\n return this.exportExactlySpecification(spec, depth);\n }\n\n if (spec instanceof FieldToFieldSpecification) {\n return this.exportFieldToFieldSpecification(spec);\n }\n\n if (spec instanceof ContextualSpecification) {\n return this.exportContextualSpecification(spec);\n }\n\n // Fallback to toDSL method\n return spec.toDSL();\n }\n\n private addMetadataComments<T extends object = any>(\n spec: Specification<T>,\n dsl: string,\n depth: number,\n ): string {\n const metadata = spec.getMetadata();\n if (!metadata) {\n return dsl;\n }\n\n const indent = ' '.repeat(depth * this.options.indentSize);\n const comments: string[] = [];\n\n // Add metadata comments\n if (metadata.code) {\n comments.push(`${indent}// code: ${metadata.code}`);\n }\n\n if (metadata.message) {\n comments.push(`${indent}// message: ${metadata.message}`);\n }\n\n if (metadata.tag) {\n comments.push(`${indent}// tag: ${metadata.tag}`);\n }\n\n if (metadata.uiConfig) {\n const uiConfigStr = JSON.stringify(metadata.uiConfig);\n comments.push(`${indent}// uiConfig: ${uiConfigStr}`);\n }\n\n // Add any other metadata properties\n const standardKeys = ['code', 'message', 'tag', 'uiConfig'];\n for (const [key, value] of Object.entries(metadata)) {\n if (!standardKeys.includes(key) && value !== undefined) {\n comments.push(`${indent}// ${key}: ${JSON.stringify(value)}`);\n }\n }\n\n if (comments.length === 0) {\n return dsl;\n }\n\n switch (this.options.metadataPosition) {\n case 'before':\n return `${comments.join('\\n')}\\n${indent}${dsl}`;\n\n case 'after':\n return `${indent}${dsl}\\n${comments.join('\\n')}`;\n\n case 'inline':\n const firstComment = comments[0] ? ` ${comments[0].trim()}` : '';\n return `${indent}${dsl}${firstComment}`;\n\n default:\n return dsl;\n }\n }\n\n private exportFieldSpecification<T extends object = any>(\n spec: FieldSpecification<T>,\n ): string {\n return spec.toDSL();\n }\n\n private exportAndSpecification<T extends object = any>(\n spec: AndSpecification<T>,\n depth: number,\n ): string {\n const specifications = spec.getSpecifications();\n const parts = specifications.map((s) => {\n const dsl = this.exportSpecification(s, depth + 1);\n return this.needsParentheses(s, 'and') ? `(${dsl})` : dsl;\n });\n\n if (this.options.prettyPrint && this.shouldBreakLine(parts.join(' && '))) {\n const indent = ' '.repeat(depth * this.options.indentSize);\n const nextIndent = ' '.repeat((depth + 1) * this.options.indentSize);\n return parts.join(` &&\\n${nextIndent}`);\n }\n\n return parts.join(' && ');\n }\n\n private exportOrSpecification<T extends object = any>(\n spec: OrSpecification<T>,\n depth: number,\n ): string {\n const specifications = spec.getSpecifications();\n const parts = specifications.map((s) => {\n const dsl = this.exportSpecification(s, depth + 1);\n return this.needsParentheses(s, 'or') ? `(${dsl})` : dsl;\n });\n\n if (this.options.prettyPrint && this.shouldBreakLine(parts.join(' || '))) {\n const nextIndent = ' '.repeat((depth + 1) * this.options.indentSize);\n return parts.join(` ||\\n${nextIndent}`);\n }\n\n return parts.join(' || ');\n }\n\n private exportNotSpecification<T extends object = any>(\n spec: NotSpecification<T>,\n depth: number,\n ): string {\n const innerSpec = spec.getSpecification();\n const innerDsl = this.exportSpecification(innerSpec, depth);\n\n if (this.needsParentheses(innerSpec, 'not')) {\n return `!(${innerDsl})`;\n }\n\n return `!${innerDsl}`;\n }\n\n private exportXorSpecification<T extends object = any>(\n spec: XorSpecification<T>,\n depth: number,\n ): string {\n const specifications = spec.getSpecifications();\n const parts = specifications.map((s) => {\n const dsl = this.exportSpecification(s, depth + 1);\n return this.needsParentheses(s, 'xor') ? `(${dsl})` : dsl;\n });\n\n if (this.options.prettyPrint && this.shouldBreakLine(parts.join(' xor '))) {\n const nextIndent = ' '.repeat((depth + 1) * this.options.indentSize);\n return parts.join(` xor\\n${nextIndent}`);\n }\n\n return parts.join(' xor ');\n }\n\n private exportImpliesSpecification<T extends object = any>(\n spec: ImpliesSpecification<T>,\n depth: number,\n ): string {\n const antecedent = this.exportSpecification(\n spec.getAntecedent(),\n depth + 1,\n );\n const consequent = this.exportSpecification(\n spec.getConsequent(),\n depth + 1,\n );\n\n const leftPart = this.needsParentheses(spec.getAntecedent(), 'implies')\n ? `(${antecedent})`\n : antecedent;\n const rightPart = this.needsParentheses(spec.getConsequent(), 'implies')\n ? `(${consequent})`\n : consequent;\n\n if (\n this.options.prettyPrint &&\n this.shouldBreakLine(`${leftPart} implies ${rightPart}`)\n ) {\n const nextIndent = ' '.repeat((depth + 1) * this.options.indentSize);\n return `${leftPart} implies\\n${nextIndent}${rightPart}`;\n }\n\n return `${leftPart} implies ${rightPart}`;\n }\n\n private exportFunctionSpecification<T extends object = any>(\n spec: FunctionSpecification<T>,\n ): string {\n return spec.toDSL();\n }\n\n private exportAtLeastSpecification<T extends object = any>(\n spec: AtLeastSpecification<T>,\n depth: number,\n ): string {\n const minimum = spec.getMinimum();\n const specifications = spec.getSpecifications();\n const specDsls = specifications.map((s) =>\n this.exportSpecification(s, depth + 1),\n );\n\n if (this.options.prettyPrint && specDsls.length > 2) {\n const nextIndent = ' '.repeat((depth + 1) * this.options.indentSize);\n const specsStr = specDsls.join(`,\\n${nextIndent}`);\n return `atLeast(${minimum}, [\\n${nextIndent}${specsStr}\\n${' '.repeat(depth * this.options.indentSize)}])`;\n }\n\n return `atLeast(${minimum}, [${specDsls.join(', ')}])`;\n }\n\n private exportExactlySpecification<T extends object = any>(\n spec: ExactlySpecification<T>,\n depth: number,\n ): string {\n const exact = spec.getExact();\n const specifications = spec.getSpecifications();\n const specDsls = specifications.map((s) =>\n this.exportSpecification(s, depth + 1),\n );\n\n if (this.options.prettyPrint && specDsls.length > 2) {\n const nextIndent = ' '.repeat((depth + 1) * this.options.indentSize);\n const specsStr = specDsls.join(`,\\n${nextIndent}`);\n return `exactly(${exact}, [\\n${nextIndent}${specsStr}\\n${' '.repeat(depth * this.options.indentSize)}])`;\n }\n\n return `exactly(${exact}, [${specDsls.join(', ')}])`;\n }\n\n private exportFieldToFieldSpecification<T extends object = any>(\n spec: FieldToFieldSpecification<T>,\n ): string {\n return spec.toDSL();\n }\n\n private exportContextualSpecification<T extends object = any>(\n spec: ContextualSpecification<T>,\n ): string {\n return spec.toDSL();\n }\n\n private needsParentheses<T extends object = any>(\n spec: Specification<T>,\n parentContext: string,\n ): boolean {\n if (this.options.useParentheses === 'explicit') {\n return true;\n }\n\n if (this.options.useParentheses === 'minimal') {\n return false;\n }\n\n // Auto mode - determine based on operator precedence\n const precedence = this.getOperatorPrecedence(spec);\n const parentPrecedence = this.getContextPrecedence(parentContext);\n\n return precedence < parentPrecedence;\n }\n\n private getOperatorPrecedence<T extends object = any>(\n spec: Specification<T>,\n ): number {\n if (spec instanceof NotSpecification) return 5;\n if (spec instanceof AndSpecification) return 4;\n if (spec instanceof OrSpecification) return 3;\n if (spec instanceof XorSpecification) return 2;\n if (spec instanceof ImpliesSpecification) return 1;\n return 6; // Highest precedence for primitives\n }\n\n private getContextPrecedence(context: string): number {\n switch (context) {\n case 'not':\n return 5;\n case 'and':\n return 4;\n case 'or':\n return 3;\n case 'xor':\n return 2;\n case 'implies':\n return 1;\n default:\n return 0;\n }\n }\n\n private shouldBreakLine(line: string): boolean {\n return line.length > this.options.maxLineLength;\n }\n\n private formatPretty(dsl: string): string {\n // Additional pretty-printing logic could go here\n // For now, just return the DSL as-is since we handle formatting\n // in the individual export methods\n return dsl;\n }\n}\n","/**\n * Types of validation issues that can be found in DSL\n */\nexport enum ValidationIssueType {\n SYNTAX_ERROR = 'SyntaxError',\n UNKNOWN_FUNCTION = 'UnknownFunction',\n UNKNOWN_OPERATOR = 'UnknownOperator',\n UNBALANCED_PARENTHESES = 'UnbalancedParentheses',\n UNBALANCED_BRACKETS = 'UnbalancedBrackets',\n INVALID_TOKEN = 'InvalidToken',\n UNEXPECTED_TOKEN = 'UnexpectedToken',\n MISSING_ARGUMENT = 'MissingArgument',\n TOO_MANY_ARGUMENTS = 'TooManyArguments',\n INVALID_FIELD_REFERENCE = 'InvalidFieldReference',\n EMPTY_EXPRESSION = 'EmptyExpression',\n UNTERMINATED_STRING = 'UnterminatedString',\n INVALID_NUMBER = 'InvalidNumber',\n DEPRECATED_SYNTAX = 'DeprecatedSyntax',\n PERFORMANCE_WARNING = 'PerformanceWarning'\n}\n\n/**\n * Severity levels for validation issues\n */\nexport enum ValidationSeverity {\n ERROR = 'error',\n WARNING = 'warning',\n INFO = 'info',\n HINT = 'hint'\n}\n\n/**\n * Represents a validation issue found in DSL code\n */\nexport interface ValidationIssue {\n /**\n * Type of the issue\n */\n type: ValidationIssueType;\n\n /**\n * Severity level\n */\n severity: ValidationSeverity;\n\n /**\n * Human-readable error message\n */\n message: string;\n\n /**\n * Position information\n */\n position: {\n /**\n * Starting index in the input string\n */\n start: number;\n\n /**\n * Ending index in the input string\n */\n end: number;\n\n /**\n * Line number (1-based)\n */\n line: number;\n\n /**\n * Column number (1-based)\n */\n column: number;\n };\n\n /**\n * Suggested fix or correction\n */\n suggestion?: string;\n\n /**\n * Additional context or help text\n */\n help?: string;\n\n /**\n * Related documentation or examples\n */\n documentation?: string;\n}","import { DslTokenizer } from './tokenizer';\nimport { Token, TokenType, OPERATOR_KEYWORDS, COMPARISON_OPERATORS } from './token';\nimport { ValidationIssue, ValidationIssueType, ValidationSeverity } from './validation-issue';\nimport { FunctionRegistry } from '../registry/function-registry';\n\n/**\n * Configuration for DSL validation\n */\nexport interface DslValidatorConfig {\n /**\n * Available function names for validation\n */\n knownFunctions?: string[];\n\n /**\n * Function registry to check against\n */\n functionRegistry?: FunctionRegistry<any>;\n\n /**\n * Known field names for the target type\n */\n knownFields?: string[];\n\n /**\n * Maximum expression complexity (number of operators)\n */\n maxComplexity?: number;\n\n /**\n * Enable performance warnings\n */\n enablePerformanceWarnings?: boolean;\n\n /**\n * Enable deprecated syntax warnings\n */\n enableDeprecationWarnings?: boolean;\n}\n\n/**\n * Validates DSL expressions and provides detailed error reporting\n */\nexport class DslValidator {\n private config: Required<DslValidatorConfig>;\n\n private readonly BUILT_IN_FUNCTIONS = [\n 'contains', 'startsWith', 'endsWith', 'atLeast', 'exactly',\n 'forEach', 'uniqueBy', 'minLength', 'maxLength',\n 'requiredIf', 'visibleIf', 'disabledIf', 'readonlyIf',\n 'ifDefined', 'ifNotNull', 'ifExists', 'withDefault',\n 'matches', 'notMatches'\n ];\n\n constructor(config: DslValidatorConfig = {}) {\n this.config = {\n knownFunctions: config.knownFunctions || [],\n functionRegistry: config.functionRegistry,\n knownFields: config.knownFields || [],\n maxComplexity: config.maxComplexity || 50,\n enablePerformanceWarnings: config.enablePerformanceWarnings ?? true,\n enableDeprecationWarnings: config.enableDeprecationWarnings ?? true\n } as Required<DslValidatorConfig>;\n }\n\n /**\n * Validates a DSL expression and returns all issues found\n */\n validate(input: string): ValidationIssue[] {\n const issues: ValidationIssue[] = [];\n\n try {\n // Basic validation\n this.validateBasicStructure(input, issues);\n\n // Tokenize and validate tokens\n const tokenizer = new DslTokenizer(input);\n const tokens = tokenizer.tokenize();\n\n this.validateTokens(tokens, input, issues);\n this.validateSyntax(tokens, input, issues);\n this.validateSemantics(tokens, input, issues);\n this.validateComplexity(tokens, issues);\n\n } catch (error) {\n issues.push({\n type: ValidationIssueType.SYNTAX_ERROR,\n severity: ValidationSeverity.ERROR,\n message: `Unexpected error during validation: ${error}`,\n position: { start: 0, end: input.length, line: 1, column: 1 }\n });\n }\n\n return issues;\n }\n\n private validateBasicStructure(input: string, issues: ValidationIssue[]): void {\n // Check for empty expression\n if (input.trim().length === 0) {\n issues.push({\n type: ValidationIssueType.EMPTY_EXPRESSION,\n severity: ValidationSeverity.ERROR,\n message: 'Expression cannot be empty',\n position: { start: 0, end: 0, line: 1, column: 1 },\n suggestion: 'Add a valid expression'\n });\n return;\n }\n\n // Check for unbalanced parentheses\n this.validateBalancedDelimiters(input, '(', ')', ValidationIssueType.UNBALANCED_PARENTHESES, issues);\n\n // Check for unbalanced brackets\n this.validateBalancedDelimiters(input, '[', ']', ValidationIssueType.UNBALANCED_BRACKETS, issues);\n\n // Check for unterminated strings\n this.validateStringLiterals(input, issues);\n }\n\n private validateBalancedDelimiters(\n input: string,\n open: string,\n close: string,\n issueType: ValidationIssueType,\n issues: ValidationIssue[]\n ): void {\n let count = 0;\n let openPositions: number[] = [];\n\n for (let i = 0; i < input.length; i++) {\n if (input[i] === open) {\n count++;\n openPositions.push(i);\n } else if (input[i] === close) {\n count--;\n if (count < 0) {\n const { line, column } = this.getLineColumn(input, i);\n issues.push({\n type: issueType,\n severity: ValidationSeverity.ERROR,\n message: `Unexpected closing ${close}`,\n position: { start: i, end: i + 1, line, column },\n suggestion: `Remove the extra ${close} or add a matching ${open}`\n });\n } else {\n openPositions.pop();\n }\n }\n }\n\n // Report unclosed delimiters\n for (const pos of openPositions) {\n const { line, column } = this.getLineColumn(input, pos);\n issues.push({\n type: issueType,\n severity: ValidationSeverity.ERROR,\n message: `Unclosed ${open}`,\n position: { start: pos, end: pos + 1, line, column },\n suggestion: `Add a closing ${close}`\n });\n }\n }\n\n private validateStringLiterals(input: string, issues: ValidationIssue[]): void {\n const quotes = ['\"', \"'\"];\n\n for (const quote of quotes) {\n let inString = false;\n let startPos = -1;\n\n for (let i = 0; i < input.length; i++) {\n if (input[i] === quote) {\n if (!inString) {\n inString = true;\n startPos = i;\n } else {\n // Check if it's escaped\n let escaped = false;\n let backslashCount = 0;\n for (let j = i - 1; j >= 0 && input[j] === '\\\\'; j--) {\n backslashCount++;\n }\n escaped = backslashCount % 2 === 1;\n\n if (!escaped) {\n inString = false;\n startPos = -1;\n }\n }\n }\n }\n\n if (inString) {\n const { line, column } = this.getLineColumn(input, startPos);\n issues.push({\n type: ValidationIssueType.UNTERMINATED_STRING,\n severity: ValidationSeverity.ERROR,\n message: `Unterminated string literal starting with ${quote}`,\n position: { start: startPos, end: input.length, line, column },\n suggestion: `Add a closing ${quote}`\n });\n }\n }\n }\n\n private validateTokens(tokens: Token[], input: string, issues: ValidationIssue[]): void {\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n const nextToken = tokens[i + 1];\n if (token.type === TokenType.EOF) continue;\n\n // Validate numbers\n if (token.type === TokenType.NUMBER) {\n if (isNaN(Number(token.value))) {\n issues.push({\n type: ValidationIssueType.INVALID_NUMBER,\n severity: ValidationSeverity.ERROR,\n message: `Invalid number format: ${token.value}`,\n position: {\n start: token.position,\n end: token.position + token.value.length,\n line: token.line,\n column: token.column\n },\n suggestion: 'Use a valid number format (e.g., 42, 3.14, -5)'\n });\n }\n }\n\n // Validate field references\n if (token.type === TokenType.FIELD_REFERENCE || token.type === TokenType.IDENTIFIER) {\n // Function names are identifiers too, but should be validated as functions\n // (validateSemantics), not as field references.\n const isFunctionIdentifier = this.isFunctionToken(token, nextToken);\n if (isFunctionIdentifier) continue;\n\n if (this.config.knownFields.length > 0) {\n if (!this.config.knownFields.includes(token.value)) {\n issues.push({\n type: ValidationIssueType.INVALID_FIELD_REFERENCE,\n severity: ValidationSeverity.WARNING,\n message: `Unknown field: ${token.value}`,\n position: {\n start: token.position,\n end: token.position + token.value.length,\n line: token.line,\n column: token.column\n },\n suggestion: this.suggestSimilarField(token.value),\n help: `Available fields: ${this.config.knownFields.join(', ')}`\n });\n }\n }\n }\n }\n }\n\n private validateSyntax(tokens: Token[], input: string, issues: ValidationIssue[]): void {\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n const nextToken = tokens[i + 1];\n const prevToken = tokens[i - 1];\n\n // Check for consecutive operators\n if (this.isOperatorToken(token) && this.isOperatorToken(nextToken)) {\n // `matches(` and `notMatches(` can be tokenized as operator-like function names.\n if (this.isFunctionToken(nextToken, tokens[i + 2])) {\n continue;\n }\n\n // Allow NOT after binary operators (e.g. AND NOT, OR NOT)\n if (this.isBinaryOperatorToken(token) && nextToken.type === TokenType.NOT) {\n continue;\n }\n\n issues.push({\n type: ValidationIssueType.UNEXPECTED_TOKEN,\n severity: ValidationSeverity.ERROR,\n message: `Unexpected ${nextToken.type} after ${token.type}`,\n position: {\n start: nextToken.position,\n end: nextToken.position + nextToken.value.length,\n line: nextToken.line,\n column: nextToken.column\n },\n suggestion: 'Add an operand between operators'\n });\n }\n\n // Check for operators at the beginning/end\n if (i === 0 && this.isBinaryOperatorToken(token)) {\n if (this.isFunctionToken(token, nextToken)) {\n continue;\n }\n\n issues.push({\n type: ValidationIssueType.UNEXPECTED_TOKEN,\n severity: ValidationSeverity.ERROR,\n message: `Expression cannot start with ${token.type}`,\n position: {\n start: token.position,\n end: token.position + token.value.length,\n line: token.line,\n column: token.column\n },\n suggestion: 'Add an operand before the operator'\n });\n }\n\n if (i === tokens.length - 2 && this.isBinaryOperatorToken(token) && nextToken.type === TokenType.EOF) {\n issues.push({\n type: ValidationIssueType.UNEXPECTED_TOKEN,\n severity: ValidationSeverity.ERROR,\n message: `Expression cannot end with ${token.type}`,\n position: {\n start: token.position,\n end: token.position + token.value.length,\n line: token.line,\n column: token.column\n },\n suggestion: 'Add an operand after the operator'\n });\n }\n }\n }\n\n private validateSemantics(tokens: Token[], input: string, issues: ValidationIssue[]): void {\n // Check function calls\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n const nextToken = tokens[i + 1];\n\n if (this.isFunctionToken(token, nextToken)) {\n const functionName = this.normalizeFunctionTokenName(token);\n\n // Check if function is known\n const allKnownFunctions = [\n ...this.BUILT_IN_FUNCTIONS,\n ...this.config.knownFunctions\n ];\n\n if (this.config.functionRegistry) {\n allKnownFunctions.push(...Array.from(this.config.functionRegistry.getAll().keys()));\n }\n\n if (!allKnownFunctions.includes(functionName)) {\n issues.push({\n type: ValidationIssueType.UNKNOWN_FUNCTION,\n severity: ValidationSeverity.ERROR,\n message: `Unknown function: ${functionName}`,\n position: {\n start: token.position,\n end: token.position + token.value.length,\n line: token.line,\n column: token.column\n },\n suggestion: this.suggestSimilarFunction(functionName, allKnownFunctions),\n help: `Available functions: ${allKnownFunctions.join(', ')}`\n });\n }\n\n // Validate function arguments (basic check)\n this.validateFunctionArguments(functionName, i, tokens, issues);\n }\n }\n }\n\n private validateFunctionArguments(\n functionName: string,\n startIndex: number,\n tokens: Token[],\n issues: ValidationIssue[]\n ): void {\n // Find the argument list\n let parenCount = 0;\n let argCount = 0;\n let inArgs = false;\n\n for (let i = startIndex + 1; i < tokens.length; i++) {\n const token = tokens[i];\n\n if (token.type === TokenType.LEFT_PAREN) {\n parenCount++;\n if (parenCount === 1) {\n inArgs = true;\n }\n } else if (token.type === TokenType.RIGHT_PAREN) {\n parenCount--;\n if (parenCount === 0) {\n break;\n }\n } else if (token.type === TokenType.COMMA && parenCount === 1) {\n argCount++;\n } else if (inArgs && parenCount === 1 && token.type !== TokenType.COMMA) {\n // We have at least one argument\n if (argCount === 0) {\n argCount = 1;\n }\n }\n }\n\n // Check argument count for known functions\n const expectedArgs = this.getExpectedArgumentCount(functionName);\n if (expectedArgs !== null && argCount !== expectedArgs) {\n const functionToken = tokens[startIndex];\n const severity = argCount < expectedArgs ? ValidationSeverity.ERROR : ValidationSeverity.WARNING;\n const message = argCount < expectedArgs\n ? `Function ${functionName} expects ${expectedArgs} arguments, got ${argCount}`\n : `Function ${functionName} expects ${expectedArgs} arguments, got ${argCount}`;\n\n issues.push({\n type: argCount < expectedArgs ? ValidationIssueType.MISSING_ARGUMENT : ValidationIssueType.TOO_MANY_ARGUMENTS,\n severity,\n message,\n position: {\n start: functionToken.position,\n end: functionToken.position + functionToken.value.length,\n line: functionToken.line,\n column: functionToken.column\n },\n suggestion: `Use exactly ${expectedArgs} arguments`\n });\n }\n }\n\n private validateComplexity(tokens: Token[], issues: ValidationIssue[]): void {\n if (!this.config.enablePerformanceWarnings) return;\n\n const operatorCount = tokens.filter(token => this.isOperatorToken(token)).length;\n\n if (operatorCount > this.config.maxComplexity) {\n issues.push({\n type: ValidationIssueType.PERFORMANCE_WARNING,\n severity: ValidationSeverity.WARNING,\n message: `Expression complexity is high (${operatorCount} operators). Consider breaking into smaller expressions.`,\n position: { start: 0, end: 0, line: 1, column: 1 },\n help: 'Complex expressions can impact performance and readability'\n });\n }\n }\n\n private getExpectedArgumentCount(functionName: string): number | null {\n const argCounts: Record<string, number> = {\n 'contains': 2,\n 'startsWith': 2,\n 'endsWith': 2,\n 'atLeast': 2,\n 'exactly': 2,\n 'forEach': 2,\n 'uniqueBy': 2,\n 'minLength': 2,\n 'maxLength': 2,\n 'requiredIf': 2,\n 'visibleIf': 2,\n 'disabledIf': 2,\n 'readonlyIf': 2,\n 'ifDefined': 2,\n 'ifNotNull': 2,\n 'ifExists': 2,\n 'withDefault': 3,\n 'matches': 2,\n 'notMatches': 2\n };\n\n return argCounts[functionName] ?? null;\n }\n\n private isFunctionToken(token: Token | undefined, nextToken: Token | undefined): boolean {\n if (!token || !nextToken) return false;\n if (nextToken.type !== TokenType.LEFT_PAREN) return false;\n\n return token.type === TokenType.IDENTIFIER\n || token.type === TokenType.MATCHES\n || token.type === TokenType.NOT_MATCHES;\n }\n\n private normalizeFunctionTokenName(token: Token): string {\n if (token.type === TokenType.MATCHES) return 'matches';\n if (token.type === TokenType.NOT_MATCHES) return 'notMatches';\n return token.value;\n }\n\n private isOperatorToken(token: Token): boolean {\n return [\n TokenType.AND, TokenType.OR, TokenType.NOT, TokenType.XOR, TokenType.IMPLIES,\n TokenType.EQUALS, TokenType.NOT_EQUALS, TokenType.LESS_THAN,\n TokenType.LESS_THAN_OR_EQUAL, TokenType.GREATER_THAN, TokenType.GREATER_THAN_OR_EQUAL,\n TokenType.IN, TokenType.NOT_IN, TokenType.MATCHES, TokenType.NOT_MATCHES,\n TokenType.IS_NULL, TokenType.IS_NOT_NULL, TokenType.IS_EMPTY, TokenType.IS_NOT_EMPTY\n ].includes(token.type);\n }\n\n private isBinaryOperatorToken(token: Token): boolean {\n return [\n TokenType.AND, TokenType.OR, TokenType.XOR, TokenType.IMPLIES,\n TokenType.EQUALS, TokenType.NOT_EQUALS, TokenType.LESS_THAN,\n TokenType.LESS_THAN_OR_EQUAL, TokenType.GREATER_THAN, TokenType.GREATER_THAN_OR_EQUAL,\n TokenType.IN, TokenType.NOT_IN, TokenType.MATCHES, TokenType.NOT_MATCHES\n ].includes(token.type);\n }\n\n private suggestSimilarField(fieldName: string): string | undefined {\n return this.findSimilar(fieldName, this.config.knownFields);\n }\n\n private suggestSimilarFunction(functionName: string, knownFunctions: string[]): string | undefined {\n return this.findSimilar(functionName, knownFunctions);\n }\n\n private findSimilar(target: string, candidates: string[]): string | undefined {\n if (candidates.length === 0) return undefined;\n\n const similarities = candidates.map(candidate => ({\n candidate,\n distance: this.levenshteinDistance(target.toLowerCase(), candidate.toLowerCase())\n }));\n\n similarities.sort((a, b) => a.distance - b.distance);\n\n // Only suggest if the distance is reasonable\n if (similarities[0].distance <= Math.max(2, target.length * 0.4)) {\n return `Did you mean \"${similarities[0].candidate}\"?`;\n }\n\n return undefined;\n }\n\n private levenshteinDistance(a: string, b: string): number {\n const matrix: number[][] = [];\n\n for (let i = 0; i <= b.length; i++) {\n matrix[i] = [i];\n }\n\n for (let j = 0; j <= a.length; j++) {\n matrix[0][j] = j;\n }\n\n for (let i = 1; i <= b.length; i++) {\n for (let j = 1; j <= a.length; j++) {\n if (b.charAt(i - 1) === a.charAt(j - 1)) {\n matrix[i][j] = matrix[i - 1][j - 1];\n } else {\n matrix[i][j] = Math.min(\n matrix[i - 1][j - 1] + 1,\n matrix[i][j - 1] + 1,\n matrix[i - 1][j] + 1\n );\n }\n }\n }\n\n return matrix[b.length][a.length];\n }\n\n private getLineColumn(input: string, position: number): { line: number; column: number } {\n let line = 1;\n let column = 1;\n\n for (let i = 0; i < position && i < input.length; i++) {\n if (input[i] === '\\n') {\n line++;\n column = 1;\n } else {\n column++;\n }\n }\n\n return { line, column };\n }\n}\n","import { Specification } from '@praxisui/specification-core';\nimport { FieldSpecification } from '../specification/field-specification';\nimport { AndSpecification } from '../specification/and-specification';\nimport { OrSpecification } from '../specification/or-specification';\nimport { NotSpecification } from '../specification/not-specification';\nimport { XorSpecification } from '../specification/xor-specification';\nimport { ImpliesSpecification } from '../specification/implies-specification';\nimport { FunctionSpecification } from '../specification/function-specification';\nimport { AtLeastSpecification } from '../specification/at-least-specification';\nimport { ExactlySpecification } from '../specification/exactly-specification';\nimport { FieldToFieldSpecification } from '../specification/field-to-field-specification';\nimport { ContextualSpecification } from '../specification/contextual-specification';\nimport { ComparisonOperator } from '../specification/comparison-operator';\nimport { FunctionRegistry } from '../registry/function-registry';\nimport { TransformRegistry } from '../registry/transform-registry';\nimport { ContextProvider } from '../context/context-provider';\nimport { SpecificationMetadata } from '@praxisui/specification-core';\nimport {\n RequiredIfSpecification,\n VisibleIfSpecification,\n DisabledIfSpecification,\n ReadonlyIfSpecification,\n} from '../specification/conditional-validators';\nimport {\n ForEachSpecification,\n UniqueBySpecification,\n MinLengthSpecification,\n MaxLengthSpecification,\n} from '../specification/collection-specifications';\nimport {\n IfDefinedSpecification,\n IfNotNullSpecification,\n IfExistsSpecification,\n WithDefaultSpecification,\n} from '../specification/optional-specifications';\nimport { FormSpecification } from '../specification/form-specification';\n\nexport class SpecificationFactory {\n static fromJSON<T extends object = any>(json: any): Specification<T> {\n // Robustez: validar entrada e inferir quando possível\n if (json == null) {\n throw new Error('Invalid specification JSON: null/undefined');\n }\n\n if (Array.isArray(json)) {\n const specs = json.map((specJson) =>\n SpecificationFactory.fromJSON<T>(specJson),\n );\n return new AndSpecification<T>(specs);\n }\n\n if (typeof json !== 'object') {\n throw new Error(\n `Invalid specification JSON: expected object/array, got ${typeof json}`,\n );\n }\n\n // Inferência quando 'type' está ausente\n if (!json.type) {\n if (Array.isArray(json.specs)) {\n const specs = json.specs.map((specJson: any) =>\n SpecificationFactory.fromJSON<T>(specJson),\n );\n return new AndSpecification<T>(specs);\n }\n\n if ('field' in json && 'operator' in json) {\n return FieldSpecification.fromJSON<T>({ type: 'field', ...json });\n }\n\n if ('antecedent' in json && 'consequent' in json) {\n const antecedent = SpecificationFactory.fromJSON<T>(json.antecedent);\n const consequent = SpecificationFactory.fromJSON<T>(json.consequent);\n return new ImpliesSpecification<T>(antecedent, consequent);\n }\n\n if ('spec' in json) {\n const notSpec = SpecificationFactory.fromJSON<T>(json.spec);\n return new NotSpecification<T>(notSpec);\n }\n\n if ('itemSpecification' in json && 'arrayField' in json) {\n const itemSpec = SpecificationFactory.fromJSON(json.itemSpecification);\n return new ForEachSpecification<T>(\n json.arrayField as keyof T,\n itemSpec,\n json.metadata,\n );\n }\n\n // Se não for possível inferir, manter erro claro\n throw new Error('Unknown specification type: undefined');\n }\n\n switch (json.type) {\n case 'field':\n return FieldSpecification.fromJSON<T>(json);\n\n case 'and':\n const andSpecs = json.specs.map((specJson: any) =>\n SpecificationFactory.fromJSON<T>(specJson),\n );\n return new AndSpecification<T>(andSpecs);\n\n case 'or':\n const orSpecs = json.specs.map((specJson: any) =>\n SpecificationFactory.fromJSON<T>(specJson),\n );\n return new OrSpecification<T>(orSpecs);\n\n case 'not':\n const notSpec = SpecificationFactory.fromJSON<T>(json.spec);\n return new NotSpecification<T>(notSpec);\n\n case 'xor':\n const xorSpecs = json.specs.map((specJson: any) =>\n SpecificationFactory.fromJSON<T>(specJson),\n );\n return new XorSpecification<T>(xorSpecs);\n\n case 'implies':\n const antecedent = SpecificationFactory.fromJSON<T>(json.antecedent);\n const consequent = SpecificationFactory.fromJSON<T>(json.consequent);\n return new ImpliesSpecification<T>(antecedent, consequent);\n\n case 'function':\n return FunctionSpecification.fromJSON<T>(json);\n\n case 'atLeast':\n const atLeastSpecs = json.specs.map((specJson: any) =>\n SpecificationFactory.fromJSON<T>(specJson),\n );\n return new AtLeastSpecification<T>(json.minimum, atLeastSpecs);\n\n case 'exactly':\n const exactlySpecs = json.specs.map((specJson: any) =>\n SpecificationFactory.fromJSON<T>(specJson),\n );\n return new ExactlySpecification<T>(json.exact, exactlySpecs);\n\n case 'fieldToField':\n return FieldToFieldSpecification.fromJSON<T>(json);\n\n case 'contextual':\n return ContextualSpecification.fromJSON<T>(json);\n\n case 'requiredIf':\n const requiredCondition = SpecificationFactory.fromJSON<T>(\n json.condition,\n );\n return new RequiredIfSpecification<T>(\n json.field as keyof T,\n requiredCondition,\n json.metadata,\n );\n\n case 'visibleIf':\n const visibleCondition = SpecificationFactory.fromJSON<T>(\n json.condition,\n );\n return new VisibleIfSpecification<T>(\n json.field as keyof T,\n visibleCondition,\n json.metadata,\n );\n\n case 'disabledIf':\n const disabledCondition = SpecificationFactory.fromJSON<T>(\n json.condition,\n );\n return new DisabledIfSpecification<T>(\n json.field as keyof T,\n disabledCondition,\n json.metadata,\n );\n\n case 'readonlyIf':\n const readonlyCondition = SpecificationFactory.fromJSON<T>(\n json.condition,\n );\n return new ReadonlyIfSpecification<T>(\n json.field as keyof T,\n readonlyCondition,\n json.metadata,\n );\n\n case 'forEach':\n const itemSpec = SpecificationFactory.fromJSON(json.itemSpecification);\n return new ForEachSpecification<T>(\n json.arrayField as keyof T,\n itemSpec,\n json.metadata,\n );\n\n case 'uniqueBy':\n return UniqueBySpecification.fromJSON<T>(json);\n\n case 'minLength':\n return MinLengthSpecification.fromJSON<T>(json);\n\n case 'maxLength':\n return MaxLengthSpecification.fromJSON<T>(json);\n\n case 'ifDefined':\n const ifDefinedSpec = SpecificationFactory.fromJSON<T>(\n json.specification,\n );\n return new IfDefinedSpecification<T>(\n json.field as keyof T,\n ifDefinedSpec,\n json.metadata,\n );\n\n case 'ifNotNull':\n const ifNotNullSpec = SpecificationFactory.fromJSON<T>(\n json.specification,\n );\n return new IfNotNullSpecification<T>(\n json.field as keyof T,\n ifNotNullSpec,\n json.metadata,\n );\n\n case 'ifExists':\n const ifExistsSpec = SpecificationFactory.fromJSON<T>(\n json.specification,\n );\n return new IfExistsSpecification<T>(\n json.field as keyof T,\n ifExistsSpec,\n json.metadata,\n );\n\n case 'withDefault':\n const withDefaultSpec = SpecificationFactory.fromJSON<T>(\n json.specification,\n );\n return new WithDefaultSpecification<T>(\n json.field as keyof T,\n json.defaultValue,\n withDefaultSpec,\n json.metadata,\n );\n\n case 'form':\n // Form specifications require special reconstruction\n throw new Error('FormSpecification.fromJSON not yet implemented');\n\n default:\n throw new Error(`Unknown specification type: ${json.type}`);\n }\n }\n\n static field<T extends object = any>(\n field: keyof T,\n operator: ComparisonOperator,\n value: any,\n ): FieldSpecification<T> {\n return new FieldSpecification<T>(field, operator, value);\n }\n\n static and<T extends object = any>(\n ...specs: Specification<T>[]\n ): AndSpecification<T> {\n return new AndSpecification<T>(specs);\n }\n\n static or<T extends object = any>(\n ...specs: Specification<T>[]\n ): OrSpecification<T> {\n return new OrSpecification<T>(specs);\n }\n\n static not<T extends object = any>(\n spec: Specification<T>,\n ): NotSpecification<T> {\n return new NotSpecification<T>(spec);\n }\n\n static xor<T extends object = any>(\n ...specs: Specification<T>[]\n ): XorSpecification<T> {\n return new XorSpecification<T>(specs);\n }\n\n static implies<T extends object = any>(\n antecedent: Specification<T>,\n consequent: Specification<T>,\n ): ImpliesSpecification<T> {\n return new ImpliesSpecification<T>(antecedent, consequent);\n }\n\n static func<T extends object = any>(\n name: string,\n args: any[],\n registry?: FunctionRegistry<T>,\n ): FunctionSpecification<T> {\n return new FunctionSpecification<T>(name, args, registry);\n }\n\n static atLeast<T extends object = any>(\n minimum: number,\n specs: Specification<T>[],\n ): AtLeastSpecification<T> {\n return new AtLeastSpecification<T>(minimum, specs);\n }\n\n static exactly<T extends object = any>(\n exact: number,\n specs: Specification<T>[],\n ): ExactlySpecification<T> {\n return new ExactlySpecification<T>(exact, specs);\n }\n\n static fieldToField<T extends object = any>(\n fieldA: keyof T,\n operator: ComparisonOperator,\n fieldB: keyof T,\n transformA?: string[],\n transformB?: string[],\n registry?: TransformRegistry,\n metadata?: SpecificationMetadata,\n ): FieldToFieldSpecification<T> {\n return new FieldToFieldSpecification<T>(\n fieldA,\n operator,\n fieldB,\n transformA,\n transformB,\n registry,\n metadata,\n );\n }\n\n static contextual<T extends object = any>(\n template: string,\n provider?: ContextProvider,\n ): ContextualSpecification<T> {\n return new ContextualSpecification<T>(template, provider);\n }\n\n // Convenience methods for common operators\n static equals<T extends object = any>(\n field: keyof T,\n value: any,\n ): FieldSpecification<T> {\n return new FieldSpecification<T>(field, ComparisonOperator.EQUALS, value);\n }\n\n static notEquals<T extends object = any>(\n field: keyof T,\n value: any,\n ): FieldSpecification<T> {\n return new FieldSpecification<T>(\n field,\n ComparisonOperator.NOT_EQUALS,\n value,\n );\n }\n\n static greaterThan<T extends object = any>(\n field: keyof T,\n value: any,\n ): FieldSpecification<T> {\n return new FieldSpecification<T>(\n field,\n ComparisonOperator.GREATER_THAN,\n value,\n );\n }\n\n static lessThan<T extends object = any>(\n field: keyof T,\n value: any,\n ): FieldSpecification<T> {\n return new FieldSpecification<T>(\n field,\n ComparisonOperator.LESS_THAN,\n value,\n );\n }\n\n static contains<T extends object = any>(\n field: keyof T,\n value: any,\n ): FieldSpecification<T> {\n return new FieldSpecification<T>(field, ComparisonOperator.CONTAINS, value);\n }\n\n static startsWith<T extends object = any>(\n field: keyof T,\n value: any,\n ): FieldSpecification<T> {\n return new FieldSpecification<T>(\n field,\n ComparisonOperator.STARTS_WITH,\n value,\n );\n }\n\n static endsWith<T extends object = any>(\n field: keyof T,\n value: any,\n ): FieldSpecification<T> {\n return new FieldSpecification<T>(\n field,\n ComparisonOperator.ENDS_WITH,\n value,\n );\n }\n\n static isIn<T extends object = any>(\n field: keyof T,\n values: any[],\n ): FieldSpecification<T> {\n return new FieldSpecification<T>(field, ComparisonOperator.IN, values);\n }\n\n // Phase 2: Conditional validators\n static requiredIf<T extends object = any>(\n field: keyof T,\n condition: Specification<T>,\n metadata?: SpecificationMetadata,\n ): RequiredIfSpecification<T> {\n return new RequiredIfSpecification<T>(field, condition, metadata);\n }\n\n static visibleIf<T extends object = any>(\n field: keyof T,\n condition: Specification<T>,\n metadata?: SpecificationMetadata,\n ): VisibleIfSpecification<T> {\n return new VisibleIfSpecification<T>(field, condition, metadata);\n }\n\n static disabledIf<T extends object = any>(\n field: keyof T,\n condition: Specification<T>,\n metadata?: SpecificationMetadata,\n ): DisabledIfSpecification<T> {\n return new DisabledIfSpecification<T>(field, condition, metadata);\n }\n\n static readonlyIf<T extends object = any>(\n field: keyof T,\n condition: Specification<T>,\n metadata?: SpecificationMetadata,\n ): ReadonlyIfSpecification<T> {\n return new ReadonlyIfSpecification<T>(field, condition, metadata);\n }\n\n // Phase 2: Collection specifications\n static forEach<T extends object = any, TItem extends object = any>(\n arrayField: keyof T,\n itemSpecification: Specification<TItem>,\n metadata?: SpecificationMetadata,\n ): ForEachSpecification<T, TItem> {\n return new ForEachSpecification<T, TItem>(\n arrayField,\n itemSpecification,\n metadata,\n );\n }\n\n static uniqueBy<T extends object = any>(\n arrayField: keyof T,\n keySelector: string | ((item: any) => any),\n metadata?: SpecificationMetadata,\n ): UniqueBySpecification<T> {\n return new UniqueBySpecification<T>(arrayField, keySelector, metadata);\n }\n\n static minLength<T extends object = any>(\n arrayField: keyof T,\n minLength: number,\n metadata?: SpecificationMetadata,\n ): MinLengthSpecification<T> {\n return new MinLengthSpecification<T>(arrayField, minLength, metadata);\n }\n\n static maxLength<T extends object = any>(\n arrayField: keyof T,\n maxLength: number,\n metadata?: SpecificationMetadata,\n ): MaxLengthSpecification<T> {\n return new MaxLengthSpecification<T>(arrayField, maxLength, metadata);\n }\n\n // Phase 2: Optional field handling\n static ifDefined<T extends object = any>(\n field: keyof T,\n specification: Specification<T>,\n metadata?: SpecificationMetadata,\n ): IfDefinedSpecification<T> {\n return new IfDefinedSpecification<T>(field, specification, metadata);\n }\n\n static ifNotNull<T extends object = any>(\n field: keyof T,\n specification: Specification<T>,\n metadata?: SpecificationMetadata,\n ): IfNotNullSpecification<T> {\n return new IfNotNullSpecification<T>(field, specification, metadata);\n }\n\n static ifExists<T extends object = any>(\n field: keyof T,\n specification: Specification<T>,\n metadata?: SpecificationMetadata,\n ): IfExistsSpecification<T> {\n return new IfExistsSpecification<T>(field, specification, metadata);\n }\n\n static withDefault<T extends object = any>(\n field: keyof T,\n defaultValue: any,\n specification: Specification<T>,\n metadata?: SpecificationMetadata,\n ): WithDefaultSpecification<T> {\n return new WithDefaultSpecification<T>(\n field,\n defaultValue,\n specification,\n metadata,\n );\n }\n\n // Phase 2: Form specifications\n static form<T extends object = any>(\n metadata?: SpecificationMetadata,\n ): FormSpecification<T> {\n return new FormSpecification<T>(metadata);\n }\n\n // Phase 2: Enhanced field specifications with metadata\n static fieldWithMetadata<T extends object = any>(\n field: keyof T,\n operator: ComparisonOperator,\n value: any,\n metadata: SpecificationMetadata,\n ): FieldSpecification<T> {\n return new FieldSpecification<T>(field, operator, value, metadata);\n }\n\n // Convenience methods with metadata support\n static equalsWithMetadata<T extends object = any>(\n field: keyof T,\n value: any,\n metadata: SpecificationMetadata,\n ): FieldSpecification<T> {\n return new FieldSpecification<T>(\n field,\n ComparisonOperator.EQUALS,\n value,\n metadata,\n );\n }\n\n static greaterThanWithMetadata<T extends object = any>(\n field: keyof T,\n value: any,\n metadata: SpecificationMetadata,\n ): FieldSpecification<T> {\n return new FieldSpecification<T>(\n field,\n ComparisonOperator.GREATER_THAN,\n value,\n metadata,\n );\n }\n}\n","import { Specification } from '@praxisui/specification-core';\nimport { AndSpecification } from '../specification/and-specification';\nimport { OrSpecification } from '../specification/or-specification';\nimport { NotSpecification } from '../specification/not-specification';\nimport { FieldSpecification } from '../specification/field-specification';\n\nexport class SpecificationUtils {\n /**\n * Simplifies a specification by removing redundant nesting and applying logical rules\n */\n static simplify<T extends object = any>(\n spec: Specification<T>,\n ): Specification<T> {\n if (spec instanceof AndSpecification) {\n return this.simplifyAnd(spec);\n }\n\n if (spec instanceof OrSpecification) {\n return this.simplifyOr(spec);\n }\n\n if (spec instanceof NotSpecification) {\n return this.simplifyNot(spec);\n }\n\n return spec;\n }\n\n private static simplifyAnd<T extends object = any>(\n spec: AndSpecification<T>,\n ): Specification<T> {\n const specs = spec.getSpecifications();\n const flattened: Specification<T>[] = [];\n\n // Flatten nested AND specifications\n for (const s of specs) {\n const simplified = this.simplify(s);\n if (simplified instanceof AndSpecification) {\n flattened.push(...simplified.getSpecifications());\n } else {\n flattened.push(simplified);\n }\n }\n\n // Remove duplicates and contradictions\n const unique = this.removeDuplicates(flattened);\n\n if (unique.length === 0) {\n throw new Error('Empty AND specification');\n }\n\n if (unique.length === 1) {\n return unique[0];\n }\n\n return new AndSpecification<T>(unique);\n }\n\n private static simplifyOr<T extends object = any>(\n spec: OrSpecification<T>,\n ): Specification<T> {\n const specs = spec.getSpecifications();\n const flattened: Specification<T>[] = [];\n\n // Flatten nested OR specifications\n for (const s of specs) {\n const simplified = this.simplify(s);\n if (simplified instanceof OrSpecification) {\n flattened.push(...simplified.getSpecifications());\n } else {\n flattened.push(simplified);\n }\n }\n\n // Remove duplicates\n const unique = this.removeDuplicates(flattened);\n\n if (unique.length === 0) {\n throw new Error('Empty OR specification');\n }\n\n if (unique.length === 1) {\n return unique[0];\n }\n\n return new OrSpecification<T>(unique);\n }\n\n private static simplifyNot<T extends object = any>(\n spec: NotSpecification<T>,\n ): Specification<T> {\n const inner = spec.getSpecification();\n\n // Double negation elimination: !!A = A\n if (inner instanceof NotSpecification) {\n return this.simplify(inner.getSpecification());\n }\n\n const simplified = this.simplify(inner);\n\n if (simplified === inner) {\n return spec;\n }\n\n return new NotSpecification<T>(simplified);\n }\n\n private static removeDuplicates<T extends object = any>(\n specs: Specification<T>[],\n ): Specification<T>[] {\n const unique: Specification<T>[] = [];\n const seen = new Set<string>();\n\n for (const spec of specs) {\n const key = JSON.stringify(spec.toJSON());\n if (!seen.has(key)) {\n seen.add(key);\n unique.push(spec);\n }\n }\n\n return unique;\n }\n\n /**\n * Checks if two specifications are logically equivalent\n */\n static areEquivalent<T extends object = any>(\n spec1: Specification<T>,\n spec2: Specification<T>,\n ): boolean {\n const json1 = JSON.stringify(this.simplify(spec1).toJSON());\n const json2 = JSON.stringify(this.simplify(spec2).toJSON());\n return json1 === json2;\n }\n\n /**\n * Gets all field references used in a specification\n */\n static getReferencedFields<T extends object = any>(\n spec: Specification<T>,\n ): Set<keyof T> {\n const fields = new Set<keyof T>();\n this.collectFields(spec, fields);\n return fields;\n }\n\n private static collectFields<T extends object = any>(\n spec: Specification<T>,\n fields: Set<keyof T>,\n ): void {\n if (spec instanceof FieldSpecification) {\n fields.add(spec.getField() as keyof T);\n } else if (\n spec instanceof AndSpecification ||\n spec instanceof OrSpecification\n ) {\n spec.getSpecifications().forEach((s) => this.collectFields(s, fields));\n } else if (spec instanceof NotSpecification) {\n this.collectFields(spec.getSpecification(), fields);\n }\n // Add more cases as needed for other specification types\n }\n\n /**\n * Validates a specification for common issues\n */\n static validate<T extends object = any>(\n spec: Specification<T>,\n ): ValidationResult {\n const errors: string[] = [];\n const warnings: string[] = [];\n\n try {\n this.validateSpecification(spec, errors, warnings);\n } catch (error) {\n errors.push(`Validation error: ${error}`);\n }\n\n return {\n isValid: errors.length === 0,\n errors,\n warnings,\n };\n }\n\n private static validateSpecification<T extends object = any>(\n spec: Specification<T>,\n errors: string[],\n warnings: string[],\n ): void {\n if (spec instanceof AndSpecification || spec instanceof OrSpecification) {\n const specs = spec.getSpecifications();\n if (specs.length === 0) {\n errors.push(\n `${spec.constructor.name} must have at least one specification`,\n );\n }\n specs.forEach((s) => this.validateSpecification(s, errors, warnings));\n } else if (spec instanceof NotSpecification) {\n this.validateSpecification(spec.getSpecification(), errors, warnings);\n }\n // Add more validation rules as needed\n }\n\n /**\n * Estimates the complexity of a specification (useful for performance analysis)\n */\n static getComplexity<T extends object = any>(spec: Specification<T>): number {\n if (spec instanceof FieldSpecification) {\n return 1;\n }\n\n if (spec instanceof AndSpecification || spec instanceof OrSpecification) {\n return spec\n .getSpecifications()\n .reduce((total, s) => total + this.getComplexity(s), 1);\n }\n\n if (spec instanceof NotSpecification) {\n return 1 + this.getComplexity(spec.getSpecification());\n }\n\n return 1; // Base complexity for unknown types\n }\n}\n\nexport interface ValidationResult {\n isValid: boolean;\n errors: string[];\n warnings: string[];\n}\n","// Utility functions for specifications\nexport * from './specification-factory';\nexport * from './specification-utils';","// Main entry point for @praxisui/specification library\nexport * from './specification';\nexport * from './dsl';\nexport * from './registry';\nexport * from './context';\nexport * from './utils';\n\n// Re-export commonly used classes for convenience\nexport { SpecificationFactory } from './utils/specification-factory';\nexport { DslParser } from './dsl/parser';\nexport { DslExporter } from './dsl/exporter';\nexport { FunctionRegistry } from './registry/function-registry';\nexport { TransformRegistry } from './registry/transform-registry';\n","/*\n * Public API Surface of @praxisui/specification\n */\n\nexport * from './lib/praxis-specification';\n\n// Specification exports\nexport * from './lib/specification';\n\n// DSL exports \nexport * from './lib/dsl';\n\n// Context exports\nexport * from './lib/context';\n\n// Registry exports\nexport * from './lib/registry';\n\n// Utils exports\nexport * from './lib/utils';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|