@routier/core 0.1.0-rc.2 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assertions/index.js +4 -15
- package/dist/assertions/index.js.map +1 -1
- package/dist/capabilities/index.js +58 -97
- package/dist/capabilities/index.js.map +1 -1
- package/dist/codegen/index.js +21 -36
- package/dist/codegen/index.js.map +1 -1
- package/dist/collections/index.js +49 -92
- package/dist/collections/index.js.map +1 -1
- package/dist/errors/index.js +4 -15
- package/dist/errors/index.js.map +1 -1
- package/dist/expressions/index.js +62 -93
- package/dist/expressions/index.js.map +1 -1
- package/dist/index.js +1683 -2302
- package/dist/index.js.map +1 -1
- package/dist/performance/index.js +4 -15
- package/dist/performance/index.js.map +1 -1
- package/dist/pipeline/index.js +30 -53
- package/dist/pipeline/index.js.map +1 -1
- package/dist/plugins/index.js +260 -361
- package/dist/plugins/index.js.map +1 -1
- package/dist/plugins/replication/OptimisticReplicationDbPlugin.d.ts +6 -5
- package/dist/plugins/replication/ReplicationDbPlugin.d.ts +5 -5
- package/dist/plugins/replication/types.d.ts +1 -0
- package/dist/plugins/types.d.ts +1 -1
- package/dist/results/index.js +11 -26
- package/dist/results/index.js.map +1 -1
- package/dist/schema/SchemaDefinition.d.ts +7 -6
- package/dist/schema/index.js +1073 -1490
- package/dist/schema/index.js.map +1 -1
- package/dist/schema/testSchemas.test.d.ts +14 -14
- package/dist/schema/types.d.ts +5 -3
- package/dist/types/index.js +0 -6
- package/dist/types/index.js.map +1 -1
- package/dist/utilities/index.js +61 -124
- package/dist/utilities/index.js.map +1 -1
- package/dist/utilities/types.d.ts +17 -2
- package/package.json +1 -1
- package/readme.md +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expressions/index.js","sources":["webpack://@routier/core/./src/assertions/index.ts","webpack://@routier/core/./src/expressions/parser.ts","webpack://@routier/core/./src/expressions/types.ts","webpack://@routier/core/./src/expressions/utils.ts","webpack://@routier/core/./src/utilities/dates.ts","webpack://@routier/core/./src/utilities/logger.ts","webpack://@routier/core/webpack/runtime/define_property_getters","webpack://@routier/core/webpack/runtime/has_own_property","webpack://@routier/core/webpack/runtime/make_namespace_object","webpack://@routier/core/./src/expressions/index.ts"],"sourcesContent":["import { isDate } from \"../utilities\";\n\nexport function assertDate(data: unknown): asserts data is Date {\n if (isDate(data) === false) {\n throw new TypeError('Value is not a Date');\n }\n}\n\nexport function assertIsNotNull<T>(data: T | null | undefined, message?: string | (() => string)): asserts data is NonNullable<T> {\n if (data == null) {\n if (message == null) {\n throw new TypeError('Assertion failed, data is null');\n }\n\n if (typeof message === \"string\") {\n throw new TypeError(message);\n }\n\n throw new TypeError(message());\n }\n}\n\nexport function assertIsArray<T>(data: unknown, message?: string): asserts data is T[] {\n if (!Array.isArray(data)) {\n throw new TypeError(message ?? 'Assertion failed, data is not of type Array');\n }\n}\n\nexport function assertString(data: unknown, message?: string): asserts data is string {\n if (typeof data !== \"string\") {\n throw new TypeError(message ?? 'Assertion failed, data is not of type String');\n }\n}\n\nexport function assertInstanceOf<T extends new (...args: any[]) => any>(value: unknown, Instance: T): asserts value is T {\n if (value instanceof Instance) {\n return;\n }\n\n if (value != null && typeof value === \"object\" && \"constructor\" in value) {\n throw new TypeError(`Value is not instance of type. Type: ${value.constructor.name}`);\n }\n\n throw new TypeError(`Value is not instance of type`);\n}","import { logger } from \"../utilities\";\nimport { assertString } from \"../assertions\";\nimport { CompiledSchema, SchemaTypes } from \"../schema\";\nimport { Expression, OperatorExpression, ComparatorExpression, ValueExpression, PropertyExpression, Filter, ParamsFilter, Operator } from \"./types\";\n\n// Pre-compiled regex patterns for better performance\nconst METHOD_REGEX = /([a-zA-Z0-9_.]+)\\.(startsWith|endsWith|includes)\\(([^)]+)\\)(\\s*(===|==|!==|!=)\\s*(true|false))?/;\nconst TRANSFORM_METHOD_REGEX = /([a-zA-Z0-9_.]+)\\.(toLowerCase|toUpperCase|toLocaleLowerCase|toLocaleUpperCase)\\(\\)\\.(startsWith|endsWith|includes)\\(((?:[^()]|\\([^)]*\\))*)\\)(\\s*(===|==|!==|!=)\\s*(true|false))?/;\nconst EQUALITY_REGEX = /([^=!<>]+?)\\s*(===|==|!==|!=)\\s*(.+)/;\nconst COMPARISON_REGEX = /([^=!<>]+?)\\s*(>=|<=|>|<)\\s*(.+)/;\nconst PARAM_PATH_REGEX = /^([a-zA-Z0-9_.]+)/;\n\n// Pre-compiled regex patterns for comment removal\nconst SINGLE_LINE_COMMENT_REGEX = /\\/\\/.*$/gm;\nconst MULTI_LINE_COMMENT_REGEX = /\\/\\*[\\s\\S]*?\\*\\//g;\nconst WHITESPACE_REGEX = /\\s+/g;\n\n// need to have negated + strict\nconst comparators: Record<string, ComparatorExpression> = {\n startsWith: new ComparatorExpression({\n comparator: \"starts-with\",\n negated: false,\n strict: false\n }),\n endsWith: new ComparatorExpression({\n comparator: \"ends-with\",\n negated: false,\n strict: false\n }),\n includes: new ComparatorExpression({\n comparator: \"includes\",\n negated: false,\n strict: false\n }),\n \"==\": new ComparatorExpression({\n comparator: \"equals\",\n negated: false,\n strict: false\n }),\n \"===\": new ComparatorExpression({\n comparator: \"equals\",\n negated: false,\n strict: true\n }),\n \"!=\": new ComparatorExpression({\n comparator: \"equals\",\n negated: true,\n strict: false\n }),\n \"!==\": new ComparatorExpression({\n comparator: \"equals\",\n negated: true,\n strict: true\n }),\n \">=\": new ComparatorExpression({\n comparator: \"greater-than-equals\",\n negated: false,\n strict: false\n }),\n \">==\": new ComparatorExpression({\n comparator: \"greater-than-equals\",\n negated: false,\n strict: true\n }),\n \"<=\": new ComparatorExpression({\n comparator: \"less-than-equals\",\n negated: false,\n strict: false\n }),\n \"<==\": new ComparatorExpression({\n comparator: \"less-than-equals\",\n negated: false,\n strict: true\n }),\n \">\": new ComparatorExpression({\n comparator: \"greater-than\",\n negated: false,\n strict: false\n }),\n \"<\": new ComparatorExpression({\n comparator: \"less-than\",\n negated: false,\n strict: false\n })\n} as const;\n\n// Optimized comparator lookup using Map\nconst COMPARATOR_MAP = new Map(Object.entries(comparators));\n\n// Error message constants\nconst ERROR_MESSAGES = {\n COMPARATOR_NOT_FOUND: (value: string) => `Cannot find comparator: ${value}`,\n PROPERTY_NOT_FOUND: (path: string) => `Error parsing query, could not find PropertyInfo for path: ${path}`,\n PARAM_PATH_NOT_FOUND: (value: string, params: any) => `Cannot find path in params for .where(). Make sure parameters are not used inline.\\r\\nPath: ${value}, Params: ${JSON.stringify(params)}`\n};\n\nconst STRINGIFIED_COMPARE_OPERATORS = [\"true\", \"false\"];\n\nconst parseUnknown = (value: unknown) => {\n assertString(value);\n return JSON.parse(value);\n}\n\nexport const combineExpressions = (...expressions: Expression[]): Expression => {\n\n if (expressions.length === 0) {\n throw new Error(\"combineExpressions requires at least 1 expression\");\n }\n\n\n if (expressions.length === 1) {\n return expressions[0];\n }\n\n // Start with the first expression\n let result = expressions[0];\n\n // Loop through remaining expressions and combine them\n for (let i = 1; i < expressions.length; i++) {\n result = new OperatorExpression({\n operator: \"&&\",\n left: result,\n right: expressions[i]\n });\n }\n\n return result;\n};\n\nexport const toExpression = <T extends any, P extends any>(schema: CompiledSchema<any>, fn: Filter<T> | ParamsFilter<T, P>, params?: P) => {\n const stringifiedFunction = fn.toString();\n\n try {\n\n // Optimized string parsing\n const arrowIndex = stringifiedFunction.indexOf('=>');\n if (arrowIndex === -1) {\n throw new Error(\"Invalid Function\");\n }\n\n const parameterNames = stringifiedFunction.substring(0, arrowIndex).trim();\n let expression = stringifiedFunction.substring(arrowIndex + 2).trim();\n\n // Remove JavaScript comments from the expression\n expression = expression\n .replace(SINGLE_LINE_COMMENT_REGEX, '') // Remove single-line comments\n .replace(MULTI_LINE_COMMENT_REGEX, '') // Remove multi-line comments\n .replace(WHITESPACE_REGEX, ' ') // Normalize whitespace\n .trim();\n\n let parameterData: { name: string, data: P } | undefined = undefined;\n\n if (params != null) {\n let name: string;\n if (parameterNames.includes(\"[\") && parameterNames.includes(\"]\")) {\n // Optimized parameter name extraction\n const commaIndex = parameterNames.indexOf(\",\");\n if (commaIndex !== -1) {\n const bracketIndex = parameterNames.indexOf(\"]\", commaIndex);\n if (bracketIndex !== -1) {\n name = parameterNames.substring(commaIndex + 1, bracketIndex).trim();\n }\n }\n }\n\n parameterData = {\n name,\n data: params\n };\n }\n\n return parseExpressionToTree(schema, expression, parameterData);\n } catch (error) {\n logger.warn(\"Error parsing expression\", {\n error,\n collectionName: schema.collectionName,\n params,\n selector: stringifiedFunction\n });\n return Expression.NOT_PARSABLE;\n }\n}\n\nconst parseExpressionToTree = <P extends any>(schema: CompiledSchema<any>, expression: string, params?: { name: string, data: P }) => {\n\n const parse = (exp: string): Expression => {\n // Remove any wrapping parentheses\n exp = exp.trim();\n if (exp.startsWith('(') && exp.endsWith(')')) {\n let depth = 0;\n let isWrapper = true;\n for (let i = 0; i < exp.length; i++) {\n const char = exp[i];\n if (char === '(') {\n depth++;\n } else if (char === ')') {\n depth--;\n if (depth < 0) break; // Early exit for invalid parentheses\n }\n // Early exit if we find a closing parenthesis that's not the last character\n if (depth === 0 && i !== exp.length - 1) {\n isWrapper = false;\n break; // Early exit\n }\n // Early exit if we go negative (invalid parentheses)\n if (depth < 0) {\n isWrapper = false;\n break;\n }\n }\n if (isWrapper) {\n exp = exp.slice(1, -1).trim();\n }\n }\n\n // Parse based on the operator precedence\n let operator: Operator | null = null, splitIndex = -1, depth = 0;\n\n for (let i = 0; i < exp.length - 1; i++) {\n const char = exp[i];\n if (char === '(') depth++;\n else if (char === ')') depth--;\n else if (depth === 0) {\n // Optimized operator detection using character comparison\n if (char === '&' && exp[i + 1] === '&') {\n operator = '&&';\n splitIndex = i;\n break; // AND takes precedence over OR\n } else if (operator === null && char === '|' && exp[i + 1] === '|') {\n operator = '||';\n splitIndex = i;\n }\n }\n }\n\n if (operator) {\n const left = exp.slice(0, splitIndex).trim();\n const right = exp.slice(splitIndex + 2).trim();\n\n return new OperatorExpression({\n operator,\n left: parse(left),\n right: parse(right)\n });\n }\n\n // If no operator, try to parse as a condition\n return parseCondition(schema, exp, params);\n }\n\n return parse(expression);\n}\n\nconst convertAndAssignValue = (valueExpression: unknown, propertyPathExpression: unknown) => {\n\n assertIsPropertyPathExpression(propertyPathExpression);\n\n assertIsValueExpression(valueExpression)\n\n const propertyType = propertyPathExpression.property.type;\n\n valueExpression.value = converters[propertyType](valueExpression.value);\n}\n\nconst converters: Record<SchemaTypes, (value: unknown) => unknown> = {\n Array: v => v,\n Boolean: v => v == null ? v : Boolean(v),\n Computed: v => v,\n Date: v => v,\n Definition: v => v,\n Function: v => v,\n Number: v => v == null ? v : Number(v),\n Object: v => v,\n String: v => v == null ? v : String(v)\n};\n\nconst isExpression = (value: unknown): value is Expression => {\n return typeof value === \"object\" && value !== null && \"type\" in value;\n}\n\nfunction assertIsExpression(value: unknown): asserts value is Expression {\n if (isExpression(value) === false) {\n throw new Error(\"Assertion Failed: Value is not a Expression\")\n }\n}\n\nfunction assertIsPropertyPathExpression(value: unknown): asserts value is PropertyExpression {\n\n assertIsExpression(value);\n\n if (!(\"property\" in value)) {\n throw new Error(\"Assertion Failed: Value is not a PropertyPathExpression\")\n }\n}\n\nfunction assertIsValueExpression(value: unknown): asserts value is ValueExpression {\n\n assertIsExpression(value);\n\n if (!(\"value\" in value)) {\n throw new Error(\"Assertion Failed: Value is not a ValueExpression\")\n }\n}\n\n// Helper function to detect if a string is a property path\nconst isPropertyPath = (value: string, params?: { name: string, data: any }): boolean => {\n // Check for dot notation (e.g., entity.name)\n if (value.includes('.') && value.match(/^[a-zA-Z0-9_.]+$/) !== null) {\n return true;\n }\n // Check for bracket notation with literal strings (e.g., entity[\"name\"], entity['name'], or entity[\\\"name\\\"] with escaped quotes)\n const literalBracketPattern = /^[a-zA-Z_$][a-zA-Z0-9_$]*(\\[\\\\?[\"'][^\"']+\\\\?[\"']\\])+$/;\n if (literalBracketPattern.test(value)) {\n return true;\n }\n // Check for bracket notation with parameter paths (e.g., entity[p.name], entity[params.property])\n if (params && value.includes('[') && value.includes(']')) {\n const bracketMatch = value.match(/\\[([^\\]]+)\\]/);\n if (bracketMatch) {\n const bracketContent = bracketMatch[1].trim();\n // Check if it's a parameter path - should start with params.name followed by dot, or be just params.name\n const isParamPath = bracketContent.startsWith(params.name + '.') || bracketContent === params.name;\n if (isParamPath || (bracketContent.includes('.') && bracketContent.match(PARAM_PATH_REGEX))) {\n return true;\n }\n }\n }\n return false;\n};\n\n// Helper function to determine if we need to swap the operator for reversed comparisons\nconst getSwappedOperator = (operator: string): string => {\n const swapMap: Record<string, string> = {\n '>': '<',\n '<': '>',\n '>=': '<=',\n '<=': '>='\n };\n return swapMap[operator] || operator;\n};\n\nconst parseCondition = <P extends any>(schema: CompiledSchema<any>, expression: string, params?: { name: string, data: P }): Expression => {\n\n // Optimized string operations - single trim operation\n const trimmed = expression.trim();\n const isNegation = trimmed.startsWith('!');\n const finalExpression = isNegation ? trimmed.slice(1).trim() : trimmed;\n\n // Enhanced pattern matching for complex expressions\n const methodMatch = finalExpression.match(METHOD_REGEX);\n const transformMethodMatch = finalExpression.match(TRANSFORM_METHOD_REGEX);\n const equalityMatch = finalExpression.match(EQUALITY_REGEX);\n const comparisonMatch = finalExpression.match(COMPARISON_REGEX);\n\n if (methodMatch) {\n // Handle .startsWith or .endsWith\n const comparator = getComparator(methodMatch[2]);\n\n if (isNegation) {\n comparator.negated = isNegation;\n }\n\n // Check if the left side is a parameter path\n const leftSide = methodMatch[1];\n const rightSide = methodMatch[3];\n\n if (params && leftSide.startsWith(params.name)) {\n // This is a parameter path on the left side (e.g., params.distinctPlayers.includes(entity.playerId))\n // For includes method, we need to swap left and right sides\n if (methodMatch[2] === 'includes') {\n\n const property = getProperty(schema, rightSide, params);\n const value = getValue(leftSide, params); // retrieve the original value\n const serializer = property.property.valueSerializer;\n comparator.left = serializer ? getValue(String(property.property.valueSerializer(parseUnknown(value.value)))) : value;\n comparator.right = property;\n } else {\n // For other methods, return NOT_PARSABLE for now\n return Expression.NOT_PARSABLE;\n }\n } else {\n // Normal case: property on left, value on right\n const property = getProperty(schema, leftSide, params);\n const serializer = property.property.valueSerializer;\n const value = getValue(rightSide, params); // retrieve the original value\n\n comparator.left = property;\n comparator.right = serializer ? getValue(String(property.property.valueSerializer(parseUnknown(value.value)))) : value;\n }\n\n // If the comparison is explicitly to false, mark it as negated\n if (methodMatch[6] === \"false\") {\n comparator.negated = true;\n }\n\n return comparator;\n }\n\n // Check for transformations on the value side (right side of comparison) - check this FIRST\n const valueTransformMatch = finalExpression.match(/([^=!<>]+?)\\s*(===|==|!==|!=)\\s*([^)]+)\\.(toLowerCase|toUpperCase|toLocaleLowerCase|toLocaleUpperCase)\\(\\)/);\n if (valueTransformMatch) {\n const comparator = getComparator(valueTransformMatch[2]);\n\n if (isNegation) {\n comparator.negated = isNegation;\n }\n\n const property = getProperty(schema, valueTransformMatch[1].trim(), params);\n const serializer = property.property.valueSerializer;\n const value = getValue(valueTransformMatch[3], params); // retrieve the original value\n\n // Create the property expression for the left side (no transformer)\n const propertyExpression = property;\n\n // Create a ValueExpression for the right side with transformer\n const valueExpression = serializer ? getValue(String(property.property.valueSerializer(parseUnknown(value.value)))) : value;\n\n // Set transformer and locale based on the method\n const method = valueTransformMatch[4];\n if (method === 'toLowerCase' || method === 'toLocaleLowerCase') {\n valueExpression.transformer = 'to-lower-case';\n if (method === 'toLocaleLowerCase') {\n valueExpression.locale = 'en-US';\n }\n } else {\n valueExpression.transformer = 'to-upper-case';\n if (method === 'toLocaleUpperCase') {\n valueExpression.locale = 'en-US';\n }\n }\n\n comparator.left = propertyExpression;\n comparator.right = valueExpression;\n\n return comparator;\n }\n\n if (transformMethodMatch) {\n // Handle .toLowerCase or .toUpperCase on the property side\n const comparator = getComparator(transformMethodMatch[3]); // e.g., startsWith, endsWith, includes\n\n if (isNegation) {\n comparator.negated = isNegation;\n }\n\n // Create the property expression for the left side with transformer\n const property = getProperty(schema, transformMethodMatch[1], params);\n\n // Set transformer and locale based on the method\n const method = transformMethodMatch[2];\n if (method === 'toLowerCase' || method === 'toLocaleLowerCase') {\n property.transformer = 'to-lower-case';\n if (method === 'toLocaleLowerCase') {\n property.locale = 'en-US'; // Default locale, could be extracted from method call\n }\n } else {\n property.transformer = 'to-upper-case';\n if (method === 'toLocaleUpperCase') {\n property.locale = 'en-US'; // Default locale, could be extracted from method call\n }\n }\n\n // Create a ValueExpression for the right side\n let value = getValue(transformMethodMatch[4], params);\n\n // Check if the value also has a transformation (but only if it's not already handled by value-side check)\n const valueTransformMatch = transformMethodMatch[4].match(/^([^)]+)\\.(toLowerCase|toUpperCase|toLocaleLowerCase|toLocaleUpperCase)\\(\\)$/);\n\n if (valueTransformMatch) {\n // Create a new ValueExpression with the base value and transformer\n value = new ValueExpression({\n value: valueTransformMatch[1].replace(/^[\"']|[\"']$/g, '') // Remove quotes\n });\n\n // Set transformer and locale based on the method\n const valueMethod = valueTransformMatch[2];\n if (valueMethod === 'toLowerCase' || valueMethod === 'toLocaleLowerCase') {\n value.transformer = 'to-lower-case';\n if (valueMethod === 'toLocaleLowerCase') {\n value.locale = 'en-US'; // Default locale\n }\n } else {\n value.transformer = 'to-upper-case';\n if (valueMethod === 'toLocaleUpperCase') {\n value.locale = 'en-US'; // Default locale\n }\n }\n }\n\n const serializer = property.property.valueSerializer;\n\n comparator.left = property;\n comparator.right = serializer ? getValue(String(property.property.valueSerializer(parseUnknown(value.value)))) : value;\n\n // If the comparison is explicitly to false, mark it as negated\n if (transformMethodMatch[7] === \"false\") {\n comparator.negated = true;\n }\n\n return comparator;\n }\n\n if (equalityMatch) {\n const left = equalityMatch[1].trim();\n const operator = equalityMatch[2];\n const right = equalityMatch[3].trim();\n\n const leftIsProperty = isPropertyPath(left, params);\n const rightIsProperty = isPropertyPath(right, params);\n\n // Determine which side is the property and which is the value\n let propertySide: string, valueSide: string, finalOperator: string;\n\n if (leftIsProperty && !rightIsProperty) {\n // Normal case: property === value\n propertySide = left;\n valueSide = right;\n finalOperator = operator;\n } else if (!leftIsProperty && rightIsProperty) {\n // Reversed case: value === property\n propertySide = right;\n valueSide = left;\n finalOperator = operator;\n } else {\n // Both sides look like properties or neither does - assume left is property\n propertySide = left;\n valueSide = right;\n finalOperator = operator;\n }\n\n const comparator = getComparator(finalOperator);\n\n if (isNegation) {\n comparator.negated = isNegation;\n }\n\n const property = getProperty(schema, propertySide, params);\n const value = getValue(valueSide, params);\n const serializer = property.property.valueSerializer;\n\n comparator.left = property;\n comparator.right = serializer ? getValue(String(property.property.valueSerializer(parseUnknown(value.value)))) : value;\n\n convertAndAssignValue(comparator.right, comparator.left);\n\n return comparator;\n }\n\n if (comparisonMatch) {\n const left = comparisonMatch[1].trim();\n const operator = comparisonMatch[2];\n const right = comparisonMatch[3].trim();\n\n const leftIsProperty = isPropertyPath(left, params);\n const rightIsProperty = isPropertyPath(right, params);\n\n // Determine which side is the property and which is the value\n let propertySide: string, valueSide: string, finalOperator: string;\n\n if (leftIsProperty && !rightIsProperty) {\n // Normal case: property > value\n propertySide = left;\n valueSide = right;\n finalOperator = operator;\n } else if (!leftIsProperty && rightIsProperty) {\n // Reversed case: value > property -> property < value\n propertySide = right;\n valueSide = left;\n finalOperator = getSwappedOperator(operator);\n } else {\n // Both sides look like properties or neither does - assume left is property\n propertySide = left;\n valueSide = right;\n finalOperator = operator;\n }\n\n const comparator = getComparator(finalOperator);\n\n if (isNegation) {\n comparator.negated = isNegation;\n }\n\n const property = getProperty(schema, propertySide, params);\n const value = getValue(valueSide, params);\n const serializer = property.property.valueSerializer;\n\n comparator.left = property;\n comparator.right = serializer ? getValue(String(property.property.valueSerializer(parseUnknown(value.value)))) : value;\n\n convertAndAssignValue(comparator.right, comparator.left);\n\n return comparator;\n }\n\n // Check for standalone property reference (truthy comparison)\n // Pattern: property name only (e.g., \"w.inStock\" -> w.inStock === true)\n const standalonePropertyMatch = finalExpression.match(/^[a-zA-Z_$][a-zA-Z0-9_$]*(\\.[a-zA-Z_$][a-zA-Z0-9_$]*)*$/);\n if (standalonePropertyMatch && isPropertyPath(finalExpression, params)) {\n const comparator = getComparator('===');\n\n if (isNegation) {\n comparator.negated = isNegation;\n }\n\n const property = getProperty(schema, finalExpression, params);\n const value = getValue('true', params);\n const serializer = property.property.valueSerializer;\n\n comparator.left = property;\n // need to parse the value so it matches what the serializer expects\n comparator.right = serializer ? getValue(String(property.property.valueSerializer(parseUnknown(value.value)))) : value;\n\n return comparator;\n }\n\n // If we get here, the expression is too complex for the current parser\n // This is expected for complex real-world expressions\n throw new Error(`Unsupported expression format: ${finalExpression}`);\n}\n\nconst getComparator = (value: string): ComparatorExpression => {\n\n const comparator = COMPARATOR_MAP.get(value);\n\n if (comparator == null) {\n throw new Error(ERROR_MESSAGES.COMPARATOR_NOT_FOUND(value))\n }\n\n // Return a new instance to avoid modifying the cached one\n return new ComparatorExpression({\n comparator: comparator.comparator,\n negated: comparator.negated,\n strict: comparator.strict\n });\n}\n\nconst getValue = <P extends any>(value: string, params?: { name: string, data: P }): ValueExpression => {\n\n // Early return for string literals\n if (value.startsWith(\"\\'\") || value.startsWith(\"\\\"\")) {\n return new ValueExpression({\n value: value.replace(/\\\"|\\'/g, \"\")\n });\n }\n\n // Early return for null/undefined\n if (value === \"null\") {\n return new ValueExpression({ value: null });\n }\n\n if (value === \"undefined\" || value === \"void 0\") {\n return new ValueExpression({ value: undefined });\n }\n\n // Optimized number parsing with early return\n const numValue = +value;\n if (!isNaN(numValue) && isFinite(numValue)) {\n return new ValueExpression({ value: numValue });\n }\n\n // Handle parameter paths if params are provided\n if (params != null) {\n // Check if this is a parameter path (starts with params.name)\n if (value.startsWith(params.name)) {\n return new ValueExpression({\n value: getValueFromParams(value, params)\n });\n }\n\n // Check if this is a parameter path without the params prefix\n if (value.includes('.')) {\n // Try to extract the parameter path\n const paramMatch = value.match(PARAM_PATH_REGEX);\n if (paramMatch) {\n const potentialParamPath = paramMatch[1];\n try {\n const paramValue = getValueFromParams(`${params.name}.${potentialParamPath}`, params);\n return new ValueExpression({ value: paramValue });\n } catch (e) {\n // Not a parameter path, continue with normal parsing\n }\n }\n }\n }\n\n if (STRINGIFIED_COMPARE_OPERATORS.includes(value)) {\n return new ValueExpression({ value });\n }\n\n if (isNaN(numValue)) {\n // value is a variable passed in by the dev, we cannot evaluate it's value\n // need to fallback to select all by throwing an error\n throw new Error(`Cannot derive value from variable, please pass parameters into the expression.\n\nExample: .where(([x, params]) => x.id === params.id, { id: someVar.id })\nIssue At: ${value}`);\n }\n\n // Default case: return as-is\n return new ValueExpression({ value });\n}\n\nconst getValueFromParams = <P extends any>(value: string, params: { name: string, data: P }) => {\n\n const split = value.split('.');\n\n // Early exit for invalid paths\n if (split.length === 1) {\n throw new Error(ERROR_MESSAGES.PARAM_PATH_NOT_FOUND(value, params.data))\n }\n\n let result = params.data as any;\n\n // For nested params - start from index 1 to skip the params prefix\n for (let i = 1; i < split.length; i++) {\n const name = split[i];\n\n if (name in result) {\n result = result[name];\n continue;\n }\n\n throw new Error(ERROR_MESSAGES.PARAM_PATH_NOT_FOUND(value, params.data))\n }\n\n return result;\n}\n\nconst getProperty = <P extends any>(schema: CompiledSchema<any>, value: string, params?: { name: string, data: P }): PropertyExpression => {\n let pathString: string;\n\n // Handle bracket notation (e.g., entity[\"name\"], entity['name'], entity[p.name], or entity[\\\"name\\\"] with escaped quotes)\n if (value.includes('[') && value.includes(']')) {\n // First try to match literal string brackets: [\"name\"], ['name'], [\\\"name\\\"], [\\'name\\']\n const literalBracketMatches = value.matchAll(/\\[\\\\?[\"']([^\"']+)\\\\?[\"']\\]/g);\n const pathParts: string[] = [];\n let foundLiteral = false;\n\n for (const match of literalBracketMatches) {\n // match[1] is the property name inside the brackets\n const propName = match[1];\n if (propName) {\n pathParts.push(propName);\n foundLiteral = true;\n }\n }\n\n // If no literal matches found, try parameter path in brackets (e.g., [p.name])\n if (!foundLiteral && params) {\n // Match brackets containing parameter paths: [p.name], [params.property], etc.\n const bracketParamMatch = value.match(/\\[([^\\]]+)\\]/);\n if (bracketParamMatch) {\n const bracketContent = bracketParamMatch[1].trim();\n\n // Check if this is a parameter path\n // It should start with params.name (e.g., \"p\") followed by a dot, or be just params.name\n const isParamPath = bracketContent.startsWith(params.name + '.') || bracketContent === params.name;\n\n if (isParamPath || (bracketContent.includes('.') && bracketContent.match(PARAM_PATH_REGEX))) {\n try {\n // Try to resolve as a parameter path\n let paramPath: string;\n if (bracketContent.startsWith(params.name + '.') || bracketContent === params.name) {\n // Already has params.name prefix\n paramPath = bracketContent;\n } else {\n // Add params.name prefix\n const paramMatch = bracketContent.match(PARAM_PATH_REGEX);\n paramPath = paramMatch\n ? `${params.name}.${paramMatch[1]}`\n : `${params.name}.${bracketContent}`;\n }\n\n const resolvedValue = getValueFromParams(paramPath, params);\n // The resolved value should be the property name\n if (typeof resolvedValue === 'string') {\n pathParts.push(resolvedValue);\n } else {\n throw new Error(ERROR_MESSAGES.PROPERTY_NOT_FOUND(value));\n }\n } catch (e) {\n // Not a valid parameter path, continue to error\n throw new Error(ERROR_MESSAGES.PROPERTY_NOT_FOUND(value));\n }\n } else {\n throw new Error(ERROR_MESSAGES.PROPERTY_NOT_FOUND(value));\n }\n } else {\n throw new Error(ERROR_MESSAGES.PROPERTY_NOT_FOUND(value));\n }\n }\n\n if (pathParts.length === 0) {\n throw new Error(ERROR_MESSAGES.PROPERTY_NOT_FOUND(value));\n }\n\n pathString = pathParts.join(\".\");\n } else if (value.includes('.')) {\n // Handle dot notation (e.g., entity.name)\n const pathSplit = value.split(/[?!.]/g).slice(1);\n pathString = pathSplit.join(\".\");\n } else {\n throw new Error(ERROR_MESSAGES.PROPERTY_NOT_FOUND(value));\n }\n\n // Early exit if no path found\n if (!pathString) {\n throw new Error(ERROR_MESSAGES.PROPERTY_NOT_FOUND(value));\n }\n\n const found = schema.properties.find(w => w.getAssignmentPath() == pathString);\n\n if (found == null) {\n throw new Error(ERROR_MESSAGES.PROPERTY_NOT_FOUND(value));\n }\n\n return new PropertyExpression({ property: found });\n}\n\n\n","import { QueryOptionExecutionTarget } from \"../plugins\";\nimport { PropertyInfo } from \"../schema\";\n\nexport type ParsedExpression = {\n expression: Expression;\n // Will be memory when trying to query on an untracked computed property or on a function\n executionTarget: QueryOptionExecutionTarget;\n}\n\n/**\n * The base class for all expression types.\n */\nexport abstract class Expression {\n /** The type of the expression. */\n abstract readonly type: ExpressionType;\n /** The left-hand side of the expression (if applicable). */\n left?: Expression;\n /** The right-hand side of the expression (if applicable). */\n right?: Expression;\n\n constructor(left?: Expression, right?: Expression) {\n this.left = left;\n this.right = right;\n }\n\n static get EMPTY() {\n return new EmptyExpression();\n }\n\n static get NOT_PARSABLE() {\n return new NotParsableExpression();\n }\n\n static isEmpty(expression: Expression) {\n return expression.type === \"empty\" || expression instanceof EmptyExpression;\n }\n\n static isNotParsable(expression: Expression) {\n return expression.type === \"not-parsable\" || expression instanceof NotParsableExpression;\n }\n}\n\nexport class EmptyExpression extends Expression {\n readonly type = \"empty\" as const;\n}\n\nexport class NotParsableExpression extends Expression {\n readonly type = \"not-parsable\" as const;\n}\n\n/**\n * A class representing a comparison operation (e.g., equals, greater-than).\n */\nexport class ComparatorExpression extends Expression {\n /** The type of the expression (always 'comparator'). */\n readonly type = \"comparator\" as const;\n /** The comparator operation (e.g., equals, greater-than). */\n comparator: Comparator;\n /** Whether the comparison is negated (e.g., not equals). */\n negated: boolean;\n /** Whether the comparison is strict (type-sensitive). */\n strict: boolean;\n\n constructor(\n options: {\n comparator: Comparator,\n negated: boolean,\n strict: boolean,\n left?: Expression,\n right?: Expression\n }\n ) {\n super(options.left, options.right);\n this.comparator = options.comparator;\n this.negated = options.negated;\n this.strict = options.strict;\n }\n}\n\n/**\n * A class representing a logical operator (e.g., &&, ||).\n */\nexport class OperatorExpression extends Expression {\n /** The type of the expression (always 'operator'). */\n readonly type = \"operator\" as const;\n /** The logical operator. */\n operator: Operator;\n\n constructor(options: { operator: Operator, left?: Expression, right?: Expression }) {\n super(options.left, options.right);\n this.operator = options.operator;\n }\n}\n\n/**\n * A class representing a property path.\n */\nexport class PropertyExpression extends Expression {\n /** The type of the expression (always 'property'). */\n readonly type = \"property\" as const;\n /** The property info for the path. */\n property: PropertyInfo<any>;\n transformer: Transformer | null = null;\n locale: string | null = null;\n\n constructor(options: { property: PropertyInfo<any> }) {\n super();\n this.property = options.property;\n }\n}\n\n/**\n * A class representing a literal value.\n */\nexport class ValueExpression extends Expression {\n /** The type of the expression (always 'value'). */\n readonly type = \"value\" as const;\n /** The literal value. */\n value: unknown;\n\n transformer: Transformer | null = null;\n locale: string | null = null;\n\n constructor(options: {\n value: unknown\n }) {\n super();\n this.value = options.value;\n }\n}\n\n\n/**\n * The set of possible expression types.\n */\nexport type ExpressionType = \"operator\" | \"comparator\" | \"property\" | \"value\" | \"empty\" | \"not-parsable\";\n\n/**\n * Supported value transformations that can be applied to values.\n */\nexport type Transformer = \"to-lower-case\" | \"to-upper-case\";\n\n/**\n * Supported comparator operations for expressions.\n */\nexport type Comparator =\n | \"equals\"\n | \"starts-with\"\n | \"includes\"\n | \"ends-with\"\n | \"greater-than\"\n | \"greater-than-equals\"\n | \"less-than\"\n | \"less-than-equals\";\n\n/**\n * Supported logical operators for expressions.\n */\nexport type Operator = \"&&\" | \"||\";\n\n/**\n * A function that filters a value of type T and returns a boolean.\n */\nexport type Filter<T extends any> = (value: T) => boolean;\n\n/**\n * A function that filters a value of type T with additional parameters P.\n */\nexport type ParamsFilter<T extends any, P> = (payload: [T, P]) => boolean;\n\n/**\n * A filter that can be either a simple filter or a parameterized filter.\n */\nexport type CompositeFilter<T extends any, P = never> = Filter<T> | ParamsFilter<T, P>;\n\n/**\n * An object that can be filtered using a composite filter and optional parameters.\n */\nexport type Filterable<T extends any, P = any> = {\n /** The filter function. */\n filter: CompositeFilter<T, P>;\n /** Optional parameters for the filter. */\n params?: P;\n}","import { PropertyInfo } from \"../schema\";\nimport { Expression, PropertyExpression } from \"./types\";\n\n/**\n * Extracts all properties referenced in an expression\n * @param expression The expression to analyze\n * @returns Array of PropertyInfo objects referenced in the expression\n */\nexport function getProperties(expression: Expression): PropertyInfo<any>[] {\n const properties: PropertyInfo<any>[] = [];\n\n function traverse(expr: Expression) {\n // If this is a property expression, add it to our collection\n if (expr.type === \"property\") {\n properties.push((expr as PropertyExpression).property);\n }\n\n // Traverse left and right expressions if they exist\n if (expr.left) {\n traverse(expr.left);\n }\n if (expr.right) {\n traverse(expr.right);\n }\n }\n\n traverse(expression);\n return properties;\n}\n\nexport function isPropertyExpression(expression: Expression): expression is PropertyExpression {\n return expression.type === \"property\";\n}\n\nexport function forEach(expression: Expression, callback: (expression: Expression) => boolean) {\n function traverse(expr: Expression): boolean {\n // Call the callback for this expression\n // If callback returns false, stop traversing\n if (!callback(expr)) {\n return false;\n }\n\n // Traverse left and right expressions if they exist\n if (expr.left) {\n if (!traverse(expr.left)) {\n return false;\n }\n }\n if (expr.right) {\n if (!traverse(expr.right)) {\n return false;\n }\n }\n\n return true;\n }\n\n traverse(expression);\n}","export const isDate = (data: unknown): data is Date => {\n if (data == null) {\n return false;\n }\n\n if (typeof data !== \"object\") {\n return false;\n }\n\n return data instanceof Date;\n}","const isDevelopment = (): boolean => {\n if (typeof process === 'undefined' || process.env == null) {\n return false;\n }\n const env = process.env.NODE_ENV?.toLowerCase();\n return env === 'dev' || env === 'development' || env === 'test';\n};\n\ntype LogMethods = \"log\" | \"info\" | \"warn\" | \"error\" | \"debug\" | \"table\";\nconst shouldLog = isDevelopment();\nconst tryLog = (type: LogMethods, ...args: unknown[]) => {\n if (shouldLog) {\n console[type](...args);\n }\n};\n\nexport const logger = {\n log: (...args: unknown[]): void => {\n tryLog(\"log\", ...args);\n },\n info: (...args: unknown[]): void => {\n tryLog(\"info\", ...args);\n },\n warn: (...args: unknown[]): void => {\n tryLog(\"warn\", ...args);\n },\n error: (...args: unknown[]): void => {\n tryLog(\"error\", ...args);\n },\n debug: (...args: unknown[]): void => {\n tryLog(\"debug\", ...args);\n },\n table: (...args: unknown[]): void => {\n tryLog(\"table\", ...args);\n },\n};\n\n","__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n }\n }\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","export * from './parser';\nexport * from './types';\nexport * from './utils';"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"expressions/index.js","sources":["webpack://@routier/core/./src/assertions/index.ts","webpack://@routier/core/./src/expressions/parser.ts","webpack://@routier/core/./src/expressions/types.ts","webpack://@routier/core/./src/expressions/utils.ts","webpack://@routier/core/./src/utilities/dates.ts","webpack://@routier/core/./src/utilities/logger.ts","webpack://@routier/core/webpack/runtime/define_property_getters","webpack://@routier/core/webpack/runtime/has_own_property","webpack://@routier/core/webpack/runtime/make_namespace_object","webpack://@routier/core/./src/expressions/index.ts"],"sourcesContent":["import { isDate } from \"../utilities\";\n\nexport function assertDate(data: unknown): asserts data is Date {\n if (isDate(data) === false) {\n throw new TypeError('Value is not a Date');\n }\n}\n\nexport function assertIsNotNull<T>(data: T | null | undefined, message?: string | (() => string)): asserts data is NonNullable<T> {\n if (data == null) {\n if (message == null) {\n throw new TypeError('Assertion failed, data is null');\n }\n\n if (typeof message === \"string\") {\n throw new TypeError(message);\n }\n\n throw new TypeError(message());\n }\n}\n\nexport function assertIsArray<T>(data: unknown, message?: string): asserts data is T[] {\n if (!Array.isArray(data)) {\n throw new TypeError(message ?? 'Assertion failed, data is not of type Array');\n }\n}\n\nexport function assertString(data: unknown, message?: string): asserts data is string {\n if (typeof data !== \"string\") {\n throw new TypeError(message ?? 'Assertion failed, data is not of type String');\n }\n}\n\nexport function assertInstanceOf<T extends new (...args: any[]) => any>(value: unknown, Instance: T): asserts value is T {\n if (value instanceof Instance) {\n return;\n }\n\n if (value != null && typeof value === \"object\" && \"constructor\" in value) {\n throw new TypeError(`Value is not instance of type. Type: ${value.constructor.name}`);\n }\n\n throw new TypeError(`Value is not instance of type`);\n}","import { logger } from \"../utilities\";\nimport { assertString } from \"../assertions\";\nimport { CompiledSchema, SchemaTypes } from \"../schema\";\nimport { Expression, OperatorExpression, ComparatorExpression, ValueExpression, PropertyExpression, Filter, ParamsFilter, Operator } from \"./types\";\n\n// Pre-compiled regex patterns for better performance\nconst METHOD_REGEX = /([a-zA-Z0-9_.]+)\\.(startsWith|endsWith|includes)\\(([^)]+)\\)(\\s*(===|==|!==|!=)\\s*(true|false))?/;\nconst TRANSFORM_METHOD_REGEX = /([a-zA-Z0-9_.]+)\\.(toLowerCase|toUpperCase|toLocaleLowerCase|toLocaleUpperCase)\\(\\)\\.(startsWith|endsWith|includes)\\(((?:[^()]|\\([^)]*\\))*)\\)(\\s*(===|==|!==|!=)\\s*(true|false))?/;\nconst EQUALITY_REGEX = /([^=!<>]+?)\\s*(===|==|!==|!=)\\s*(.+)/;\nconst COMPARISON_REGEX = /([^=!<>]+?)\\s*(>=|<=|>|<)\\s*(.+)/;\nconst PARAM_PATH_REGEX = /^([a-zA-Z0-9_.]+)/;\n\n// Pre-compiled regex patterns for comment removal\nconst SINGLE_LINE_COMMENT_REGEX = /\\/\\/.*$/gm;\nconst MULTI_LINE_COMMENT_REGEX = /\\/\\*[\\s\\S]*?\\*\\//g;\nconst WHITESPACE_REGEX = /\\s+/g;\n\n// need to have negated + strict\nconst comparators: Record<string, ComparatorExpression> = {\n startsWith: new ComparatorExpression({\n comparator: \"starts-with\",\n negated: false,\n strict: false\n }),\n endsWith: new ComparatorExpression({\n comparator: \"ends-with\",\n negated: false,\n strict: false\n }),\n includes: new ComparatorExpression({\n comparator: \"includes\",\n negated: false,\n strict: false\n }),\n \"==\": new ComparatorExpression({\n comparator: \"equals\",\n negated: false,\n strict: false\n }),\n \"===\": new ComparatorExpression({\n comparator: \"equals\",\n negated: false,\n strict: true\n }),\n \"!=\": new ComparatorExpression({\n comparator: \"equals\",\n negated: true,\n strict: false\n }),\n \"!==\": new ComparatorExpression({\n comparator: \"equals\",\n negated: true,\n strict: true\n }),\n \">=\": new ComparatorExpression({\n comparator: \"greater-than-equals\",\n negated: false,\n strict: false\n }),\n \">==\": new ComparatorExpression({\n comparator: \"greater-than-equals\",\n negated: false,\n strict: true\n }),\n \"<=\": new ComparatorExpression({\n comparator: \"less-than-equals\",\n negated: false,\n strict: false\n }),\n \"<==\": new ComparatorExpression({\n comparator: \"less-than-equals\",\n negated: false,\n strict: true\n }),\n \">\": new ComparatorExpression({\n comparator: \"greater-than\",\n negated: false,\n strict: false\n }),\n \"<\": new ComparatorExpression({\n comparator: \"less-than\",\n negated: false,\n strict: false\n })\n} as const;\n\n// Optimized comparator lookup using Map\nconst COMPARATOR_MAP = new Map(Object.entries(comparators));\n\n// Error message constants\nconst ERROR_MESSAGES = {\n COMPARATOR_NOT_FOUND: (value: string) => `Cannot find comparator: ${value}`,\n PROPERTY_NOT_FOUND: (path: string) => `Error parsing query, could not find PropertyInfo for path: ${path}`,\n PARAM_PATH_NOT_FOUND: (value: string, params: any) => `Cannot find path in params for .where(). Make sure parameters are not used inline.\\r\\nPath: ${value}, Params: ${JSON.stringify(params)}`\n};\n\nconst STRINGIFIED_COMPARE_OPERATORS = [\"true\", \"false\"];\n\nconst parseUnknown = (value: unknown) => {\n assertString(value);\n return JSON.parse(value);\n}\n\nexport const combineExpressions = (...expressions: Expression[]): Expression => {\n\n if (expressions.length === 0) {\n throw new Error(\"combineExpressions requires at least 1 expression\");\n }\n\n\n if (expressions.length === 1) {\n return expressions[0];\n }\n\n // Start with the first expression\n let result = expressions[0];\n\n // Loop through remaining expressions and combine them\n for (let i = 1; i < expressions.length; i++) {\n result = new OperatorExpression({\n operator: \"&&\",\n left: result,\n right: expressions[i]\n });\n }\n\n return result;\n};\n\nexport const toExpression = <T extends any, P extends any>(schema: CompiledSchema<any>, fn: Filter<T> | ParamsFilter<T, P>, params?: P) => {\n const stringifiedFunction = fn.toString();\n\n try {\n\n // Optimized string parsing\n const arrowIndex = stringifiedFunction.indexOf('=>');\n if (arrowIndex === -1) {\n throw new Error(\"Invalid Function\");\n }\n\n const parameterNames = stringifiedFunction.substring(0, arrowIndex).trim();\n let expression = stringifiedFunction.substring(arrowIndex + 2).trim();\n\n // Remove JavaScript comments from the expression\n expression = expression\n .replace(SINGLE_LINE_COMMENT_REGEX, '') // Remove single-line comments\n .replace(MULTI_LINE_COMMENT_REGEX, '') // Remove multi-line comments\n .replace(WHITESPACE_REGEX, ' ') // Normalize whitespace\n .trim();\n\n let parameterData: { name: string, data: P } | undefined = undefined;\n\n if (params != null) {\n let name: string;\n if (parameterNames.includes(\"[\") && parameterNames.includes(\"]\")) {\n // Optimized parameter name extraction\n const commaIndex = parameterNames.indexOf(\",\");\n if (commaIndex !== -1) {\n const bracketIndex = parameterNames.indexOf(\"]\", commaIndex);\n if (bracketIndex !== -1) {\n name = parameterNames.substring(commaIndex + 1, bracketIndex).trim();\n }\n }\n }\n\n parameterData = {\n name,\n data: params\n };\n }\n\n return parseExpressionToTree(schema, expression, parameterData);\n } catch (error) {\n logger.warn(\"Error parsing expression\", {\n error,\n collectionName: schema.collectionName,\n params,\n selector: stringifiedFunction\n });\n return Expression.NOT_PARSABLE;\n }\n}\n\nconst parseExpressionToTree = <P extends any>(schema: CompiledSchema<any>, expression: string, params?: { name: string, data: P }) => {\n\n const parse = (exp: string): Expression => {\n // Remove any wrapping parentheses\n exp = exp.trim();\n if (exp.startsWith('(') && exp.endsWith(')')) {\n let depth = 0;\n let isWrapper = true;\n for (let i = 0; i < exp.length; i++) {\n const char = exp[i];\n if (char === '(') {\n depth++;\n } else if (char === ')') {\n depth--;\n if (depth < 0) break; // Early exit for invalid parentheses\n }\n // Early exit if we find a closing parenthesis that's not the last character\n if (depth === 0 && i !== exp.length - 1) {\n isWrapper = false;\n break; // Early exit\n }\n // Early exit if we go negative (invalid parentheses)\n if (depth < 0) {\n isWrapper = false;\n break;\n }\n }\n if (isWrapper) {\n exp = exp.slice(1, -1).trim();\n }\n }\n\n // Parse based on the operator precedence\n let operator: Operator | null = null, splitIndex = -1, depth = 0;\n\n for (let i = 0; i < exp.length - 1; i++) {\n const char = exp[i];\n if (char === '(') depth++;\n else if (char === ')') depth--;\n else if (depth === 0) {\n // Optimized operator detection using character comparison\n if (char === '&' && exp[i + 1] === '&') {\n operator = '&&';\n splitIndex = i;\n break; // AND takes precedence over OR\n } else if (operator === null && char === '|' && exp[i + 1] === '|') {\n operator = '||';\n splitIndex = i;\n }\n }\n }\n\n if (operator) {\n const left = exp.slice(0, splitIndex).trim();\n const right = exp.slice(splitIndex + 2).trim();\n\n return new OperatorExpression({\n operator,\n left: parse(left),\n right: parse(right)\n });\n }\n\n // If no operator, try to parse as a condition\n return parseCondition(schema, exp, params);\n }\n\n return parse(expression);\n}\n\nconst convertAndAssignValue = (valueExpression: unknown, propertyPathExpression: unknown) => {\n\n assertIsPropertyPathExpression(propertyPathExpression);\n\n assertIsValueExpression(valueExpression)\n\n const propertyType = propertyPathExpression.property.type;\n\n valueExpression.value = converters[propertyType](valueExpression.value);\n}\n\nconst converters: Record<SchemaTypes, (value: unknown) => unknown> = {\n Array: v => v,\n Boolean: v => v == null ? v : Boolean(v),\n Computed: v => v,\n Date: v => v,\n Definition: v => v,\n Function: v => v,\n Number: v => v == null ? v : Number(v),\n Object: v => v,\n String: v => v == null ? v : String(v)\n};\n\nconst isExpression = (value: unknown): value is Expression => {\n return typeof value === \"object\" && value !== null && \"type\" in value;\n}\n\nfunction assertIsExpression(value: unknown): asserts value is Expression {\n if (isExpression(value) === false) {\n throw new Error(\"Assertion Failed: Value is not a Expression\")\n }\n}\n\nfunction assertIsPropertyPathExpression(value: unknown): asserts value is PropertyExpression {\n\n assertIsExpression(value);\n\n if (!(\"property\" in value)) {\n throw new Error(\"Assertion Failed: Value is not a PropertyPathExpression\")\n }\n}\n\nfunction assertIsValueExpression(value: unknown): asserts value is ValueExpression {\n\n assertIsExpression(value);\n\n if (!(\"value\" in value)) {\n throw new Error(\"Assertion Failed: Value is not a ValueExpression\")\n }\n}\n\n// Helper function to detect if a string is a property path\nconst isPropertyPath = (value: string, params?: { name: string, data: any }): boolean => {\n // Check for dot notation (e.g., entity.name)\n if (value.includes('.') && value.match(/^[a-zA-Z0-9_.]+$/) !== null) {\n return true;\n }\n // Check for bracket notation with literal strings (e.g., entity[\"name\"], entity['name'], or entity[\\\"name\\\"] with escaped quotes)\n const literalBracketPattern = /^[a-zA-Z_$][a-zA-Z0-9_$]*(\\[\\\\?[\"'][^\"']+\\\\?[\"']\\])+$/;\n if (literalBracketPattern.test(value)) {\n return true;\n }\n // Check for bracket notation with parameter paths (e.g., entity[p.name], entity[params.property])\n if (params && value.includes('[') && value.includes(']')) {\n const bracketMatch = value.match(/\\[([^\\]]+)\\]/);\n if (bracketMatch) {\n const bracketContent = bracketMatch[1].trim();\n // Check if it's a parameter path - should start with params.name followed by dot, or be just params.name\n const isParamPath = bracketContent.startsWith(params.name + '.') || bracketContent === params.name;\n if (isParamPath || (bracketContent.includes('.') && bracketContent.match(PARAM_PATH_REGEX))) {\n return true;\n }\n }\n }\n return false;\n};\n\n// Helper function to determine if we need to swap the operator for reversed comparisons\nconst getSwappedOperator = (operator: string): string => {\n const swapMap: Record<string, string> = {\n '>': '<',\n '<': '>',\n '>=': '<=',\n '<=': '>='\n };\n return swapMap[operator] || operator;\n};\n\nconst parseCondition = <P extends any>(schema: CompiledSchema<any>, expression: string, params?: { name: string, data: P }): Expression => {\n\n // Optimized string operations - single trim operation\n const trimmed = expression.trim();\n const isNegation = trimmed.startsWith('!');\n const finalExpression = isNegation ? trimmed.slice(1).trim() : trimmed;\n\n // Enhanced pattern matching for complex expressions\n const methodMatch = finalExpression.match(METHOD_REGEX);\n const transformMethodMatch = finalExpression.match(TRANSFORM_METHOD_REGEX);\n const equalityMatch = finalExpression.match(EQUALITY_REGEX);\n const comparisonMatch = finalExpression.match(COMPARISON_REGEX);\n\n if (methodMatch) {\n // Handle .startsWith or .endsWith\n const comparator = getComparator(methodMatch[2]);\n\n if (isNegation) {\n comparator.negated = isNegation;\n }\n\n // Check if the left side is a parameter path\n const leftSide = methodMatch[1];\n const rightSide = methodMatch[3];\n\n if (params && leftSide.startsWith(params.name)) {\n // This is a parameter path on the left side (e.g., params.distinctPlayers.includes(entity.playerId))\n // For includes method, we need to swap left and right sides\n if (methodMatch[2] === 'includes') {\n\n const property = getProperty(schema, rightSide, params);\n const value = getValue(leftSide, params); // retrieve the original value\n const serializer = property.property.valueSerializer;\n comparator.left = serializer ? getValue(String(property.property.valueSerializer(parseUnknown(value.value)))) : value;\n comparator.right = property;\n } else {\n // For other methods, return NOT_PARSABLE for now\n return Expression.NOT_PARSABLE;\n }\n } else {\n // Normal case: property on left, value on right\n const property = getProperty(schema, leftSide, params);\n const serializer = property.property.valueSerializer;\n const value = getValue(rightSide, params); // retrieve the original value\n\n comparator.left = property;\n comparator.right = serializer ? getValue(String(property.property.valueSerializer(parseUnknown(value.value)))) : value;\n }\n\n // If the comparison is explicitly to false, mark it as negated\n if (methodMatch[6] === \"false\") {\n comparator.negated = true;\n }\n\n return comparator;\n }\n\n // Check for transformations on the value side (right side of comparison) - check this FIRST\n const valueTransformMatch = finalExpression.match(/([^=!<>]+?)\\s*(===|==|!==|!=)\\s*([^)]+)\\.(toLowerCase|toUpperCase|toLocaleLowerCase|toLocaleUpperCase)\\(\\)/);\n if (valueTransformMatch) {\n const comparator = getComparator(valueTransformMatch[2]);\n\n if (isNegation) {\n comparator.negated = isNegation;\n }\n\n const property = getProperty(schema, valueTransformMatch[1].trim(), params);\n const serializer = property.property.valueSerializer;\n const value = getValue(valueTransformMatch[3], params); // retrieve the original value\n\n // Create the property expression for the left side (no transformer)\n const propertyExpression = property;\n\n // Create a ValueExpression for the right side with transformer\n const valueExpression = serializer ? getValue(String(property.property.valueSerializer(parseUnknown(value.value)))) : value;\n\n // Set transformer and locale based on the method\n const method = valueTransformMatch[4];\n if (method === 'toLowerCase' || method === 'toLocaleLowerCase') {\n valueExpression.transformer = 'to-lower-case';\n if (method === 'toLocaleLowerCase') {\n valueExpression.locale = 'en-US';\n }\n } else {\n valueExpression.transformer = 'to-upper-case';\n if (method === 'toLocaleUpperCase') {\n valueExpression.locale = 'en-US';\n }\n }\n\n comparator.left = propertyExpression;\n comparator.right = valueExpression;\n\n return comparator;\n }\n\n if (transformMethodMatch) {\n // Handle .toLowerCase or .toUpperCase on the property side\n const comparator = getComparator(transformMethodMatch[3]); // e.g., startsWith, endsWith, includes\n\n if (isNegation) {\n comparator.negated = isNegation;\n }\n\n // Create the property expression for the left side with transformer\n const property = getProperty(schema, transformMethodMatch[1], params);\n\n // Set transformer and locale based on the method\n const method = transformMethodMatch[2];\n if (method === 'toLowerCase' || method === 'toLocaleLowerCase') {\n property.transformer = 'to-lower-case';\n if (method === 'toLocaleLowerCase') {\n property.locale = 'en-US'; // Default locale, could be extracted from method call\n }\n } else {\n property.transformer = 'to-upper-case';\n if (method === 'toLocaleUpperCase') {\n property.locale = 'en-US'; // Default locale, could be extracted from method call\n }\n }\n\n // Create a ValueExpression for the right side\n let value = getValue(transformMethodMatch[4], params);\n\n // Check if the value also has a transformation (but only if it's not already handled by value-side check)\n const valueTransformMatch = transformMethodMatch[4].match(/^([^)]+)\\.(toLowerCase|toUpperCase|toLocaleLowerCase|toLocaleUpperCase)\\(\\)$/);\n\n if (valueTransformMatch) {\n // Create a new ValueExpression with the base value and transformer\n value = new ValueExpression({\n value: valueTransformMatch[1].replace(/^[\"']|[\"']$/g, '') // Remove quotes\n });\n\n // Set transformer and locale based on the method\n const valueMethod = valueTransformMatch[2];\n if (valueMethod === 'toLowerCase' || valueMethod === 'toLocaleLowerCase') {\n value.transformer = 'to-lower-case';\n if (valueMethod === 'toLocaleLowerCase') {\n value.locale = 'en-US'; // Default locale\n }\n } else {\n value.transformer = 'to-upper-case';\n if (valueMethod === 'toLocaleUpperCase') {\n value.locale = 'en-US'; // Default locale\n }\n }\n }\n\n const serializer = property.property.valueSerializer;\n\n comparator.left = property;\n comparator.right = serializer ? getValue(String(property.property.valueSerializer(parseUnknown(value.value)))) : value;\n\n // If the comparison is explicitly to false, mark it as negated\n if (transformMethodMatch[7] === \"false\") {\n comparator.negated = true;\n }\n\n return comparator;\n }\n\n if (equalityMatch) {\n const left = equalityMatch[1].trim();\n const operator = equalityMatch[2];\n const right = equalityMatch[3].trim();\n\n const leftIsProperty = isPropertyPath(left, params);\n const rightIsProperty = isPropertyPath(right, params);\n\n // Determine which side is the property and which is the value\n let propertySide: string, valueSide: string, finalOperator: string;\n\n if (leftIsProperty && !rightIsProperty) {\n // Normal case: property === value\n propertySide = left;\n valueSide = right;\n finalOperator = operator;\n } else if (!leftIsProperty && rightIsProperty) {\n // Reversed case: value === property\n propertySide = right;\n valueSide = left;\n finalOperator = operator;\n } else {\n // Both sides look like properties or neither does - assume left is property\n propertySide = left;\n valueSide = right;\n finalOperator = operator;\n }\n\n const comparator = getComparator(finalOperator);\n\n if (isNegation) {\n comparator.negated = isNegation;\n }\n\n const property = getProperty(schema, propertySide, params);\n const value = getValue(valueSide, params);\n const serializer = property.property.valueSerializer;\n\n comparator.left = property;\n comparator.right = serializer ? getValue(String(property.property.valueSerializer(parseUnknown(value.value)))) : value;\n\n convertAndAssignValue(comparator.right, comparator.left);\n\n return comparator;\n }\n\n if (comparisonMatch) {\n const left = comparisonMatch[1].trim();\n const operator = comparisonMatch[2];\n const right = comparisonMatch[3].trim();\n\n const leftIsProperty = isPropertyPath(left, params);\n const rightIsProperty = isPropertyPath(right, params);\n\n // Determine which side is the property and which is the value\n let propertySide: string, valueSide: string, finalOperator: string;\n\n if (leftIsProperty && !rightIsProperty) {\n // Normal case: property > value\n propertySide = left;\n valueSide = right;\n finalOperator = operator;\n } else if (!leftIsProperty && rightIsProperty) {\n // Reversed case: value > property -> property < value\n propertySide = right;\n valueSide = left;\n finalOperator = getSwappedOperator(operator);\n } else {\n // Both sides look like properties or neither does - assume left is property\n propertySide = left;\n valueSide = right;\n finalOperator = operator;\n }\n\n const comparator = getComparator(finalOperator);\n\n if (isNegation) {\n comparator.negated = isNegation;\n }\n\n const property = getProperty(schema, propertySide, params);\n const value = getValue(valueSide, params);\n const serializer = property.property.valueSerializer;\n\n comparator.left = property;\n comparator.right = serializer ? getValue(String(property.property.valueSerializer(parseUnknown(value.value)))) : value;\n\n convertAndAssignValue(comparator.right, comparator.left);\n\n return comparator;\n }\n\n // Check for standalone property reference (truthy comparison)\n // Pattern: property name only (e.g., \"w.inStock\" -> w.inStock === true)\n const standalonePropertyMatch = finalExpression.match(/^[a-zA-Z_$][a-zA-Z0-9_$]*(\\.[a-zA-Z_$][a-zA-Z0-9_$]*)*$/);\n if (standalonePropertyMatch && isPropertyPath(finalExpression, params)) {\n const comparator = getComparator('===');\n\n if (isNegation) {\n comparator.negated = isNegation;\n }\n\n const property = getProperty(schema, finalExpression, params);\n const value = getValue('true', params);\n const serializer = property.property.valueSerializer;\n\n comparator.left = property;\n // need to parse the value so it matches what the serializer expects\n comparator.right = serializer ? getValue(String(property.property.valueSerializer(parseUnknown(value.value)))) : value;\n\n return comparator;\n }\n\n // If we get here, the expression is too complex for the current parser\n // This is expected for complex real-world expressions\n throw new Error(`Unsupported expression format: ${finalExpression}`);\n}\n\nconst getComparator = (value: string): ComparatorExpression => {\n\n const comparator = COMPARATOR_MAP.get(value);\n\n if (comparator == null) {\n throw new Error(ERROR_MESSAGES.COMPARATOR_NOT_FOUND(value))\n }\n\n // Return a new instance to avoid modifying the cached one\n return new ComparatorExpression({\n comparator: comparator.comparator,\n negated: comparator.negated,\n strict: comparator.strict\n });\n}\n\nconst getValue = <P extends any>(value: string, params?: { name: string, data: P }): ValueExpression => {\n\n // Early return for string literals\n if (value.startsWith(\"\\'\") || value.startsWith(\"\\\"\")) {\n return new ValueExpression({\n value: value.replace(/\\\"|\\'/g, \"\")\n });\n }\n\n // Early return for null/undefined\n if (value === \"null\") {\n return new ValueExpression({ value: null });\n }\n\n if (value === \"undefined\" || value === \"void 0\") {\n return new ValueExpression({ value: undefined });\n }\n\n // Optimized number parsing with early return\n const numValue = +value;\n if (!isNaN(numValue) && isFinite(numValue)) {\n return new ValueExpression({ value: numValue });\n }\n\n // Handle parameter paths if params are provided\n if (params != null) {\n // Check if this is a parameter path (starts with params.name)\n if (value.startsWith(params.name)) {\n return new ValueExpression({\n value: getValueFromParams(value, params)\n });\n }\n\n // Check if this is a parameter path without the params prefix\n if (value.includes('.')) {\n // Try to extract the parameter path\n const paramMatch = value.match(PARAM_PATH_REGEX);\n if (paramMatch) {\n const potentialParamPath = paramMatch[1];\n try {\n const paramValue = getValueFromParams(`${params.name}.${potentialParamPath}`, params);\n return new ValueExpression({ value: paramValue });\n } catch (e) {\n // Not a parameter path, continue with normal parsing\n }\n }\n }\n }\n\n if (STRINGIFIED_COMPARE_OPERATORS.includes(value)) {\n return new ValueExpression({ value });\n }\n\n if (isNaN(numValue)) {\n // value is a variable passed in by the dev, we cannot evaluate it's value\n // need to fallback to select all by throwing an error\n throw new Error(`Cannot derive value from variable, please pass parameters into the expression.\n\nExample: .where(([x, params]) => x.id === params.id, { id: someVar.id })\nIssue At: ${value}`);\n }\n\n // Default case: return as-is\n return new ValueExpression({ value });\n}\n\nconst getValueFromParams = <P extends any>(value: string, params: { name: string, data: P }) => {\n\n const split = value.split('.');\n\n // Early exit for invalid paths\n if (split.length === 1) {\n throw new Error(ERROR_MESSAGES.PARAM_PATH_NOT_FOUND(value, params.data))\n }\n\n let result = params.data as any;\n\n // For nested params - start from index 1 to skip the params prefix\n for (let i = 1; i < split.length; i++) {\n const name = split[i];\n\n if (name in result) {\n result = result[name];\n continue;\n }\n\n throw new Error(ERROR_MESSAGES.PARAM_PATH_NOT_FOUND(value, params.data))\n }\n\n return result;\n}\n\nconst getProperty = <P extends any>(schema: CompiledSchema<any>, value: string, params?: { name: string, data: P }): PropertyExpression => {\n let pathString: string;\n\n // Handle bracket notation (e.g., entity[\"name\"], entity['name'], entity[p.name], or entity[\\\"name\\\"] with escaped quotes)\n if (value.includes('[') && value.includes(']')) {\n // First try to match literal string brackets: [\"name\"], ['name'], [\\\"name\\\"], [\\'name\\']\n const literalBracketMatches = value.matchAll(/\\[\\\\?[\"']([^\"']+)\\\\?[\"']\\]/g);\n const pathParts: string[] = [];\n let foundLiteral = false;\n\n for (const match of literalBracketMatches) {\n // match[1] is the property name inside the brackets\n const propName = match[1];\n if (propName) {\n pathParts.push(propName);\n foundLiteral = true;\n }\n }\n\n // If no literal matches found, try parameter path in brackets (e.g., [p.name])\n if (!foundLiteral && params) {\n // Match brackets containing parameter paths: [p.name], [params.property], etc.\n const bracketParamMatch = value.match(/\\[([^\\]]+)\\]/);\n if (bracketParamMatch) {\n const bracketContent = bracketParamMatch[1].trim();\n\n // Check if this is a parameter path\n // It should start with params.name (e.g., \"p\") followed by a dot, or be just params.name\n const isParamPath = bracketContent.startsWith(params.name + '.') || bracketContent === params.name;\n\n if (isParamPath || (bracketContent.includes('.') && bracketContent.match(PARAM_PATH_REGEX))) {\n try {\n // Try to resolve as a parameter path\n let paramPath: string;\n if (bracketContent.startsWith(params.name + '.') || bracketContent === params.name) {\n // Already has params.name prefix\n paramPath = bracketContent;\n } else {\n // Add params.name prefix\n const paramMatch = bracketContent.match(PARAM_PATH_REGEX);\n paramPath = paramMatch\n ? `${params.name}.${paramMatch[1]}`\n : `${params.name}.${bracketContent}`;\n }\n\n const resolvedValue = getValueFromParams(paramPath, params);\n // The resolved value should be the property name\n if (typeof resolvedValue === 'string') {\n pathParts.push(resolvedValue);\n } else {\n throw new Error(ERROR_MESSAGES.PROPERTY_NOT_FOUND(value));\n }\n } catch (e) {\n // Not a valid parameter path, continue to error\n throw new Error(ERROR_MESSAGES.PROPERTY_NOT_FOUND(value));\n }\n } else {\n throw new Error(ERROR_MESSAGES.PROPERTY_NOT_FOUND(value));\n }\n } else {\n throw new Error(ERROR_MESSAGES.PROPERTY_NOT_FOUND(value));\n }\n }\n\n if (pathParts.length === 0) {\n throw new Error(ERROR_MESSAGES.PROPERTY_NOT_FOUND(value));\n }\n\n pathString = pathParts.join(\".\");\n } else if (value.includes('.')) {\n // Handle dot notation (e.g., entity.name)\n const pathSplit = value.split(/[?!.]/g).slice(1);\n pathString = pathSplit.join(\".\");\n } else {\n throw new Error(ERROR_MESSAGES.PROPERTY_NOT_FOUND(value));\n }\n\n // Early exit if no path found\n if (!pathString) {\n throw new Error(ERROR_MESSAGES.PROPERTY_NOT_FOUND(value));\n }\n\n const found = schema.properties.find(w => w.getAssignmentPath() == pathString);\n\n if (found == null) {\n throw new Error(ERROR_MESSAGES.PROPERTY_NOT_FOUND(value));\n }\n\n return new PropertyExpression({ property: found });\n}\n\n\n","import { QueryOptionExecutionTarget } from \"../plugins\";\nimport { PropertyInfo } from \"../schema\";\n\nexport type ParsedExpression = {\n expression: Expression;\n // Will be memory when trying to query on an untracked computed property or on a function\n executionTarget: QueryOptionExecutionTarget;\n}\n\n/**\n * The base class for all expression types.\n */\nexport abstract class Expression {\n /** The type of the expression. */\n abstract readonly type: ExpressionType;\n /** The left-hand side of the expression (if applicable). */\n left?: Expression;\n /** The right-hand side of the expression (if applicable). */\n right?: Expression;\n\n constructor(left?: Expression, right?: Expression) {\n this.left = left;\n this.right = right;\n }\n\n static get EMPTY() {\n return new EmptyExpression();\n }\n\n static get NOT_PARSABLE() {\n return new NotParsableExpression();\n }\n\n static isEmpty(expression: Expression) {\n return expression.type === \"empty\" || expression instanceof EmptyExpression;\n }\n\n static isNotParsable(expression: Expression) {\n return expression.type === \"not-parsable\" || expression instanceof NotParsableExpression;\n }\n}\n\nexport class EmptyExpression extends Expression {\n readonly type = \"empty\" as const;\n}\n\nexport class NotParsableExpression extends Expression {\n readonly type = \"not-parsable\" as const;\n}\n\n/**\n * A class representing a comparison operation (e.g., equals, greater-than).\n */\nexport class ComparatorExpression extends Expression {\n /** The type of the expression (always 'comparator'). */\n readonly type = \"comparator\" as const;\n /** The comparator operation (e.g., equals, greater-than). */\n comparator: Comparator;\n /** Whether the comparison is negated (e.g., not equals). */\n negated: boolean;\n /** Whether the comparison is strict (type-sensitive). */\n strict: boolean;\n\n constructor(\n options: {\n comparator: Comparator,\n negated: boolean,\n strict: boolean,\n left?: Expression,\n right?: Expression\n }\n ) {\n super(options.left, options.right);\n this.comparator = options.comparator;\n this.negated = options.negated;\n this.strict = options.strict;\n }\n}\n\n/**\n * A class representing a logical operator (e.g., &&, ||).\n */\nexport class OperatorExpression extends Expression {\n /** The type of the expression (always 'operator'). */\n readonly type = \"operator\" as const;\n /** The logical operator. */\n operator: Operator;\n\n constructor(options: { operator: Operator, left?: Expression, right?: Expression }) {\n super(options.left, options.right);\n this.operator = options.operator;\n }\n}\n\n/**\n * A class representing a property path.\n */\nexport class PropertyExpression extends Expression {\n /** The type of the expression (always 'property'). */\n readonly type = \"property\" as const;\n /** The property info for the path. */\n property: PropertyInfo<any>;\n transformer: Transformer | null = null;\n locale: string | null = null;\n\n constructor(options: { property: PropertyInfo<any> }) {\n super();\n this.property = options.property;\n }\n}\n\n/**\n * A class representing a literal value.\n */\nexport class ValueExpression extends Expression {\n /** The type of the expression (always 'value'). */\n readonly type = \"value\" as const;\n /** The literal value. */\n value: unknown;\n\n transformer: Transformer | null = null;\n locale: string | null = null;\n\n constructor(options: {\n value: unknown\n }) {\n super();\n this.value = options.value;\n }\n}\n\n\n/**\n * The set of possible expression types.\n */\nexport type ExpressionType = \"operator\" | \"comparator\" | \"property\" | \"value\" | \"empty\" | \"not-parsable\";\n\n/**\n * Supported value transformations that can be applied to values.\n */\nexport type Transformer = \"to-lower-case\" | \"to-upper-case\";\n\n/**\n * Supported comparator operations for expressions.\n */\nexport type Comparator =\n | \"equals\"\n | \"starts-with\"\n | \"includes\"\n | \"ends-with\"\n | \"greater-than\"\n | \"greater-than-equals\"\n | \"less-than\"\n | \"less-than-equals\";\n\n/**\n * Supported logical operators for expressions.\n */\nexport type Operator = \"&&\" | \"||\";\n\n/**\n * A function that filters a value of type T and returns a boolean.\n */\nexport type Filter<T extends any> = (value: T) => boolean;\n\n/**\n * A function that filters a value of type T with additional parameters P.\n */\nexport type ParamsFilter<T extends any, P> = (payload: [T, P]) => boolean;\n\n/**\n * A filter that can be either a simple filter or a parameterized filter.\n */\nexport type CompositeFilter<T extends any, P = never> = Filter<T> | ParamsFilter<T, P>;\n\n/**\n * An object that can be filtered using a composite filter and optional parameters.\n */\nexport type Filterable<T extends any, P = any> = {\n /** The filter function. */\n filter: CompositeFilter<T, P>;\n /** Optional parameters for the filter. */\n params?: P;\n}","import { PropertyInfo } from \"../schema\";\nimport { Expression, PropertyExpression } from \"./types\";\n\n/**\n * Extracts all properties referenced in an expression\n * @param expression The expression to analyze\n * @returns Array of PropertyInfo objects referenced in the expression\n */\nexport function getProperties(expression: Expression): PropertyInfo<any>[] {\n const properties: PropertyInfo<any>[] = [];\n\n function traverse(expr: Expression) {\n // If this is a property expression, add it to our collection\n if (expr.type === \"property\") {\n properties.push((expr as PropertyExpression).property);\n }\n\n // Traverse left and right expressions if they exist\n if (expr.left) {\n traverse(expr.left);\n }\n if (expr.right) {\n traverse(expr.right);\n }\n }\n\n traverse(expression);\n return properties;\n}\n\nexport function isPropertyExpression(expression: Expression): expression is PropertyExpression {\n return expression.type === \"property\";\n}\n\nexport function forEach(expression: Expression, callback: (expression: Expression) => boolean) {\n function traverse(expr: Expression): boolean {\n // Call the callback for this expression\n // If callback returns false, stop traversing\n if (!callback(expr)) {\n return false;\n }\n\n // Traverse left and right expressions if they exist\n if (expr.left) {\n if (!traverse(expr.left)) {\n return false;\n }\n }\n if (expr.right) {\n if (!traverse(expr.right)) {\n return false;\n }\n }\n\n return true;\n }\n\n traverse(expression);\n}","export const isDate = (data: unknown): data is Date => {\n if (data == null) {\n return false;\n }\n\n if (typeof data !== \"object\") {\n return false;\n }\n\n return data instanceof Date;\n}","const isDevelopment = (): boolean => {\n if (typeof process === 'undefined' || process.env == null) {\n return false;\n }\n const env = process.env.NODE_ENV?.toLowerCase();\n return env === 'dev' || env === 'development' || env === 'test';\n};\n\ntype LogMethods = \"log\" | \"info\" | \"warn\" | \"error\" | \"debug\" | \"table\";\nconst shouldLog = isDevelopment();\nconst tryLog = (type: LogMethods, ...args: unknown[]) => {\n if (shouldLog) {\n (console[type] as (...args: unknown[]) => void)(...args);\n }\n};\n\nexport const logger = {\n log: (...args: unknown[]): void => {\n tryLog(\"log\", ...args);\n },\n info: (...args: unknown[]): void => {\n tryLog(\"info\", ...args);\n },\n warn: (...args: unknown[]): void => {\n tryLog(\"warn\", ...args);\n },\n error: (...args: unknown[]): void => {\n tryLog(\"error\", ...args);\n },\n debug: (...args: unknown[]): void => {\n tryLog(\"debug\", ...args);\n },\n table: (...args: unknown[]): void => {\n tryLog(\"table\", ...args);\n },\n};\n\n","__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n }\n }\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","export * from './parser';\nexport * from './types';\nexport * from './utils';"],"names":[],"mappings":";;;;;;;;;;;AAAsC;AAE/B,SAAS,UAAU,CAAC,IAAa;IACpC,IAAI,sCAAM,CAAC,IAAI,CAAC,KAAK,KAAK,EAAE,CAAC;QACzB,MAAM,IAAI,SAAS,CAAC,qBAAqB,CAAC,CAAC;IAC/C,CAAC;AACL,CAAC;AAEM,SAAS,eAAe,CAAI,IAA0B,EAAE,OAAiC;IAC5F,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;QACf,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;YAClB,MAAM,IAAI,SAAS,CAAC,gCAAgC,CAAC,CAAC;QAC1D,CAAC;QAED,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAC9B,MAAM,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC;QACjC,CAAC;QAED,MAAM,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC;IACnC,CAAC;AACL,CAAC;AAEM,SAAS,aAAa,CAAI,IAAa,EAAE,OAAgB;IAC5D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,SAAS,CAAC,OAAO,IAAI,6CAA6C,CAAC,CAAC;IAClF,CAAC;AACL,CAAC;AAEM,SAAS,YAAY,CAAC,IAAa,EAAE,OAAgB;IACxD,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC3B,MAAM,IAAI,SAAS,CAAC,OAAO,IAAI,8CAA8C,CAAC,CAAC;IACnF,CAAC;AACL,CAAC;AAEM,SAAS,gBAAgB,CAAwC,KAAc,EAAE,QAAW;IAC/F,IAAI,KAAK,YAAY,QAAQ,EAAE,CAAC;QAC5B,OAAO;IACX,CAAC;IAED,IAAI,KAAK,IAAI,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,aAAa,IAAI,KAAK,EAAE,CAAC;QACvE,MAAM,IAAI,SAAS,CAAC,yCAAyC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;IAC3F,CAAC;IAED,MAAM,IAAI,SAAS,CAAC,+BAA+B,CAAC,CAAC;AACzD,CAAC;;;;;;;;;;;;;AC5CqC;AACO;AAEuG;AAEpJ,qDAAqD;AACrD,MAAM,YAAY,GAAG,iGAAiG,CAAC;AACvH,MAAM,sBAAsB,GAAG,mLAAmL,CAAC;AACnN,MAAM,cAAc,GAAG,sCAAsC,CAAC;AAC9D,MAAM,gBAAgB,GAAG,kCAAkC,CAAC;AAC5D,MAAM,gBAAgB,GAAG,mBAAmB,CAAC;AAE7C,kDAAkD;AAClD,MAAM,yBAAyB,GAAG,WAAW,CAAC;AAC9C,MAAM,wBAAwB,GAAG,mBAAmB,CAAC;AACrD,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAEhC,gCAAgC;AAChC,MAAM,WAAW,GAAyC;IACtD,UAAU,EAAE,IAAI,4CAAoB,CAAC;QACjC,UAAU,EAAE,aAAa;QACzB,OAAO,EAAE,KAAK;QACd,MAAM,EAAE,KAAK;KAChB,CAAC;IACF,QAAQ,EAAE,IAAI,4CAAoB,CAAC;QAC/B,UAAU,EAAE,WAAW;QACvB,OAAO,EAAE,KAAK;QACd,MAAM,EAAE,KAAK;KAChB,CAAC;IACF,QAAQ,EAAE,IAAI,4CAAoB,CAAC;QAC/B,UAAU,EAAE,UAAU;QACtB,OAAO,EAAE,KAAK;QACd,MAAM,EAAE,KAAK;KAChB,CAAC;IACF,IAAI,EAAE,IAAI,4CAAoB,CAAC;QAC3B,UAAU,EAAE,QAAQ;QACpB,OAAO,EAAE,KAAK;QACd,MAAM,EAAE,KAAK;KAChB,CAAC;IACF,KAAK,EAAE,IAAI,4CAAoB,CAAC;QAC5B,UAAU,EAAE,QAAQ;QACpB,OAAO,EAAE,KAAK;QACd,MAAM,EAAE,IAAI;KACf,CAAC;IACF,IAAI,EAAE,IAAI,4CAAoB,CAAC;QAC3B,UAAU,EAAE,QAAQ;QACpB,OAAO,EAAE,IAAI;QACb,MAAM,EAAE,KAAK;KAChB,CAAC;IACF,KAAK,EAAE,IAAI,4CAAoB,CAAC;QAC5B,UAAU,EAAE,QAAQ;QACpB,OAAO,EAAE,IAAI;QACb,MAAM,EAAE,IAAI;KACf,CAAC;IACF,IAAI,EAAE,IAAI,4CAAoB,CAAC;QAC3B,UAAU,EAAE,qBAAqB;QACjC,OAAO,EAAE,KAAK;QACd,MAAM,EAAE,KAAK;KAChB,CAAC;IACF,KAAK,EAAE,IAAI,4CAAoB,CAAC;QAC5B,UAAU,EAAE,qBAAqB;QACjC,OAAO,EAAE,KAAK;QACd,MAAM,EAAE,IAAI;KACf,CAAC;IACF,IAAI,EAAE,IAAI,4CAAoB,CAAC;QAC3B,UAAU,EAAE,kBAAkB;QAC9B,OAAO,EAAE,KAAK;QACd,MAAM,EAAE,KAAK;KAChB,CAAC;IACF,KAAK,EAAE,IAAI,4CAAoB,CAAC;QAC5B,UAAU,EAAE,kBAAkB;QAC9B,OAAO,EAAE,KAAK;QACd,MAAM,EAAE,IAAI;KACf,CAAC;IACF,GAAG,EAAE,IAAI,4CAAoB,CAAC;QAC1B,UAAU,EAAE,cAAc;QAC1B,OAAO,EAAE,KAAK;QACd,MAAM,EAAE,KAAK;KAChB,CAAC;IACF,GAAG,EAAE,IAAI,4CAAoB,CAAC;QAC1B,UAAU,EAAE,WAAW;QACvB,OAAO,EAAE,KAAK;QACd,MAAM,EAAE,KAAK;KAChB,CAAC;CACI,CAAC;AAEX,wCAAwC;AACxC,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC;AAE5D,0BAA0B;AAC1B,MAAM,cAAc,GAAG;IACnB,oBAAoB,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,2BAA2B,KAAK,EAAE;IAC3E,kBAAkB,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,8DAA8D,IAAI,EAAE;IAC1G,oBAAoB,EAAE,CAAC,KAAa,EAAE,MAAW,EAAE,EAAE,CAAC,+FAA+F,KAAK,aAAa,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE;CAClM,CAAC;AAEF,MAAM,6BAA6B,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAExD,MAAM,YAAY,GAAG,CAAC,KAAc,EAAE,EAAE;IACpC,6CAAY,CAAC,KAAK,CAAC,CAAC;IACpB,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC7B,CAAC;AAEM,MAAM,kBAAkB,GAAG,CAAC,GAAG,WAAyB,EAAc,EAAE;IAE3E,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;IACzE,CAAC;IAGD,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC;IAC1B,CAAC;IAED,kCAAkC;IAClC,IAAI,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;IAE5B,sDAAsD;IACtD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC1C,MAAM,GAAG,IAAI,0CAAkB,CAAC;YAC5B,QAAQ,EAAE,IAAI;YACd,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC;SACxB,CAAC,CAAC;IACP,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC,CAAC;AAEK,MAAM,YAAY,GAAG,CAA+B,MAA2B,EAAE,EAAkC,EAAE,MAAU,EAAE,EAAE;IACtI,MAAM,mBAAmB,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;IAE1C,IAAI,CAAC;QAED,2BAA2B;QAC3B,MAAM,UAAU,GAAG,mBAAmB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACrD,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACxC,CAAC;QAED,MAAM,cAAc,GAAG,mBAAmB,CAAC,SAAS,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,IAAI,EAAE,CAAC;QAC3E,IAAI,UAAU,GAAG,mBAAmB,CAAC,SAAS,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAEtE,iDAAiD;QACjD,UAAU,GAAG,UAAU;aAClB,OAAO,CAAC,yBAAyB,EAAE,EAAE,CAAC,CAAC,8BAA8B;aACrE,OAAO,CAAC,wBAAwB,EAAE,EAAE,CAAC,CAAC,6BAA6B;aACnE,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC,uBAAuB;aACtD,IAAI,EAAE,CAAC;QAEZ,IAAI,aAAa,GAA0C,SAAS,CAAC;QAErE,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;YACjB,IAAI,IAAY,CAAC;YACjB,IAAI,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC/D,sCAAsC;gBACtC,MAAM,UAAU,GAAG,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBAC/C,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE,CAAC;oBACpB,MAAM,YAAY,GAAG,cAAc,CAAC,OAAO,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;oBAC7D,IAAI,YAAY,KAAK,CAAC,CAAC,EAAE,CAAC;wBACtB,IAAI,GAAG,cAAc,CAAC,SAAS,CAAC,UAAU,GAAG,CAAC,EAAE,YAAY,CAAC,CAAC,IAAI,EAAE,CAAC;oBACzE,CAAC;gBACL,CAAC;YACL,CAAC;YAED,aAAa,GAAG;gBACZ,IAAI;gBACJ,IAAI,EAAE,MAAM;aACf,CAAC;QACN,CAAC;QAED,OAAO,qBAAqB,CAAC,MAAM,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC;IACpE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,uCAAW,CAAC,0BAA0B,EAAE;YACpC,KAAK;YACL,cAAc,EAAE,MAAM,CAAC,cAAc;YACrC,MAAM;YACN,QAAQ,EAAE,mBAAmB;SAChC,CAAC,CAAC;QACH,OAAO,+CAAuB,CAAC;IACnC,CAAC;AACL,CAAC;AAED,MAAM,qBAAqB,GAAG,CAAgB,MAA2B,EAAE,UAAkB,EAAE,MAAkC,EAAE,EAAE;IAEjI,MAAM,KAAK,GAAG,CAAC,GAAW,EAAc,EAAE;QACtC,kCAAkC;QAClC,GAAG,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;QACjB,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC3C,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,IAAI,SAAS,GAAG,IAAI,CAAC;YACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAClC,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;gBACpB,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;oBACf,KAAK,EAAE,CAAC;gBACZ,CAAC;qBAAM,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;oBACtB,KAAK,EAAE,CAAC;oBACR,IAAI,KAAK,GAAG,CAAC;wBAAE,MAAM,CAAC,qCAAqC;gBAC/D,CAAC;gBACD,4EAA4E;gBAC5E,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACtC,SAAS,GAAG,KAAK,CAAC;oBAClB,MAAM,CAAC,aAAa;gBACxB,CAAC;gBACD,qDAAqD;gBACrD,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;oBACZ,SAAS,GAAG,KAAK,CAAC;oBAClB,MAAM;gBACV,CAAC;YACL,CAAC;YACD,IAAI,SAAS,EAAE,CAAC;gBACZ,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAClC,CAAC;QACL,CAAC;QAED,yCAAyC;QACzC,IAAI,QAAQ,GAAoB,IAAI,EAAE,UAAU,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC;QAEjE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;YACpB,IAAI,IAAI,KAAK,GAAG;gBAAE,KAAK,EAAE,CAAC;iBACrB,IAAI,IAAI,KAAK,GAAG;gBAAE,KAAK,EAAE,CAAC;iBAC1B,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;gBACnB,0DAA0D;gBAC1D,IAAI,IAAI,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;oBACrC,QAAQ,GAAG,IAAI,CAAC;oBAChB,UAAU,GAAG,CAAC,CAAC;oBACf,MAAM,CAAC,+BAA+B;gBAC1C,CAAC;qBAAM,IAAI,QAAQ,KAAK,IAAI,IAAI,IAAI,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;oBACjE,QAAQ,GAAG,IAAI,CAAC;oBAChB,UAAU,GAAG,CAAC,CAAC;gBACnB,CAAC;YACL,CAAC;QACL,CAAC;QAED,IAAI,QAAQ,EAAE,CAAC;YACX,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,IAAI,EAAE,CAAC;YAC7C,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAE/C,OAAO,IAAI,0CAAkB,CAAC;gBAC1B,QAAQ;gBACR,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC;gBACjB,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC;aACtB,CAAC,CAAC;QACP,CAAC;QAED,8CAA8C;QAC9C,OAAO,cAAc,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;IAC/C,CAAC;IAED,OAAO,KAAK,CAAC,UAAU,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,qBAAqB,GAAG,CAAC,eAAwB,EAAE,sBAA+B,EAAE,EAAE;IAExF,8BAA8B,CAAC,sBAAsB,CAAC,CAAC;IAEvD,uBAAuB,CAAC,eAAe,CAAC;IAExC,MAAM,YAAY,GAAG,sBAAsB,CAAC,QAAQ,CAAC,IAAI,CAAC;IAE1D,eAAe,CAAC,KAAK,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;AAC5E,CAAC;AAED,MAAM,UAAU,GAAqD;IACjE,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACb,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IACxC,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IAChB,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACZ,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IAClB,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IAChB,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IACtC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACd,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;CACzC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,KAAc,EAAuB,EAAE;IACzD,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,MAAM,IAAI,KAAK,CAAC;AAC1E,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAc;IACtC,IAAI,YAAY,CAAC,KAAK,CAAC,KAAK,KAAK,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC;IAClE,CAAC;AACL,CAAC;AAED,SAAS,8BAA8B,CAAC,KAAc;IAElD,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAE1B,IAAI,CAAC,CAAC,UAAU,IAAI,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC;IAC9E,CAAC;AACL,CAAC;AAED,SAAS,uBAAuB,CAAC,KAAc;IAE3C,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAE1B,IAAI,CAAC,CAAC,OAAO,IAAI,KAAK,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC;IACvE,CAAC;AACL,CAAC;AAED,2DAA2D;AAC3D,MAAM,cAAc,GAAG,CAAC,KAAa,EAAE,MAAoC,EAAW,EAAE;IACpF,6CAA6C;IAC7C,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,kBAAkB,CAAC,KAAK,IAAI,EAAE,CAAC;QAClE,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,kIAAkI;IAClI,MAAM,qBAAqB,GAAG,uDAAuD,CAAC;IACtF,IAAI,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACpC,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,kGAAkG;IAClG,IAAI,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACvD,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QACjD,IAAI,YAAY,EAAE,CAAC;YACf,MAAM,cAAc,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC9C,yGAAyG;YACzG,MAAM,WAAW,GAAG,cAAc,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,cAAc,KAAK,MAAM,CAAC,IAAI,CAAC;YACnG,IAAI,WAAW,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,cAAc,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC;gBAC1F,OAAO,IAAI,CAAC;YAChB,CAAC;QACL,CAAC;IACL,CAAC;IACD,OAAO,KAAK,CAAC;AACjB,CAAC,CAAC;AAEF,wFAAwF;AACxF,MAAM,kBAAkB,GAAG,CAAC,QAAgB,EAAU,EAAE;IACpD,MAAM,OAAO,GAA2B;QACpC,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,GAAG;QACR,IAAI,EAAE,IAAI;QACV,IAAI,EAAE,IAAI;KACb,CAAC;IACF,OAAO,OAAO,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC;AACzC,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CAAgB,MAA2B,EAAE,UAAkB,EAAE,MAAkC,EAAc,EAAE;IAEtI,sDAAsD;IACtD,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC;IAClC,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAC3C,MAAM,eAAe,GAAG,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;IAEvE,oDAAoD;IACpD,MAAM,WAAW,GAAG,eAAe,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IACxD,MAAM,oBAAoB,GAAG,eAAe,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAC3E,MAAM,aAAa,GAAG,eAAe,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IAC5D,MAAM,eAAe,GAAG,eAAe,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;IAEhE,IAAI,WAAW,EAAE,CAAC;QACd,kCAAkC;QAClC,MAAM,UAAU,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;QAEjD,IAAI,UAAU,EAAE,CAAC;YACb,UAAU,CAAC,OAAO,GAAG,UAAU,CAAC;QACpC,CAAC;QAED,6CAA6C;QAC7C,MAAM,QAAQ,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;QAChC,MAAM,SAAS,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;QAEjC,IAAI,MAAM,IAAI,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7C,qGAAqG;YACrG,4DAA4D;YAC5D,IAAI,WAAW,CAAC,CAAC,CAAC,KAAK,UAAU,EAAE,CAAC;gBAEhC,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;gBACxD,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,8BAA8B;gBACxE,MAAM,UAAU,GAAG,QAAQ,CAAC,QAAQ,CAAC,eAAe,CAAC;gBACrD,UAAU,CAAC,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,eAAe,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;gBACtH,UAAU,CAAC,KAAK,GAAG,QAAQ,CAAC;YAChC,CAAC;iBAAM,CAAC;gBACJ,iDAAiD;gBACjD,OAAO,+CAAuB,CAAC;YACnC,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,gDAAgD;YAChD,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;YACvD,MAAM,UAAU,GAAG,QAAQ,CAAC,QAAQ,CAAC,eAAe,CAAC;YACrD,MAAM,KAAK,GAAG,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,8BAA8B;YAEzE,UAAU,CAAC,IAAI,GAAG,QAAQ,CAAC;YAC3B,UAAU,CAAC,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,eAAe,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QAC3H,CAAC;QAED,+DAA+D;QAC/D,IAAI,WAAW,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE,CAAC;YAC7B,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC;QAC9B,CAAC;QAED,OAAO,UAAU,CAAC;IACtB,CAAC;IAED,4FAA4F;IAC5F,MAAM,mBAAmB,GAAG,eAAe,CAAC,KAAK,CAAC,4GAA4G,CAAC,CAAC;IAChK,IAAI,mBAAmB,EAAE,CAAC;QACtB,MAAM,UAAU,GAAG,aAAa,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC;QAEzD,IAAI,UAAU,EAAE,CAAC;YACb,UAAU,CAAC,OAAO,GAAG,UAAU,CAAC;QACpC,CAAC;QAED,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC;QAC5E,MAAM,UAAU,GAAG,QAAQ,CAAC,QAAQ,CAAC,eAAe,CAAC;QACrD,MAAM,KAAK,GAAG,QAAQ,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,8BAA8B;QAEtF,oEAAoE;QACpE,MAAM,kBAAkB,GAAG,QAAQ,CAAC;QAEpC,+DAA+D;QAC/D,MAAM,eAAe,GAAG,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,eAAe,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QAE5H,iDAAiD;QACjD,MAAM,MAAM,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAAC;QACtC,IAAI,MAAM,KAAK,aAAa,IAAI,MAAM,KAAK,mBAAmB,EAAE,CAAC;YAC7D,eAAe,CAAC,WAAW,GAAG,eAAe,CAAC;YAC9C,IAAI,MAAM,KAAK,mBAAmB,EAAE,CAAC;gBACjC,eAAe,CAAC,MAAM,GAAG,OAAO,CAAC;YACrC,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,eAAe,CAAC,WAAW,GAAG,eAAe,CAAC;YAC9C,IAAI,MAAM,KAAK,mBAAmB,EAAE,CAAC;gBACjC,eAAe,CAAC,MAAM,GAAG,OAAO,CAAC;YACrC,CAAC;QACL,CAAC;QAED,UAAU,CAAC,IAAI,GAAG,kBAAkB,CAAC;QACrC,UAAU,CAAC,KAAK,GAAG,eAAe,CAAC;QAEnC,OAAO,UAAU,CAAC;IACtB,CAAC;IAED,IAAI,oBAAoB,EAAE,CAAC;QACvB,2DAA2D;QAC3D,MAAM,UAAU,GAAG,aAAa,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,uCAAuC;QAElG,IAAI,UAAU,EAAE,CAAC;YACb,UAAU,CAAC,OAAO,GAAG,UAAU,CAAC;QACpC,CAAC;QAED,oEAAoE;QACpE,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;QAEtE,iDAAiD;QACjD,MAAM,MAAM,GAAG,oBAAoB,CAAC,CAAC,CAAC,CAAC;QACvC,IAAI,MAAM,KAAK,aAAa,IAAI,MAAM,KAAK,mBAAmB,EAAE,CAAC;YAC7D,QAAQ,CAAC,WAAW,GAAG,eAAe,CAAC;YACvC,IAAI,MAAM,KAAK,mBAAmB,EAAE,CAAC;gBACjC,QAAQ,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC,sDAAsD;YACrF,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,QAAQ,CAAC,WAAW,GAAG,eAAe,CAAC;YACvC,IAAI,MAAM,KAAK,mBAAmB,EAAE,CAAC;gBACjC,QAAQ,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC,sDAAsD;YACrF,CAAC;QACL,CAAC;QAED,8CAA8C;QAC9C,IAAI,KAAK,GAAG,QAAQ,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;QAEtD,0GAA0G;QAC1G,MAAM,mBAAmB,GAAG,oBAAoB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,8EAA8E,CAAC,CAAC;QAE1I,IAAI,mBAAmB,EAAE,CAAC;YACtB,mEAAmE;YACnE,KAAK,GAAG,IAAI,uCAAe,CAAC;gBACxB,KAAK,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,gBAAgB;aAC7E,CAAC,CAAC;YAEH,iDAAiD;YACjD,MAAM,WAAW,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAAC;YAC3C,IAAI,WAAW,KAAK,aAAa,IAAI,WAAW,KAAK,mBAAmB,EAAE,CAAC;gBACvE,KAAK,CAAC,WAAW,GAAG,eAAe,CAAC;gBACpC,IAAI,WAAW,KAAK,mBAAmB,EAAE,CAAC;oBACtC,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC,iBAAiB;gBAC7C,CAAC;YACL,CAAC;iBAAM,CAAC;gBACJ,KAAK,CAAC,WAAW,GAAG,eAAe,CAAC;gBACpC,IAAI,WAAW,KAAK,mBAAmB,EAAE,CAAC;oBACtC,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC,iBAAiB;gBAC7C,CAAC;YACL,CAAC;QACL,CAAC;QAED,MAAM,UAAU,GAAG,QAAQ,CAAC,QAAQ,CAAC,eAAe,CAAC;QAErD,UAAU,CAAC,IAAI,GAAG,QAAQ,CAAC;QAC3B,UAAU,CAAC,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,eAAe,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QAEvH,+DAA+D;QAC/D,IAAI,oBAAoB,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE,CAAC;YACtC,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC;QAC9B,CAAC;QAED,OAAO,UAAU,CAAC;IACtB,CAAC;IAED,IAAI,aAAa,EAAE,CAAC;QAChB,MAAM,IAAI,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACrC,MAAM,QAAQ,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;QAClC,MAAM,KAAK,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAEtC,MAAM,cAAc,GAAG,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACpD,MAAM,eAAe,GAAG,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAEtD,8DAA8D;QAC9D,IAAI,YAAoB,EAAE,SAAiB,EAAE,aAAqB,CAAC;QAEnE,IAAI,cAAc,IAAI,CAAC,eAAe,EAAE,CAAC;YACrC,kCAAkC;YAClC,YAAY,GAAG,IAAI,CAAC;YACpB,SAAS,GAAG,KAAK,CAAC;YAClB,aAAa,GAAG,QAAQ,CAAC;QAC7B,CAAC;aAAM,IAAI,CAAC,cAAc,IAAI,eAAe,EAAE,CAAC;YAC5C,oCAAoC;YACpC,YAAY,GAAG,KAAK,CAAC;YACrB,SAAS,GAAG,IAAI,CAAC;YACjB,aAAa,GAAG,QAAQ,CAAC;QAC7B,CAAC;aAAM,CAAC;YACJ,4EAA4E;YAC5E,YAAY,GAAG,IAAI,CAAC;YACpB,SAAS,GAAG,KAAK,CAAC;YAClB,aAAa,GAAG,QAAQ,CAAC;QAC7B,CAAC;QAED,MAAM,UAAU,GAAG,aAAa,CAAC,aAAa,CAAC,CAAC;QAEhD,IAAI,UAAU,EAAE,CAAC;YACb,UAAU,CAAC,OAAO,GAAG,UAAU,CAAC;QACpC,CAAC;QAED,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;QAC3D,MAAM,KAAK,GAAG,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAC1C,MAAM,UAAU,GAAG,QAAQ,CAAC,QAAQ,CAAC,eAAe,CAAC;QAErD,UAAU,CAAC,IAAI,GAAG,QAAQ,CAAC;QAC3B,UAAU,CAAC,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,eAAe,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QAEvH,qBAAqB,CAAC,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;QAEzD,OAAO,UAAU,CAAC;IACtB,CAAC;IAED,IAAI,eAAe,EAAE,CAAC;QAClB,MAAM,IAAI,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACvC,MAAM,QAAQ,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;QACpC,MAAM,KAAK,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAExC,MAAM,cAAc,GAAG,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACpD,MAAM,eAAe,GAAG,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAEtD,8DAA8D;QAC9D,IAAI,YAAoB,EAAE,SAAiB,EAAE,aAAqB,CAAC;QAEnE,IAAI,cAAc,IAAI,CAAC,eAAe,EAAE,CAAC;YACrC,gCAAgC;YAChC,YAAY,GAAG,IAAI,CAAC;YACpB,SAAS,GAAG,KAAK,CAAC;YAClB,aAAa,GAAG,QAAQ,CAAC;QAC7B,CAAC;aAAM,IAAI,CAAC,cAAc,IAAI,eAAe,EAAE,CAAC;YAC5C,sDAAsD;YACtD,YAAY,GAAG,KAAK,CAAC;YACrB,SAAS,GAAG,IAAI,CAAC;YACjB,aAAa,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;QACjD,CAAC;aAAM,CAAC;YACJ,4EAA4E;YAC5E,YAAY,GAAG,IAAI,CAAC;YACpB,SAAS,GAAG,KAAK,CAAC;YAClB,aAAa,GAAG,QAAQ,CAAC;QAC7B,CAAC;QAED,MAAM,UAAU,GAAG,aAAa,CAAC,aAAa,CAAC,CAAC;QAEhD,IAAI,UAAU,EAAE,CAAC;YACb,UAAU,CAAC,OAAO,GAAG,UAAU,CAAC;QACpC,CAAC;QAED,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;QAC3D,MAAM,KAAK,GAAG,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAC1C,MAAM,UAAU,GAAG,QAAQ,CAAC,QAAQ,CAAC,eAAe,CAAC;QAErD,UAAU,CAAC,IAAI,GAAG,QAAQ,CAAC;QAC3B,UAAU,CAAC,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,eAAe,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QAEvH,qBAAqB,CAAC,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;QAEzD,OAAO,UAAU,CAAC;IACtB,CAAC;IAED,8DAA8D;IAC9D,wEAAwE;IACxE,MAAM,uBAAuB,GAAG,eAAe,CAAC,KAAK,CAAC,yDAAyD,CAAC,CAAC;IACjH,IAAI,uBAAuB,IAAI,cAAc,CAAC,eAAe,EAAE,MAAM,CAAC,EAAE,CAAC;QACrE,MAAM,UAAU,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;QAExC,IAAI,UAAU,EAAE,CAAC;YACb,UAAU,CAAC,OAAO,GAAG,UAAU,CAAC;QACpC,CAAC;QAED,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,EAAE,eAAe,EAAE,MAAM,CAAC,CAAC;QAC9D,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACvC,MAAM,UAAU,GAAG,QAAQ,CAAC,QAAQ,CAAC,eAAe,CAAC;QAErD,UAAU,CAAC,IAAI,GAAG,QAAQ,CAAC;QAC3B,oEAAoE;QACpE,UAAU,CAAC,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,eAAe,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QAEvH,OAAO,UAAU,CAAC;IACtB,CAAC;IAED,uEAAuE;IACvE,sDAAsD;IACtD,MAAM,IAAI,KAAK,CAAC,kCAAkC,eAAe,EAAE,CAAC,CAAC;AACzE,CAAC;AAED,MAAM,aAAa,GAAG,CAAC,KAAa,EAAwB,EAAE;IAE1D,MAAM,UAAU,GAAG,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAE7C,IAAI,UAAU,IAAI,IAAI,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAC/D,CAAC;IAED,0DAA0D;IAC1D,OAAO,IAAI,4CAAoB,CAAC;QAC5B,UAAU,EAAE,UAAU,CAAC,UAAU;QACjC,OAAO,EAAE,UAAU,CAAC,OAAO;QAC3B,MAAM,EAAE,UAAU,CAAC,MAAM;KAC5B,CAAC,CAAC;AACP,CAAC;AAED,MAAM,QAAQ,GAAG,CAAgB,KAAa,EAAE,MAAkC,EAAmB,EAAE;IAEnG,mCAAmC;IACnC,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACnD,OAAO,IAAI,uCAAe,CAAC;YACvB,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;SACrC,CAAC,CAAC;IACP,CAAC;IAED,kCAAkC;IAClC,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;QACnB,OAAO,IAAI,uCAAe,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAChD,CAAC;IAED,IAAI,KAAK,KAAK,WAAW,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9C,OAAO,IAAI,uCAAe,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IACrD,CAAC;IAED,6CAA6C;IAC7C,MAAM,QAAQ,GAAG,CAAC,KAAK,CAAC;IACxB,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzC,OAAO,IAAI,uCAAe,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;IACpD,CAAC;IAED,gDAAgD;IAChD,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;QACjB,8DAA8D;QAC9D,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YAChC,OAAO,IAAI,uCAAe,CAAC;gBACvB,KAAK,EAAE,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC;aAC3C,CAAC,CAAC;QACP,CAAC;QAED,8DAA8D;QAC9D,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACtB,oCAAoC;YACpC,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;YACjD,IAAI,UAAU,EAAE,CAAC;gBACb,MAAM,kBAAkB,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;gBACzC,IAAI,CAAC;oBACD,MAAM,UAAU,GAAG,kBAAkB,CAAC,GAAG,MAAM,CAAC,IAAI,IAAI,kBAAkB,EAAE,EAAE,MAAM,CAAC,CAAC;oBACtF,OAAO,IAAI,uCAAe,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;gBACtD,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACT,qDAAqD;gBACzD,CAAC;YACL,CAAC;QACL,CAAC;IACL,CAAC;IAED,IAAI,6BAA6B,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAChD,OAAO,IAAI,uCAAe,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED,IAAI,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;QAClB,0EAA0E;QAC1E,sDAAsD;QACtD,MAAM,IAAI,KAAK,CAAC;;;YAGZ,KAAK,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,6BAA6B;IAC7B,OAAO,IAAI,uCAAe,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,kBAAkB,GAAG,CAAgB,KAAa,EAAE,MAAiC,EAAE,EAAE;IAE3F,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAE/B,+BAA+B;IAC/B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,oBAAoB,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IAC5E,CAAC;IAED,IAAI,MAAM,GAAG,MAAM,CAAC,IAAW,CAAC;IAEhC,mEAAmE;IACnE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACpC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAEtB,IAAI,IAAI,IAAI,MAAM,EAAE,CAAC;YACjB,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;YACtB,SAAS;QACb,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,oBAAoB,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IAC5E,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,MAAM,WAAW,GAAG,CAAgB,MAA2B,EAAE,KAAa,EAAE,MAAkC,EAAsB,EAAE;IACtI,IAAI,UAAkB,CAAC;IAEvB,0HAA0H;IAC1H,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7C,yFAAyF;QACzF,MAAM,qBAAqB,GAAG,KAAK,CAAC,QAAQ,CAAC,6BAA6B,CAAC,CAAC;QAC5E,MAAM,SAAS,GAAa,EAAE,CAAC;QAC/B,IAAI,YAAY,GAAG,KAAK,CAAC;QAEzB,KAAK,MAAM,KAAK,IAAI,qBAAqB,EAAE,CAAC;YACxC,oDAAoD;YACpD,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAC1B,IAAI,QAAQ,EAAE,CAAC;gBACX,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACzB,YAAY,GAAG,IAAI,CAAC;YACxB,CAAC;QACL,CAAC;QAED,+EAA+E;QAC/E,IAAI,CAAC,YAAY,IAAI,MAAM,EAAE,CAAC;YAC1B,+EAA+E;YAC/E,MAAM,iBAAiB,GAAG,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;YACtD,IAAI,iBAAiB,EAAE,CAAC;gBACpB,MAAM,cAAc,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBAEnD,oCAAoC;gBACpC,yFAAyF;gBACzF,MAAM,WAAW,GAAG,cAAc,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,cAAc,KAAK,MAAM,CAAC,IAAI,CAAC;gBAEnG,IAAI,WAAW,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,cAAc,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC;oBAC1F,IAAI,CAAC;wBACD,qCAAqC;wBACrC,IAAI,SAAiB,CAAC;wBACtB,IAAI,cAAc,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,cAAc,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC;4BACjF,iCAAiC;4BACjC,SAAS,GAAG,cAAc,CAAC;wBAC/B,CAAC;6BAAM,CAAC;4BACJ,yBAAyB;4BACzB,MAAM,UAAU,GAAG,cAAc,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;4BAC1D,SAAS,GAAG,UAAU;gCAClB,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE;gCACnC,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,IAAI,cAAc,EAAE,CAAC;wBAC7C,CAAC;wBAED,MAAM,aAAa,GAAG,kBAAkB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;wBAC5D,iDAAiD;wBACjD,IAAI,OAAO,aAAa,KAAK,QAAQ,EAAE,CAAC;4BACpC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;wBAClC,CAAC;6BAAM,CAAC;4BACJ,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC;wBAC9D,CAAC;oBACL,CAAC;oBAAC,OAAO,CAAC,EAAE,CAAC;wBACT,gDAAgD;wBAChD,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC;oBAC9D,CAAC;gBACL,CAAC;qBAAM,CAAC;oBACJ,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC9D,CAAC;YACL,CAAC;iBAAM,CAAC;gBACJ,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC;YAC9D,CAAC;QACL,CAAC;QAED,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC;QAC9D,CAAC;QAED,UAAU,GAAG,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACrC,CAAC;SAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7B,0CAA0C;QAC1C,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACjD,UAAU,GAAG,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACrC,CAAC;SAAM,CAAC;QACJ,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED,8BAA8B;IAC9B,IAAI,CAAC,UAAU,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,iBAAiB,EAAE,IAAI,UAAU,CAAC,CAAC;IAE/E,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED,OAAO,IAAI,0CAAkB,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;AACvD,CAAC;;;;;;;;;;;;;;;ACxyBD;;GAEG;AACI,MAAe,UAAU;IAG5B,4DAA4D;IAC5D,IAAI,CAAc;IAClB,6DAA6D;IAC7D,KAAK,CAAc;IAEnB,YAAY,IAAiB,EAAE,KAAkB;QAC7C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACvB,CAAC;IAED,MAAM,KAAK,KAAK;QACZ,OAAO,IAAI,eAAe,EAAE,CAAC;IACjC,CAAC;IAED,MAAM,KAAK,YAAY;QACnB,OAAO,IAAI,qBAAqB,EAAE,CAAC;IACvC,CAAC;IAED,MAAM,CAAC,OAAO,CAAC,UAAsB;QACjC,OAAO,UAAU,CAAC,IAAI,KAAK,OAAO,IAAI,UAAU,YAAY,eAAe,CAAC;IAChF,CAAC;IAED,MAAM,CAAC,aAAa,CAAC,UAAsB;QACvC,OAAO,UAAU,CAAC,IAAI,KAAK,cAAc,IAAI,UAAU,YAAY,qBAAqB,CAAC;IAC7F,CAAC;CACJ;AAEM,MAAM,eAAgB,SAAQ,UAAU;IAClC,IAAI,GAAG,OAAgB,CAAC;CACpC;AAEM,MAAM,qBAAsB,SAAQ,UAAU;IACxC,IAAI,GAAG,cAAuB,CAAC;CAC3C;AAED;;GAEG;AACI,MAAM,oBAAqB,SAAQ,UAAU;IAChD,wDAAwD;IAC/C,IAAI,GAAG,YAAqB,CAAC;IACtC,6DAA6D;IAC7D,UAAU,CAAa;IACvB,4DAA4D;IAC5D,OAAO,CAAU;IACjB,yDAAyD;IACzD,MAAM,CAAU;IAEhB,YACI,OAMC;QAED,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QACnC,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;QACrC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAC/B,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IACjC,CAAC;CACJ;AAED;;GAEG;AACI,MAAM,kBAAmB,SAAQ,UAAU;IAC9C,sDAAsD;IAC7C,IAAI,GAAG,UAAmB,CAAC;IACpC,4BAA4B;IAC5B,QAAQ,CAAW;IAEnB,YAAY,OAAsE;QAC9E,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QACnC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IACrC,CAAC;CACJ;AAED;;GAEG;AACI,MAAM,kBAAmB,SAAQ,UAAU;IAC9C,sDAAsD;IAC7C,IAAI,GAAG,UAAmB,CAAC;IACpC,sCAAsC;IACtC,QAAQ,CAAoB;IAC5B,WAAW,GAAuB,IAAI,CAAC;IACvC,MAAM,GAAkB,IAAI,CAAC;IAE7B,YAAY,OAAwC;QAChD,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IACrC,CAAC;CACJ;AAED;;GAEG;AACI,MAAM,eAAgB,SAAQ,UAAU;IAC3C,mDAAmD;IAC1C,IAAI,GAAG,OAAgB,CAAC;IACjC,yBAAyB;IACzB,KAAK,CAAU;IAEf,WAAW,GAAuB,IAAI,CAAC;IACvC,MAAM,GAAkB,IAAI,CAAC;IAE7B,YAAY,OAEX;QACG,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAC/B,CAAC;CACJ;;;;;;;;;;;AC9HD;;;;GAIG;AACI,SAAS,aAAa,CAAC,UAAsB;IAChD,MAAM,UAAU,GAAwB,EAAE,CAAC;IAE3C,SAAS,QAAQ,CAAC,IAAgB;QAC9B,6DAA6D;QAC7D,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YAC3B,UAAU,CAAC,IAAI,CAAE,IAA2B,CAAC,QAAQ,CAAC,CAAC;QAC3D,CAAC;QAED,oDAAoD;QACpD,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACZ,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxB,CAAC;QACD,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACb,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzB,CAAC;IACL,CAAC;IAED,QAAQ,CAAC,UAAU,CAAC,CAAC;IACrB,OAAO,UAAU,CAAC;AACtB,CAAC;AAEM,SAAS,oBAAoB,CAAC,UAAsB;IACvD,OAAO,UAAU,CAAC,IAAI,KAAK,UAAU,CAAC;AAC1C,CAAC;AAEM,SAAS,OAAO,CAAC,UAAsB,EAAE,QAA6C;IACzF,SAAS,QAAQ,CAAC,IAAgB;QAC9B,wCAAwC;QACxC,6CAA6C;QAC7C,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAClB,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,oDAAoD;QACpD,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACZ,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACvB,OAAO,KAAK,CAAC;YACjB,CAAC;QACL,CAAC;QACD,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACb,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBACxB,OAAO,KAAK,CAAC;YACjB,CAAC;QACL,CAAC;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,QAAQ,CAAC,UAAU,CAAC,CAAC;AACzB,CAAC;;;;;;;;;AC1DM,MAAM,MAAM,GAAG,CAAC,IAAa,EAAgB,EAAE;IAClD,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;QACf,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,OAAO,IAAI,YAAY,IAAI,CAAC;AAChC,CAAC;;;;;;;;;ACVD,MAAM,aAAa,GAAG,GAAY,EAAE;IAChC,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC;QACxD,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,MAAM,GAAG,GAAG,aAAoB,EAAE,WAAW,EAAE,CAAC;IAChD,OAAO,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,aAAa,IAAI,GAAG,KAAK,MAAM,CAAC;AACpE,CAAC,CAAC;AAGF,MAAM,SAAS,GAAG,aAAa,EAAE,CAAC;AAClC,MAAM,MAAM,GAAG,CAAC,IAAgB,EAAE,GAAG,IAAe,EAAE,EAAE;IACpD,IAAI,SAAS,EAAE,CAAC;QACX,OAAO,CAAC,IAAI,CAAkC,CAAC,GAAG,IAAI,CAAC,CAAC;IAC7D,CAAC;AACL,CAAC,CAAC;AAEK,MAAM,MAAM,GAAG;IAClB,GAAG,EAAE,CAAC,GAAG,IAAe,EAAQ,EAAE;QAC9B,MAAM,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,CAAC;IAC3B,CAAC;IACD,IAAI,EAAE,CAAC,GAAG,IAAe,EAAQ,EAAE;QAC/B,MAAM,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC;IAC5B,CAAC;IACD,IAAI,EAAE,CAAC,GAAG,IAAe,EAAQ,EAAE;QAC/B,MAAM,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC;IAC5B,CAAC;IACD,KAAK,EAAE,CAAC,GAAG,IAAe,EAAQ,EAAE;QAChC,MAAM,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IAC7B,CAAC;IACD,KAAK,EAAE,CAAC,GAAG,IAAe,EAAQ,EAAE;QAChC,MAAM,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IAC7B,CAAC;IACD,KAAK,EAAE,CAAC,GAAG,IAAe,EAAQ,EAAE;QAChC,MAAM,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IAC7B,CAAC;CACJ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACnCF;AACA;AACA;AACA,kDAAkD,wCAAwC;AAC1F;AACA;AACA,E;;;;ACNA,wF;;;;ACAA;AACA;AACA;AACA,uDAAuD,iBAAiB;AACxE;AACA,gDAAgD,aAAa;AAC7D,E;;;;;;;;;;;;;;;;;;;;;;;ACNyB;AACD;AACA"}
|